Outils personnels

BackupPC sur Debian Squeeze

De wikiGite

Révision datée du 16 mai 2011 à 16:43 par Frank (discussion | contributions) (Réplication de serveurs Backuppc)

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

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

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.

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 [Réplication_de_systèmes_de_fichiers_avec_DRBD|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 :

rsync -avz root@serveur_actif:/etc/backuppc /etc
rsync -avz root@serveur_actif:/var/lib/backuppc/.ssh /var/lib/backuppc

En cas de défaillance du serveur actif, il suffit sur le passif de :

  • Passer la partition DRBD en primaire
  • lancer backuppc sur le serveur passif

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 (natamment 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.