BackupPC per tutti
09.01
Requisiti
Ho finalmente trovato il sistema di backup per casa che ha molte delle caratteristiche che mi interessano, ovvero
- Possibilità di schedulare i backup sia incrementali che completi (con pruning dei vecchi backup esponenziale)
- Nessun demone installato sui client e poca configurazione di questi ultimi
- Buona resistenza agli errori (se un client si spegne durante un backup si lamenta un po’ ma niente di più)
- Notifica di backup completati, errori, ecc…via email
- Comoda gestione di ogni aspetto (anche il ripristino) tramite interfaccia web
- Disponibile su repository per Ubuntu Server 8.04
- Funziona tramite rsync, ssh, tar, SAMBA, ecc…
Il programma in questione si chiama BackupPC, e l’ho trovato per caso dopo un apt-cache search venuto male. Riporto le istruzioni per installarlo e configurare un ambiente simile al mio che è composto da:
- Un server Ubuntu 8.04 con HD esterno da 640GB montato via USB che si occuperà di richiamare e gestire i backup. su questo server sono montati anche altri servizi importanti (Apache, ecc..) che andranno backuppati.
- Tre client con Ubuntu 9.04 Desktop, di cui un laptop, non sempre connessi in rete e in DHCP (con DynamicDNS gestito dal router)
Installazione
Per prima cosa spostiamoci sul computer che dovrà fungere da server (l’importante è che abbia un bel po’ di spazio…provate con FreeNAS ne non ne avete!) e controlliamo di avere installato:
- Un web server (preferibilmente Apache 2)
- Un MTA (io preferisco postfix perchè lo conosco ed era già installato sulla macchina, altrimenti BackupPC di suo usa exim4)
Una volta che avremo tutto installiamo il programma con:
-
sudo apt-get update && sudo apt-get install backuppc
In questo modo avremo il nostro bel sistema aggiornato e il backuppc installato. In fase di configurazione probabilmente vi verrà chiesto di configurare un web server, selezionate apache2. Se salta fuori una finestra che vi dice la password per l’interfaccia web potrete anche ignorarla: la cambieremo successivamente.
Una volta installato tutto verrà creato un utente che si occuperà di fare e gestire i backup. Diventiamo root e quindi “trasformiamoci” nell’utente backuppc con
-
su backuppc
La shell di default è /bin/sh e non è proprio il massimo del confort, quindi eseguiamo una ben più amichevole
-
bash
Configurazione dell’accesso ai client
Spostiamoci ora nella nostra home (/var/lib/backuppc) e generiamo le nostre chiavi SSH che utilizzeremo per connetterci senza password ai vari client:
-
cd
-
ssh-keygen -t rsa
-
cp ~/.ssh/id_rsa.pub ~/.ssh/id_rsa_backuppc.pub
La chiave che abbiamo rinominato in id_rsa_backuppc.pub andrà trasferita via SSH su ogni client che vogliamo backuppare, preferibilmente tramite scp.
Una volta trasferite spostiamoci su ogni client e diamo i comandi per abilitare il login come root tramite chiave pubblica/privata:
-
sudo su
-
cd
-
touch ~/.ssh/authorized_keys2
-
cat /path/dove/sta/id_rsa_backuppc.pub >> ~/.ssh/authorized_keys2
Per aumentare la sicurezza possiamo rimuovere la chiave pubblica e sopratutto disabilitare la password di root sulla macchina
-
rm /path/dove/sta/id_rsa_backuppc.pub
-
passwd -l root
In questo modo l’accesso come root al computer può essere eseguito soltanto tramite sudo o tramite chiave privata da backuppc. Per un controllo più granulare degli accessi potete sempre contare su PAM…
Ripetete questi passi per ogni client e quindi testate dal server se tutto funziona senza problemi provando a loggarvi su ognuno di essi (sempre come utente backuppc) più volte:
-
ssh root@client1 'whoami'
-
ssh toot@client2 'whoami'
- ecc…
Se tutto va bene la shell dovrebbe restituire “root” senza chiedere nessuna password. Una volta che siamo sicuri di questo possiamo proseguire con i passi successivi.
Accesso all’interfaccia web
Cambiamo la password casuale generata da BackupPC per l’accesso all’interfaccia web con il comodo htpasswd:
-
htpasswd /etc/backuppc/htpasswd backuppc
In questo modo possiamo già provare ad accedere a http://indirizzo.del.server/backuppc con l’utente backuppc e la password appena scelta. Se ci dimenticassimo la password o se sospettassimo che questa sia stata violata possiamo sempre ridare lo stesso comando e cambiarla.
Dato che dall’interfaccia web è possibile eseguire comandi e ripristinare files come utente root su tutti i client è decisamente conigliato che il servizio sia cifrato con SSL e non pubblicato sull’esterno della vostra rete casalinga. Per SSL la quantità di guide in rete su Apache è notevole, per il NAT…dipende dal vostro router e dalla vostra rete!
Tutti i comandi eseguiti finora e che verranno dati in seguito (a meno di esplicita affermazione) possono essere eseguiti come utente backuppc, lasciando quindi root in pace e rispettando il decalogo della sicurezza del buon sistemista.
Modifica della configurazione
Modifichiamo il file /etc/backuppc/config.pl che rappresenta il “cuore” di questo programma: qui sono definite tutte le variabili di default del programma (e sono davvero tante) ma a noi ne interessano relativamente poche che riporto di seguito senza commenti:
$Conf{XferMethod} = 'rsync';
$Conf{RsyncShareName} = ['/'];
$Conf{BackupFilesExclude} = {
'*' => [
'/proc',
'/dev',
'/tmp',
'/mnt',
'/media',
'/sys',
'/lost+found',
'/var/tmp',
'/var/cache',
'/var/spool',
'/var/run',
'/var/lock',
'/home/*/.mozilla/*/*/Cache'
]
};
$Conf{FullKeepCnt} = [1, 1, 0, 1, 0, 1];
$Conf{TopDir} = '/share/backup/backuppc';
$Conf{LogDir} = '/var/log/backuppc';
$Conf{EMailNotifyMinDays} = '0.1';
$Conf{EMailAdminUserName} = 'vostro.indirizzo@email.com';
$Conf{DumpPostUserCmd} = '/etc/backuppc/sendemail.sh $user $xferOK $host $type';
Per rispettare questa configurazione ho creato (da root) la cartella /var/log/backuppc/ e assegnata ad essa i diritti corretti. Inoltre ho creato sempre da root la cartella /share/backup/backuppc/, settata anch’essa con i permessi di lettura e scrittura per l’utente backuppc e infine montato l’hard disk esterno tramite fstab su quest’ultima. Cambiate inoltre la variabile EMailAdminUserName.
E’ il momento di aggiungere alla configurazione la lista dei client che andranno backuppati andando a modificare il file /etc/backuppc/hosts e aggiungendo una linea per ogni client in questo modo:
localhost 0 backuppc client1 0 root client2 0 root client3 0 root ...
Il nome (“client1″, “client2″, ecc…) deve essere il nome a cui il computer risponde in rete, se un DNS è attivo o se configurato nel file /etc/hosts; lo 0 indica che il client non è in dhcp (un’opzione utile sopratutto quando si ha a che fare con macchine windows) e la terza colonna indica l’utente con cui backuppc si loggherà sulla macchina remota per eseguire il backup. Dato che abbiamo configurato su tutti i client l’accesso come root l’unica eccezione è per localhost dove l’utente backuppc si occuperà di tutto.
Ed è proprio per il nostro server che dobbiamo cambiare leggermente la configurazione di default: rsync non è adattissimo (anche se si può fare) e sopratutto per evitare di backuppare la nostra cartella di backup dovremo configurare separatamente le esclusioni. Modifichiamo quindi il file /etc/backuppc/localhost.pl e scriviamo qualcosa di simile:
$Conf{XferMethod} = 'tar';
$Conf{TarShareName} = ['/'];
$Conf{TarClientCmd} = '/usr/bin/sudo $tarPath -c -v -f - -C $shareName'
. ' --totals';
$Conf{BackupFilesExclude} = ['/proc','/dev','/tmp','/mnt','/media','/sys','/lost+found','/var/tmp','/var/cache','/var/spool','/var/run','/var/lock','/share'];
$Conf{TarFullArgs} = '$fileList';
$Conf{TarIncrArgs} = '--newer=$incrDate $fileList';
Ovviamente se avete deciso di usare un altro percorso e non /share per memorizzare i vostri dati cambiate di conseguenza l’opzione BackupFilesExclude.
Se tuttavia lasciassimo così le cose probabilmente riceveremmo in fase di backup tutta una serie di errori di accesso negato, dato che l’utente backuppc non ha il permesso di lettura su tutti i files dell’hard disk; dobbiamo quindi permettergli di eseguire tar come root andando a modificare (come root) il file sudoers con visudo e aggiungendo la seguente linea:
-
backuppc ALL=NOPASSWD: /bin/tar
Notifiche
Ora testiamo l’invio di email da parte del programma. Per far si che funzioni, oltre ad avere un MTA installato, dovrete anche configurarlo per usare un relay esterno. Un modo per farlo con Postfix è spiegato qui. Dopodichè possiamo usare il comando
-
/usr/share/backuppc/bin/BackupPC_sendEmail -u vostro.indirizzo@email.com
Che invia un messaggio di test all’indirizzo specificato. Se non dovesse arrivare controllate il file /var/log/mail.err e scoprite il perchè…
Purtroppo però BackupPC non invia mail di default per i backup completati. Per fare ciò è utile piazzare uno script che lo faccia al posto suo e richiamarlo tramite l’opzione DumpPostUserCmd. Creiamo dunque un file in /etc/backuppc chiamato sendemail.sh e diamogli i permessi di esecuzione. Il file deve contenere una cosa del genere:
#!/bin/bash
# $conf{DumpPostUserCmd} = '/etc/backuppc/sendemail.sh $user $xferOK $host $type'
# Manda una email quando il backup ha successo o fallisce
varDate=`date '+%F %T'`
CONFPATH=/etc/backuppc/
BACKUPPCLOG=/var/log/backuppc/LOG
EMAILTO=vostro.indirizzo@email.com
if [ $2 = 1 ]
then
/usr/bin/mail -s "$4 backup of $3 has completed successfully" ${EMAILTO} < $CONFPATH/mailtext.txt /bin/echo "$varDate $4 backup competed and email sent to ${EMAILTO}" >> $BACKUPPCLOG
else
/usr/bin/mail -s "Problem with $4 backup of $3, check log files" ${EMAILTO} < $CONFPATH/mailtext.txt /bin/echo "$varDate Exit code $2 for host $3, user $1" >> $BACKUPPCLOG
fi
Cambiate come al solito la variabile per riflettere il vostro indirizzo email e create un altro file nella stessa cartella chiamato mailtext.txt che dovrà contenere un messaggio standard del tipo:
THIS IS AN AUTOMATED SYSTEM MESSAGE!! PLEASE DO NOT REPLY!! -- Backuppc on yourpc
Che sarà il corpo del vostro messaggio. Personalizzatelo come volete…
Fine
Complimenti! Il vostro sistema è completamente configurato, ora potete accedere all’interfaccia web e modificare altri parametri se lo vorrete, o far partire backup completi, incrementali e ripristini vari.
Fatemi sapere se avete precisazioni, problemi o correzioni…

