Cette article est la synthèse des précédents :

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


Les commentaires sont fermés.