#!/bin/sh
###########################################################
# This script uses rsync to backup directories on a media
# (ex: USB disk) with a copy and incremental method.
###########################################################
#     This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
############################################################
#
# Written by Spip
# Adapted by Chimrod
#    added script path detection
#          delete with find
# Version 1.0
#
############################################################
#to be nice...
ionice -c3 -p$$
renice +15 -p $$
THEDATE=`date +%F_%Hh%M`
#FILE=`dirname $0`
FILE=`dirname "$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"`
LOGFILE=$FILE'/log/sauvegarde'

SPLIT='====================================================================='
#check logfile directory

if ! [ -e $LOGFILE ]
then
	/bin/mkdir -p $LOGFILE
fi

#check if the media is mounted

if ! [ -e $FILE ]
then
	echo "$THEDATE : péripherique non connecté. Pas de sauvegarde possible" >> "$LOGFILE/save.log"
	echo $SPLIT >> "$LOGFILE/save.log"
	exit 0
fi

#prevent a second task
LOCKFILE="/var/lock/sauvegarde.lock"
[ -f $LOCKFILE ] && exit 0

#if the script are stoped, remove lockfile
trap "rm -f $LOCKFILE" EXIT
touch $LOCKFILE
echo "$THEDATE : Début de sauvegarde" >> "$LOGFILE/save.log"
# $1:time to keep files; $2: name of the backup; $3: target

function save() {

	echo "$SPLIT" >> "$LOGFILE/$2.log"
	echo "$THEDATE" >> "$LOGFILE/$2.log"

	#Incremental & copie
	INC="$FILE/$2/INC/$THEDATE"
	BAK="$FILE/$2/BAK"
	TOSAVE="$3"
	mkdir -p $INC

	if ! [ -e "$BAK" ]
	then
	/bin/mkdir -p "$BAK"
	fi

	#a: archivage :recurcif, preserve dates, persmissions, groupes...
	#v: verbose mode
	#delete : supprime les fichiers n'etant plus chez l'émeteur >> copie conforme.
	/usr/bin/rsync -a --stats --delete --backup --backup-dir="$INC" "$TOSAVE" "$BAK" >> "$LOGFILE/$2.log"

	cd $FILE/$2/INC
	tar -czvf "$INC.tar.gz" "$THEDATE"
	echo tar -czvf "$INC.tar.gz" "$FILE/$2/INC/$THEDATE"
	rm -rf "$THEDATE"
	#Remove the file older than $1 days
	find "$FILE/$2/INC" -mtime +$1 -delete >> "$LOGFILE/save.log"

}

#List here all repositories to backup

save 90 etc /etc/

#to log the end of the backup
THEDATE=`date +%F_%Hh%M`
echo "$THEDATE : Sauvegarde effectuée" >> "$LOGFILE/save.log"
exit 0
