BackupPC sur Debian Squeeze
De wikiGite
Sommaire
Installation
apt-get install backuppc
Bien noter le mot de passe de l'utilisateur "backuppc" créé à l'installation ! Il est modifiable par la suite avec :
htpasswd /etc/backuppc/htpasswd backuppc
Vérifier la connexion à la console web par http://server.domain.tld/backuppc.
L'arborescence de configuration est un peu confuse :
- Les binaires sont dans /usr/share/backuppc, avec un répertoire conf et un fichier config.pl qui ne semblent pas pris en compte
- la config globale et par host est dans /etc/backuppc
- les sauvegardes se font dans /var/lib/backuppc/pc
Paramétrage
Génération des clés
Pour sauvegarder des hôtes linux par rsync via ssh, il faut générer une clé sur le serveur de sauvegarde
su - backuppc ssh-keygen -t dsa
copier le contenu de /var/lib/backuppc/.ssh/id_dsa et le coller dans /root/.ssh/authorized_keys sur le serveur à sauvegarder.
Paramétrage global
Dans l'interface web, paramétrer le serveur de sauvegarde (menu de gauche, Server / Edit config) :
- En premier lieu, dans l'onglet CGI, passer la langue en français (fr) puis dans le menu Admin options recharger l'interface.
- ajouter le(s) host(s) à sauvegarder (onglet Machines). Laisser "backuppc" comme utilisateur (pour RSYNC notamment, le compte "root" est passé dans la ligne de commande (voir RsyncClientCmd). Pour TAR voir plus bas).
- indiquer la méthode de sauvegarde par défaut (onglet Xfer - cette méthode pourra ensuite être modifiée individuellement pour chaque host)
- Configurer le destinataire des mails d'admin (un mail valide (admin@domain.tld) dans EMailAdminUserName) dans l'onglet Courriel, pourra aussi être modifié individuellement. laisser EMailUserDestDomain vide si les mails ne sont destinés qu'a un seul mail admin.
- vérifier les chemins des utilitaires (onglet Serveur)
Tester les mails
Pour être sûr que BackupPc réussit à envoyer des mails à partir du serveur de sauvegarde, on peut tester l'envoi :
# su - backuppc $/usr/share/backuppc/bin/BackupPC_sendEmail -u <admin destinataire des mails>@domain.tld
BackupPC n'envoie que des mails d'erreurs. Pour envoyer un mail à chaque sauvegarde, on peut créer un script /var/lib/backuppc/mailadmin.sh
#!/bin/bash MAIL_ADMIN=<Mail de l'admin> if [ $1 -eq 0 ] then (date echo "Sauvegarde BackupPC" )| mail -s "ERREUR BACKUP SUR $2 $(date +%d/%m)" $MAIL_ADMIN else (date echo "Sauvegarde BackupPC" )| mail -s "Sauvegarde $2 $(date +%d/%m) terminee" $MAIL_ADMIN fi
Sans oublier le
chmod 755 /var/lib/backuppc/mailadmin.sh
Et dans la configuration globale, onglet paramètres de sauvegarde, ajouter un script post backup
DumpPostUserCmd -> /var/lib/backuppc/mailadmin.sh $xferOK $host
Sauvegardes
Paramétrage des sauvegardes
Pour chaque host (en le sélectionnant dans la liste déroulante, puis "Modifier la configuration", onglet Xfer), indiquer les répertoires à sauvegarder ( RsyncShareName si RSYNC est choisi comme méthode de sauvegarde), éventuellement les répertoires à exclure (BackupFilesExclude).
Exclusions
Attention la syntaxe des exclusions est spéciale dans l'interface :
- La "clé" représente le "RsyncShareName" auquel doit s'appliquer l'exclusion
- un clic sur "ajouter" affiche à droite de cette clé un nouveau tableau dans lequel on mettra les fichiers ou sous-répertoires à exclure.
Exemple si le répertoire sauvegardé est /etc et qu'on veut exclure /etc/acpi, la clé sera "/etc" et dans le tableau qui s'affiche à droite on ajoutera /acpi.
Sauvegarde du serveur de sauvegarde lui-même
Par défaut une sauvegarde TAR du répertoire /etc du serveur local est programmée. C'est une bonne idée, sauf que tar lancé par l'utilisateur backuppc n'a pas assez de droits pour sauvegarder certains fichiers protégés du système...
Première chose à faire : en sélectionnant le host "localhost", dans Xfer modifier :
TarClientCmd -> /usr/bin/sudo LC_ALL=C $tarPath -c -v -f - -C $shareName+ --totals
Note : le "LC_ALL=C" est très important pour que les messages renvoyés par TAR soient en anglais donc interprétables par BackupPC !
Puis lancer visudo (apt-get install sudo si le programme nexiste pas) ajouter à la fin du fichier :
backuppc ALL = NOPASSWD: /bin/tar
Planification
Dans BackupPC on ne paramètre pas les horaires de départ des sauvegardes, mais on indique les horaires auxquels les sauvegardes ne DOIVENT PAS être lancées. Ce paramètre peut être mis par défaut dans la configuration globale, ou modifiée pour chacun des hosts. Ensuite, le programme se débrouille pour planifier les sauvegardes dans ces fenêtres de temps.
Malheureusement ça n'empêche pas les backups à des heures non voulues (en pleine journée, par exemple) car le programme peut en lancer selon les conditions (un défaut de ping qui réinitialise le compteur BlackoutGoodCnt, par exemple...).
Pour éviter des sauvgardes en journée, on peut l'empêcher de "se réveiller" pour planifier des sauvegardes. Dans ce cas modifier dans l'onglet "Serveur" :
WakeupSchedule -> 22, 23, 1, 2, 3, 4, 5, 6
Le premier chiffre est l'heure de réveil de BackupPC_nightly, qui conditionne tous les autres.
Autre méthodde pour forcer une planification, on peut utiliser CRON. Explications complètes ici :
http://sourceforge.net/apps/mediawiki/backuppc/index.php?title=Schedule_Backups_With_Cron
Dans ce cas, les sauvegardes ayant lieu à des heures régulières, backuppc n'en re-planifie pas d'autres par lui-même.
Rétention
On peut jouer sur la rétention des sauvegarde selon un nombre de sauvegardes FULL à garder. C'est assez bien expliqué ici :
http://sourceforge.net/apps/mediawiki/backuppc/index.php?title=Keep_yearly_backups
Par exemple, pour garder 4 semaines glissantes + un backup par mois pour les 12 derniers mois (4 backups 1 semaine (="FullPeriod") + 0 backup datant de 2 semaines + 12 backups datant de 4 semaines) :
FullKeepCnt -> 4, 0, 12
Script PRE/POST backups
Dans "paramètres de sauvegarde" pour chaque host, on peut indiquer un script à lancer avant ou après la sauvegarde. Par exemple, pour lancer un dump MySQL avant la sauvegarde, on mettre
$Conf{DumpPreUserCmd} -> $sshPath -q -x -l root $host /usr/bin/dumpMysql.sh
/usr/bin/dumpMysql.sh étant un script utilisant mysqldump.
Création d'utilisateurs
Lors de la déclaration des machines, on peut ajouter d'autres utilisateurs, qui recevront les mails de notification, et qui peuvent se connecter à l'interface. Dans ce cas, seules les machines sur lesquels ils ont été ajoutés seront visibles. Par contre il n'y a à priori pas de notion de droits supplémentaires : un utilisateur qui voit une machine peut lancer des sauvegardes/restaurations sur cette machine, on ne peut pas par exemple limiter qu'à la restauration.
Une fois ajoutés dans le champ "moreUsers" sur les machines qu'il a le droit de gérer, l'utilisateur doit être ajouté à backuppc. Sur le serveur de backup lancer :
htpasswd /etc/backuppc/htpasswd login_du_nouvel_utilisateur
et entrer le mot de passe quand htpasswd le demande. Ensuite cet utilisateur peut se connecter à l'interface web.
NOTE : cet utilisateur n'a pas besoin d'être créé au niveau du système linux.
Déplacement du répertoire de sauvegarde
Le répertoire par défaut sur Debian est /var/lib/backuppc.
Ce chemin ne peut pas facilement être modifié dans le logiciel (la modification du TopDir dans Config.pl ne suffit pas, le chemin est également compilé en "dur" dans les modules Perl de BackupPc...).
Le plus simple pour le modifier est :
- si on reste sur le même disque dur, de créer un lien symbolique vers le nouveau répertoire,
- si on souhaite utiliser un autre disque, de copier son contenu vers ce disque et de monter celui-ci sur /var/lib/backuppc.
Restaurations
Restauration vers le serveur d'origine
La restauration par l'interface web est simple, il suffit de sélectionner les fichiers ou répertoires à restaurer en cochant les cases en face des noms, et demander la restauration.
Téléchargement d'archives
Le premier choix dans l'écran de restauration est de restaurer vers le serveur d'origine. Les autres choix sont de télécharger une archive zip ou tar des fichiers sélectionnés, vers le poste de travail local.
Mais attention : les archives tar ou zip ont parfois été illisibles. Vérifier tout de suite si elles sont correctes.
Restauration vers un autre serveur
Si le serveur d'origine est sélectionné par défaut pour la restauration, o peut choisir un autre serveur cible dans la liste déroulante.
Note : le répertoire cible ("Restaurer les fichiers vers le partage") doit exister sur le serveur cible !
Note2' : Ne laisser que "/" dans la destination ("Restaurer les fichiers du répertoire (relatif au partage)") sinon il essaie de recréer toute l'arborescence de départ et n'y arrive pas (erreur "unable to read 4 bytes"). Les chemins de départ et d'arrivée sont de toute façon indiqués dans l'écran de confirmation suivant.
Réplication de serveurs Backuppc
Pour monter un système BackupPC à tolérance de panne, on peut mettre en place deux serveurs et une partition DRBD répliquée.
Un des serveurs sera actif (backupPC lancé) et l'autre passif (backupPC stoppé).
Installer BackupPC de la même façon sur les 2 machines (penser à enlever backuppc des scripts de démarrage sur le serveur passif !)
Créer une partition DRBD entre elles, pour le répertoire /var/lib/backuppc.
Sur l'une des deux (par exemple ici : le serveur passif), installer une tâche CRON lançant RSYNC pour répliquer à partir du du serveur actif le répertoire /etc/backuppc, les clés SSH et le fichier "known_hosts" de l'utilisateur backuppc :
00 22 * * * root rsync -avz root@serveur_actif:/etc/backuppc /etc > /var/log/replication_backuppc.log 2>&1 05 22 * * * root rsync -avz root@serveur_actif:/var/lib/backuppc/.ssh /var/lib/backuppc >> /var/log/replication_backuppc.log 2>&1
En cas de défaillance du serveur actif, il suffit sur le passif de :
- Passer la partition DRBD en primaire
- lancer backuppc (/etc/init.d/backuppc start)
Planification des sauvegardes
BackupPC se charge normalement lui-même d'estimer la planification des backups, en fonction de la fenêtre de sauvegarde autorisée pour chaque machine, du nombre de machines, de la rétention, etc...
On peut cependant vouloir rester maître de l'heure de lancement des sauvegardes. Dans ce cas, on peut mettre dans la crontab de l'utilisateur backuppc :
00 00 * * * /usr/share/backuppc/bin/BackupPC_serverMesg backup <IP|HOST> <HOST> <USER> <0|1>
- <IP|HOST> indique l'IP ou le nom DNS de la machine à sauvegarder
- <HOST> indique le nom de host défini dans backupPC (qui conditionne le répertoire où sera mise la sauvegarde)
- <USER> indique le nom de l'utilisateur qui demande la sauvegarde (et qui recevra donc le rapport par mail)
- <0|1> indique respectivement une sauvegarde incrémentale ou full (Attention! c'est le contraire des niveaux affichés dans le statut des sauvegardes des machines !)
TIPS
Mettre backuppc en virtualhost SSL, et sur un autre port que 443
Par défaut, la configuration de Backuppc sur Apache est de créer un alias vers /usr/share/backuppc/cgi-bin/ (fichier /etc/apache2/conf.d/backuppc.conf). On y accède ensuite par
http://nom_du_serveur/backuppc
Pour passer en SSL, il faut activer le ssl sur Apache (a2enmod ssl et a2ensite default-ssl), et décommenter "SSLRequireSSL" dans backuppc.conf.
Maintenant, le serveur de sauvegarde étant sensible, on va sécuriser un peu.
- Tout d'abord, ce serveur ne proposant que Backuppc et rien d'autre, pas la peine d'avoir des virtualhosts qui affiche "It works" si on oublie le "/backuppc". On va faire en sorte que backuppc soit directement accessible à la racine du serveur web.
- De plus, on va changer le port, le 443 du HTTPS par défaut étant trop connu. On prendra par exemple le port 8080.
Commencer par retirer la configuration de backuppc par défaut (en le déplaçant dans /root, histoire de ne pas le perdre) :
mv /etc/apache2/conf.d/backuppc.conf /root
Créer un fichier de configuration virtualhost /etc/apache2/sites-enabled/001-backuppc
<VirtualHost *:8080> ServerAdmin webmaster@localhost ServerName nom_fqdn_du_serveur DocumentRoot /usr/share/backuppc/cgi-bin/ SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key Alias /backuppc /usr/share/backuppc/cgi-bin/ <Directory /usr/share/backuppc/cgi-bin/> AllowOverride None Allow from all SSLRequireSSL Options ExecCGI FollowSymlinks AddHandler cgi-script .cgi DirectoryIndex index.cgi AuthGroupFile /etc/backuppc/htgroup AuthUserFile /etc/backuppc/htpasswd AuthType basic AuthName "BackupPC admin" require valid-user </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Editer /etc/apache2/ports.conf. Commenter
NameVirtualHost *:80 Listen 80
Et remplacer toutes les occurences de "443" par "8080".
Relancer Apache, tester par
https://nom_du_serveur:8080
TIP : Récupération d'une sauvegarde existante
Exemple : le serveur SERVER1 a déjà été sauvegardé par rync ou rdiff-backup sur une autre machine, SERBERBACKUP. On veut récupérer cette sauvegarde parce que contrairement à SERVER1, SERVERBACKUP est sur le réseau local, ça ira donc plus vite pour la première full !
On commence par paramétrer SERVERBACKUP dans backuppc, et on sauvegarde les répertoires concernés. par exemple :
/backup/SERVER1/home
On trouve donc à la fin de la sauvegarde sur backuppc un répertoire :
/var/lib/backuppc/pc/SERVERBACKUP/0/f%2fbackupf%2fSERVER1f%2fhome
On renomme le répertoire /var/lib/backuppc/pc/SERVERBACKUP
mv /var/lib/backuppc/pc/SERVERBACKUP /var/lib/backuppc/pc/SERVER1
Puis le répertoire f%2fbackupf%2fSERVER1f%2fhome :
mv /var/lib/backuppc/pc/SERVER1/0/f%2fbackupf%2fSERVER1f%2fhome /var/lib/backuppc/pc/SERVER1/0/f%2fhome
Il reste à renommer la machine SERVERBACKUP par SERVER1 dans l'interface (Modifier les machines) et ô magie : on a une sauvegarde de /home de SERVER1 !
ATTENTION : renommer la machine remet la configuration (notamment Xfer) par défaut ! Bien vérifier les paramètres après renommage.
TIP : Logout / changement d'utilisateur
Deux solutions :
- vider les connexions actives dans le navigateur (Firefox : outils/supprmimer l'historique récent)
- Modifier l'URL en ajoutant un nom d'utilisateur
http://newuser@serveur_de_backup/backuppc
Il re-demandera alors à s'authentifier. Cette méthode permet de ne pas perdre les authentifications enregistrées.