[...] BackupPC per tutti [...]
nella sezione notifica non ho potuto cambiare il percorso del log. ho lasciato quello che si crea backuppc (var/lib/ ect)
inoltre nella sezione if [ $2 = 1 ]
dovresti cambiare in
if [ $2 =1 ]
lo spazio dopo l’uguale da errore.
nonostante questo, anche se mando un sh sendemail.sh non da errore ma neanche la mail viene inviata quando il backup è ok. (xferok)
chissà dove sbaglio. se faccio il test su backuppc_sendmail la mail di test mi arriva.
mah!
ho trovato. non puoi fare $2 =1 il comando non funziona per cui il valore di xferOK non viene preso in considerazione. lo script corretto è:
#!/bin/bash
# $conf{DumpPostUserCmd} = ‘/etc/backuppc/sendemail.sh $user $xferOK $host $type’
# Manda una email quando il backup ha successo o fallisce
varDate=`date ‘+%F %T’`
CONFPATH=/etc/backuppc/
BACKUPPCLOG=/var/lib/backuppc/log/LOG
EMAILTO=nome@dominio.it
if [ "$2" = "1" ]
then
/usr/bin/mail -s “Backup di tipo $4 per $3 completato con successo” ${EMAILTO} > $BACKUPPCLOG;
else
/usr/bin/mail -s “Problema con il backup di tipo $4 per $3, controlla i log files $2″ ${EMAILTO} > $BACKUPPCLOG;
fi
Grazie per la dritta!
Che versione di backuppc stai usando?