Cette article est la synthèse des précédents :
- Sauvegarde avec rSnapshot
- Sauvegarde avec rSnapshot via SSH et sudo
- Permission denied sur gvfs avec rSnapshot / rsync
- rSnapshot utilisation d’un fichier d’exclusion
Il contient tous les scripts et configuration mis en oeuvre pour la sauvegarde du home de ma machine sweetHome par sweetBox.
Configuration du serveur de sauvegarde
Tout d’abord je ne planifie pas chacun des intervals rSnapshot individuellement dans Cron, j’ai une seul tache appellant un script qui lui va « calculer » quel interval rSnapshot exécuter.
L’avantage, on éteint les machines à sauvegarder à la fin de l’exécution des tous les intervals, on pourrait même éteindre la machine réalisant la sauvegarde.
Voici ce script :
/home/mon_user/bin/sauvegarde.sh
#!/bin/bash DAY_OF_WEEKLY_BACKUP=lundi DAY_OF_MONTHLY_BACKUP=01 cd $(dirname "${0}") . $HOME/.profile . wakeOnLanSweetHome.sh sleep 120 echo Sauvegarde journaliere en cours... rsnapshot -v -c rsnapshotSweetHome.conf daily > /var/log/svc/rsnapshot.log 2>&1 if [ $(date +%A) == $DAY_OF_WEEKLY_BACKUP ]; then echo Sauvegarde hebdomadaire en cours... rsnapshot -v -c rsnapshotSweetHome.conf weekly >> /var/log/svc/rsnapshot.log 2>&1 fi if [ $(date +%d) == $DAY_OF_MONTHLY_BACKUP ]; then echo Sauvegarde mensuelle en cours... rsnapshot -v -c rsnapshotSweetHome.conf monthly >> /var/log/svc/rsnapshot.log 2>&1 fi cat /var/log/mon_user/rsnapshot.log | rsnapreport.pl | mail -s Sauvegarde mon_email ssh mon_user@sweethome "shutdown -h now"
Ce script réveil sweetHome via Wake on Lan, lance la sauvegarde journalière puis hebdmadaire si on est un lundi, la mensuelle si on est un premier du mois.
Edit 27/01/2010 : Pour que le test sur le jour de la semaine fonctionne il faut que ce script soit exécuté dans un environnement pour lequel la langue est FR, or ce n’est pas le cas par défaut dans une tache Cron.
Il conviendra donc d’ajouter LANG=fr_FR.UTF-8 dnas l’en-tête de la crontab.
Cf. cet article
Puis le rapport de sauvegarde est formatté par rsnareport et envoyé par mail, enfin on éteint le pc à distance.
Pour info le WOL est réalisé dans un script à part, ce qui me permet de réveiller sweetHome quand je veux sans avoir à me rappeler son adresse MAC, il est très succinct :
wakeOnLanSweetHome.sh
#!/bin/bash echo Reveil de sweetHome wakeonlan mon_adresse_mac
Ci-dessous mon fichier de configuration rsnapshot (purgé des commentaires) :
################################################# # rsnapshot.conf - rsnapshot configuration file # ################################################# # # # PLEASE BE AWARE OF THE FOLLOWING RULES: # # # # This file requires tabs between elements # # # # Directories require a trailing slash: # # right: /home/ # # wrong: /home # # # ################################################# ####################### # CONFIG FILE VERSION # ####################### config_version 1.2 ########################### # SNAPSHOT ROOT DIRECTORY # ########################### snapshot_root /data/sauvegardes/sweetHome/ no_create_root 1 ################################# # EXTERNAL PROGRAM DEPENDENCIES # ################################# cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du cmd_rsnapshot_diff /usr/bin/rsnapshot-diff #cmd_preexec /path/to/preexec/script #cmd_postexec /path/to/postexec/script ######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # ######################################### interval daily 7 interval weekly 4 interval monthly 2 ############################################ # GLOBAL OPTIONS # # All are optional, with sensible defaults # ############################################ # Verbose level : 1 (mini) through 5 (maxi). verbose 2 loglevel 3 logfile /var/log/svc/rsnapshot.log lockfile /var/lock/rsnapshot.pid rsync_long_args --delete --numeric-ids --relative --delete-excluded --stats ssh_args -o BatchMode=yes #exclude .gvfs #include_file /path/to/include/file exclude_file /home/mon_user/bin/rsnapshotExclude ############################### ### BACKUP POINTS / SCRIPTS ### ############################### # sweetHome backup mon_user@sweethome:/home/user_distant <br class="spacer_" />
Le fichier d’exclusion contient ceci :
Trash/ .thumbnails/ .mozilla/*/*/Cache/ .gvfs tmp/
Afin d’avoir une connexion SSH sans mot de passe, j’ai généré un couple de clés stockés dans /home/mon_user/.ssh.
Pour simplifier la synthaxe SSH, j’ai ensuite créé un fichier config :
/home/mon_user/.ssh/config
Host sweethome Hostname 192.168.1.100 User mon_user
Configuration de la machine sauvegardée
La clé publique généré sur le serveur de sauvegarde à été copié dans authorized_key sur la machine sauvegardée, et modifiée ainsi :
from="IP_sweetBox",command="/home/user_distant/bin/validate-rsync" ssh-rsa AAAAB3...VJpj9cjzjPTyYcXgGiQ== <a href="mailto:mon_user@sweetBox">mon_user@sweetBox</a>
On indique ainsi que cette clé utilisable que pour une connexion venant de l’IP from et que l’on exécute le script validate_rsync lors de l’établissement de cette connexion SSH.
Ce script de validation s’assure que la connexion SSH n’est établie que pour les commandes rsync (pour la sauvegarde) et/ou shutdown (pour éteindre sweetHome à la fin de la sauvegarde :
bin/validate-rsync
#!/bin/sh case "$SSH_ORIGINAL_COMMAND" in *\&*) echo "Rejected" ;; *\(*) echo "Rejected" ;; *\{*) echo "Rejected" ;; *\;*) echo "Rejected" ;; *\<*) echo "Rejected" ;; *\`*) echo "Rejected" ;; *\|*) echo "Rejected" ;; rsync\ --server*) sudo $SSH_ORIGINAL_COMMAND ;; shutdown\ -h\ now*) sudo $SSH_ORIGINAL_COMMAND ;; *) echo "Rejected" ;; esac
On le voit ici que les commande rsync et shutdown sont précédées de sudo pour les exécuter en super-utilisateur.
Il convient donc de modifier le sudoer (sudo visudo) pour autoriser l’utilisateur de sweetHome réalisant la sauvegarde (utilisateur que j’ai décrit comme utilisateur distant vis a vis de sweetBox qui est ma référence) ait le droit de lancer sudo pour ces 2 commandes sans mot de passe.
J’ai donc ajouté cette ligne à mon sudoer :
mon_user ALL = NOPASSWD: /usr/bin/rsync, /sbin/shutdown
Et voila..
Edit :
10/11/2009 : ajout de l’option –relative aux paramètres rsync et mise à jour de la variable rsnapshot exclude_file
27/01/2010 : Ajout de la remarque concernant le langue du script de sauvegarde dans le cadre d’une exécution via Cron