#! /bin/sh
### BEGIN INIT INFO
# Provides:          rsync-backup
# Required-Start:
# Required-Stop:     $local_fs $network $named $remote_fs $syslog $time
# Should-Stop:
# Default-Start:
# Default-Stop:      0
# Short-Description: Sauvegarde du système.
### END INIT INFO

envoyer_mail () {

	echo "$1" | mail -s "[error] [`hostname`] [$NAME]" $USER

	return 0
}

do_stop () {

	# initialiser les variables
	local nom_hote=`hostname`

	# vérifier que le point de montage est monté
	# si le point de montage est un dossier et qu'il est monté alors continuer sinon retourner 1
	[ -d $point_montage ] && ( /bin/mountpoint -q $point_montage || return 1 )

	# tester si l'on peut écrire dans le dossier du point de montage
	# retourner 2 en cas d'échec
	[ ! -w $point_montage ] && return 2;

	# si le dossier up-to-date n'existe pas alors créer le dossier up-to-date
	[ ! -d $point_montage/$nom_hote/up-to-date ] && mkdir -p $point_montage/$nom_hote/up-to-date

	# si le dossier increment n'existe pas alors créer le dossier increment
	[ ! -d $point_montage/$nom_hote/increment ] && mkdir -p $point_montage/$nom_hote/increment

	# exécuter la commande rsync de sauvegarde
	/usr/bin/rsync --human-readable \
		--recursive --links --perms --times --delete-after \
		--log-file=/var/log/rsync-backup.log \
		--backup --backup-dir=$point_montage/$nom_hote/increment/`date +%y%m%d`/ \
		--exclude-from=$rsync_backup_include --exclude='**' \
		/ $point_montage/$nom_hote/up-to-date/ || return 3

	# supprimer les anciennes sauvegarde
	find $point_montage/$nom_hote/increment/ -mindepth 1 -maxdepth 1 -type d -ctime +$nb_jours -exec rm -rf {} \;

	return 0
}

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=rsync-backup
SCRIPTNAME=/etc/init.d/$NAME
rsync_backup_conf='/etc/rsync-backup.conf'
rsync_backup_include='/etc/rsync-backup-include'
point_montage=''
nb_jours=30

# lire la librairie init-functions
. /lib/lsb/init-functions

# lire le fichier rsync-backup.conf s'il est lisible
# exit 1 en cas d'échec
if [ -r $rsync_backup_conf ] ; then

	. $rsync_backup_conf
else

	log_failure_msg $NAME": " "le fichier $rsync_backup_conf n'est pas lisible"

	envoyer_mail "le fichier $rsync_backup_conf n'est pas lisible"

	exit 1
fi

# tester si le fichier rsync-backup-include est lisible
# exit 1 en cas d'échec
if [ ! -r $rsync_backup_include ] ; then

	log_failure_msg $NAME": " "le fichier $rsync_backup_include n'est pas lisible"

	envoyer_mail "le fichier $rsync_backup_include n'est pas lisible"

	exit 1
fi

case "$1" in

 	stop)
	  	log_daemon_msg $NAME "sauvegarde de la machine..."

		# exécuter la méthode do_stop
		do_stop

		# en fonction du résultat afficher le message de fin
		case "$?" in
			0)	log_end_msg 0
				exit 0
				;;

			1)	log_end_msg 1
				envoyer_mail "impossible de monter le point de montage $point_montage"
				exit 1
				;;

			2)	log_end_msg 1
				envoyer_mail "ne peut pas écrire dans dossier du point de montage $point_montage"
				exit 1
				;;

			3)	log_end_msg 1
				envoyer_mail "échec de la commande rsync"
				exit 1
				;;
		esac
		;;

	*)
		echo "Usage: $0 stop" >&2
		exit 3
		;;
esac