Après vous avoir fait mariner pendant assez longtemps, voici la suite de la mise en place de la sauvegarde distante.
Nous allons aujourd’hui commencer le script qui va créer un répertoire de sauvegarde, le synchroniser avec les éléments que nous voulons sauvegarder et faire une image disque chiffrée à partir de ce répertoire. Au passage nous verrons deux petits trucs sympa dans le scripting shell. Les fonctions et la gestion des paramètres.
Début du script
Les scripts shells, ou perl, ou ruby ou autres commencent tous par la même chose:nbsp;: le « shebang ».
Il s’agit d’annoncer quel interpréteur nous allons utiliser.
En général, et pour des questions de portabilité on utilise sh
.
Le shebang est alors :
|
|
Ensuite, on place en général des informations sur le script lui même. Ce qu’il fait, quel en est l’auteur, à quelle date, quels sont les modifications qui y ont été apportées, par qui et quand. Même lorsque vous êtes seul, pensez à cette partie. Elle s’avéra très utile dans six mois lorsque vous replongerez dans le script.
|
|
Une fonction
Les fonctions doivent êtres écrire et positionnée avant leurs appels dans le script.
C’est donc le moment de créer une fonction usage
qui retourne la façon d’appeler le script shell en cas d’erreur, par exemple dans les paramètres.
|
|
Le code de la fonction est entre accolades et la phrase qui sera affichée est entre double quote. $0
représente le nom du script.
Ainsi, une partie de cette fonction est facilement réutilisable.
Les paramètres attendus sont -i
avec une liste d’inclusion (les fichiers que nous voulons absolument sauvegarder) ou (le |
) -e
avec une liste d’exclusion (les fichiers que nous ne voulons surtout pas sauvegarder). Les paramètres -f
et -s
, respectivement le répertoire cible, celui qui sera à l’origine de l’image et le répertoire source, celui qui contient les fichiers que nous voulons sauvegarder, sont optionnels. Cela se reconnaît au fait qu’ils sont entourés de crochet ([]
). C’est une convention sous Unix.
Valeur par défaut
Pour les paramètres qui ne sont pas obligatoires, il faut mettre des valeurs par défaut. Il est nécessaire qu’elles soient instanciées très tôt dans le script. Donc après la définition de la dernière fonction.
|
|
Nous avons aussi besoin de la date sous une forme exploitable pour le nom de l’image.
|
|
Gérer les paramètres
La gestion des paramètres se fait avec la fonction getopts
. Voici le morceau de code qui réalise cette gestion :
|
|
Les options qui sont suivies d’un deux-points (:
) sont celles qui requièrent un argument.
Les options sont stockées dans la variable THEOPTIONS
.
Ensuite, en fonction des options, on récupère de la variable OPTARGS
les arguments de ces options.
Il faut penser au cas ou l’utilisateur demande de l’aide.
Tester les paramètres des options
Pour que le script fonctionne correctement, il est plus prudent de tester que les fichiers que l’on va utiliser en paramètres existent. C’est le rôle de cette partie de code ;:
|
|
Les commentaires expliquent comment fonctionnent ses tests, il n’est pas nécessaire de s’appesantir dessus.
La synchronisation
L’étape suivante consiste à mettre dans le répertoire cible les fichiers qui ont été sélectionnés depuis le répertoire source. La sélection se fait grâce aux listes d’inclusion et d’exclusion.
Pour faire cette synchronisation nous allons utiliser rsync
. Celui-ci à des options qui permettent de ne recopier que ce qui a été modifié depuis la dernière opération de synchronisation, accélérant du coup le processus de sauvegarde en sont entier.
|
|
La création de l’image chiffrée
Voilà le point noir du script. Je n’ai pas trouvé comment récupérer un mot de passe depuis la keychain, le mot de passe est donc en clair dans le script. Pas super sécure. Si vous lisez le man
de hdiutil
, vous verrez que l’on peut utiliser des certificats ou des clefs GPG
pour chiffrer les images. Ici c’est un cas d’école qui est présenté, à vous de l’améliorer.
Nous allons donc passer à hdiutil
le mot de passe que nous allons utiliser :
|
|
Fin pour aujourd’hui
Pensez à retourner 0
si le script s’est correctement terminé.
|
|
La suite au prochain épisode
Il nous reste à ajouter la copie distante de l’image. Nous verrons cela la prochaine fois.