#!/bin/bash
# Crée un fichier de swap.

#  Un fichier swap fournit un espace de stockage pour le cache,
#+ ce qui aide à accélérer certaines opérations des systèmes de fichiers.

ROOT_UID=0                  # Root a l'$UID 0.
E_MAUVAIS_UTILISATEUR=65    # Pas root ?

FICHIER=/swap
TAILLEBLOC=1024
BLOCSMINS=40
SUCCES=0

# Ce script doit être exécuté en tant que root.
if [ "$UID" -ne "$ROOT_UID" ]
then
  echo; echo "Vous devez être root pour exécuter ce script."; echo
  exit $E_MAUVAIS_UTILISATEUR
fi  
  

blocs=${1:-$BLOCSMINS}           #  Par défaut à 40 blocs, si rien n'est
                                 #+ spécifié sur la ligne de commande.
# Ceci est l'équivalent du bloc de commandes ci-dessous.
# ------------------------------------------------------
# if [ -n "$1" ]
# then
#   blocs=$1
# else
#   blocs=$BLOCSMINS
# fi
# ------------------------------------------------------


if [ "$blocs" -lt $BLOCSMINS ]
then
  blocs=$BLOCSMINS              # Doit être au moins long de 40 blocs.
fi  


######################################################################
echo "Création du fichier swap d'une taille de $blocs blocs (Ko)."
dd if=/dev/zero of=$FICHIER bs=$TAILLEBLOC count=$blocs  # Vide le fichier.
mkswap $FICHIER $blocs             # Indique son type : swap.
swapon $FICHIER                    # Active le fichier swap.
#  Notez que si au moins une de ces commandes échouent,
#+ cela posera de sérieux problèmes.
######################################################################

#  Exercice :
#  Ré-écrivez le bloc de code ci-dessus de façon à ce que,
#+ si une erreur se produit:
#    1) un message d'erreur est envoyé sur stderr,
#    2) tous les fichiers temporaires sont nettoyés,
#    3) le script sort immédiatement avec un code d'erreur approprié.

echo "Fichier swap créé et activé."

exit $SUCCES
