====== Script grafico per backup con rsync via ftp ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//2/2/2011//** \\ \\
(parte in awk scritta da Florian Purucker e [[http://blog.crowdway.com/2008/12/24/zenity-rsync-and-awk/|Crowdway]] ) \\ \\
{{sistema:miobackup.png|}}
Andremo a realizzare uno script che fara' il backup incrementale su un qualunque spazio FTP grazie a rsync e curlftpfs.
Dato che rsync non supporta tale protocollo monteremo prima di tutto una cartella ftp grazie a curlftpfs e poi grazie a rsync faremo il nostro backup sulla cartella ftp appena montata. Per rispolverare l'uso di curlftpfs e rsync potrebbe essere utile dare uno sguardo ai seguenti articoli : [[sistema:montare_file_system_ftp]], [[sistema:script_backup_con_rsync_ed_openssh]] .
===== Lo script =====
Per fare funzionare lo script basta dare i permessi di esecuzione al file e cambiare in base alle nostre esigenze le seguenti righe:
#-------------------------------------------------------
SRC=$HOME/Documenti/tesi
DEST=$HOME/backup
FTPURL=ftp://utente:password@mio.hostftp.net/backup
BROWSER=chromium-browser
LOGFILE=$HOME/backup.log
RSYNCTMP=/tmp/rsync
#------------------------------------------------------
**miobackup.sh**
# miobackup.sh
#
# Copyright 2011 Fabio DM ,
#
# Thanx to Crowdway and Florian Purucker
# ( http://blog.crowdway.com/2008/12/24/zenity-rsync-and-awk/ )
#Cambiare questi parametri in base alle proprie esigenze
#-------------------------------------------------------
SRC=$HOME/Documenti/tesi
DEST=$HOME/backup
FTPURL=ftp://utente:password@mio.hostftp.net/backup
BROWSER=chromium-browser
LOGFILE=$HOME/backup.log
RSYNCTMP=/tmp/rsync
#------------------------------------------------------
#Verifico le dipendenze
zenity -h >/dev/null;
if [ "$?" != "0" ]; then
echo "Installare zenity per favore."
exit -1
fi
rsync --version >/dev/null;
if [ "$?" != "0" ]; then
zenity --error --text "Rsync non installato."
exit -1
fi
#Setto la directory dello scrip come directory corrente di lavoro
cd `dirname $0`
#Creo una directory temporanea per far lavorare rsync in remoto
mkdir $RSYNCTMP >/dev/null
# Chiede conferma prima di continuare lo script
zenity --question --text "Vuoi avviare il backup?"
if [ "$?" != "0" ] ; then
exit 0
fi
#Smontiamo il dispositivo remoto
fusermount -u $DEST
#Proviamo a montare la cartella FTP e in caso di fallimento riportiamo
#un messaggio
curlftpfs -o allow_other,rw $FTPURL $DEST 2> $HOME/curlftpfs-error.log
if [ "$?" != "0" ]; then
zenity --error --text "Errore nella connessione all' host"
zenity --width=400 --height=300 --title="Si sono verificati i seguenti errori:" \
--text-info --filename=$HOME/curlftpfs-error.log
exit -1 ;
fi
#Mi serve un file con uno script awk per fare il parsing si rsync sulla progressbar
echo '{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100"%"
}
else
{
print "#"$0;
}
fflush();
}' >/tmp/rsync.awk
#Procediamo con il backup e catturiamo l'output per la progressbar
rsync -av --no-owner --no-group --temp-dir=/tmp/rsync --log-file=$LOGFILE --progress $SRC $DEST | awk -f /tmp/rsync.awk |
zenity --progress --title "Backing up" --text="Scanning..." --percentage=0 --auto-kill --auto-close
#Catturiamo eventuali errori
if [ "$?" != "0" ]; then
zenity --error --text "Errore durante il backup"
zenity --width=400 --height=300 --title="Si sono verificati i seguenti errori:" \
--text-info --filename=$HOME/rsync-error.log
exit -1 ;
fi
#Mostriamo il log del backup
zenity --width=700 --height=500 --title="Ricevuta del backup" --text-info --filename=$LOGFILE
# Alla fine ci viene chiesto se vogliamo visualizzare i file
if zenity --question --text "Vuoi visualizzare i file?" ; then
$BROWSER $FTPURL
fi
#Smontiamo il dispositivo remoto
fusermount -u $DEST
#Cancelliamo un po' di file non piu' necessari
rm $HOME/curlftpfs-error.log $LOGFILE /tmp/rsync.awk