BackupPC est un logiciel libre de sauvegardes de données informatiques, publié sous licence GPL.
Il permet d'assurer une politique de sauvegardes "versionnées" pour des clients de différents types (Unix, GNU/Linux, Windows, Mac)
BackupPC est utilisé pour sauvegarder un ensemble de postes. Il possède une interface Web pour configurer, lancer des sauvegardes ou restaurer des fichiers. Il est également possible de sauvegarder des bases de données.
BackupPC permet de sauvegarder automatiquement à des intervalles de temps réguliers des répertoires situés sur des machines du réseau.
Il peut également faire beaucoup plus… même s'il a quelques limites.
BackupPC peut utiliser plusieurs protocoles pour les sauvegardes :
Sauf pour Samba, Backuppc utilise SSH pour faire les transferts.
Le logiciel se réveille toutes les heures pour sonder l'ensemble des machines spécifiées dans le fichier /etc/backuppc/hosts.
Puis, pour chaque poste allumé, il fonctionne ainsi :
BackupPC examine les dates des dernières sauvegardes effectuées:
S'il y a plus de dix-neuf sauvegardes incrémentielles, il supprime les plus anciennes de manière à ce qu'il n'en reste que dix-neuf (limitation de l'espace disque consommé).
Backuppc est supporté par un bon nombre de distributions linux.
Étant disponible dans les dépôts de chaque versions d'Ubuntu, il suffira d'installer le paquet backuppc correspondant sur votre serveur de sauvegarde, puis de vous laissez guider.
sudo htpasswd /etc/backuppc/htpasswd backuppc
Pour démarrer backuppc, il faut ajouter l'utilisateur de la session dans le groupe backuppc. Pour cela, il faut exécuter la ligne de commande suivante :
sudo adduser [MON_USER] backuppc
Comme l'installation ne copie pas le /etc/backuppc/apache.conf sur le serveur apache2, il faut le faire soi-même en copiant le fichier dans le répertoire /etc/apache2/sites-available/ avant de rendre actif le site, pour cela utilisez la commande suivante :
sudo cp /etc/backuppc/apache.conf /etc/apache2/sites-available/backuppc.conf
Puis activez le site :
sudo a2ensite backuppc.conf
sudo /etc/init.d/apache2 restart
Require all granted
en-dessous de la ligne
Options ExecCGI FollowSymlinks
puis redémarrer le serveur web
sudo /etc/init.d/apache2 restart
Les versions récentes (>=3) de BackupPC permettent notamment de modifier la plupart des options de configuration directement depuis l'interface Web. Il suffit à l'aide d'un navigateur internet d'aller à l'adresse http://<serveur>/backuppc/1).
Ensuite, il faut entrer « backuppc » en nom d'utilisateur et le mot de passe correspondant.
Backuppc fonctionne avec la notion de Client/Serveur. La machine serveur pouvant bien entendu être aussi un client.
La configuration peut se faire en modifiant les options dans le fichier /etc/backuppc/config.pl.
Néanmoins ici, il sera principalement fait usage de l'interface web
Depuis le menu Serveur → Modifier la configuration → CGI → Language
Depuis le menu Server → Edit config → CGI → Language
Modifier avec les droits d'administration l'option dans le fichier
$Conf{Language} = 'en';
pour obtenir
$Conf{Language} = 'fr';
Depuis le menu Serveur → Modifier la configuration
Depuis Hôtes →
Les données sont sauvegardées dans des sous-répertoires de /var/lib/backuppc
Cela n'est bien sûr pas obligatoire, mais cela peut-être pratique de ne pas laisser vos données dans le dossier /var.
sudo service backuppc stop
sudo mkdir /<le_chemin/repertoire_destination>/backuppc/
sudo rsync -va /var/lib/backuppc /<le_chemin/repertoire_destination>/
sudo ln -s /<le_chemin/repertoire_destination>/backuppc /var/lib/backuppc
sudo chown -h backuppc:backuppc /var/lib/backuppc
sudo service backuppc start
Vous trouverez dans cette section les différents types de sauvegardes testés par les contributeurs. N'hésitez pas à y ajouter votre méthode s'il n'y est pas déjà listé.
Se connecter à l'interface web et depuis les menus :
Par défaut cette sauvegarde sera dans /var/lib/backuppc/pc/localhost
backuppc ALL=NOPASSWD: /bin/tar
au fichier /etc/sudoers et mis /usr/bin/sudo devant la commande Tar de backuppc (Modifier la configuration → Xfer → TarClientCmd. Ma commande complète est :
/usr/bin/sudo LC_ALL=C $tarPath -c -v -f - -C $shareName+ --totals
La sauvegarde se faisant au travers de ssh, il faut installer le paquet openssh-server sur le poste à sauvegarder.
De plus, il est nécessaire que l'utilisateur Backuppc puisse se connecter en SSH sur les postes clients.
Pour se faire, vous avez le choix entre 2 méthodes:
Plus simple à mettre en place. 3)
sudo -i -u backuppc
ssh-keygen -t rsa -b 2048
cat ~/.ssh/id_rsa.pub
ls -la ~/.ssh/
drwxr-xr-x 2 backuppc backuppc 4096 2011-07-17 17:19 . drwxr-x--- 8 backuppc backuppc 4096 2011-07-21 13:57 .. -rw------- 1 backuppc backuppc 1671 2011-07-17 17:10 id_rsa -rw-r--r-- 1 backuppc backuppc 397 2011-07-17 17:10 id_rsa.pub -rw-r--r-- 1 backuppc backuppc 4862 2011-07-17 19:58 known_hosts
Si les droits ne sont pas corrects, utiliser la commande chmod pour modifier les permissions
sudo mkdir /root/.ssh
sudo vim /root/.ssh/authorized_keys
from="serveur"
sudo -i cat ~/.ssh/authorized_keys from="serveur" ssh-rsa AAAAB3N123456789xyz.......== backuppc@serveur
Modifier avec les droits d'administration le fichier /etc/ssh/sshd_config
PermitRootLogin without-password
Avec cette directive les connexions SSH de root ne seront pas possible avec un mot de passe (qui par défaut n'est pas utilisé sous Ubuntu)
Seul les connexions utilisant une authentification par clef seront possible, et uniquement de l'adresse du serveur si la directive from=
est utilisée dans le fichier authorized_keys.
Il sera donc possible de paramétrer indépendamment les possibilités d'authentification via SSH des autres utilisateurs. Il ne faudra cependant pas oublier d'ajouter root en cas d'usage des directives AllowUsers
ou AllowGroups
.
Depuis le serveur de sauvegarde, tenter une première connexion ssh vers le poste à sauvegarder pour l'utilisateur "backuppc".
sudo -i -u backuppc ssh root@client
Répondre "yes", ce qui ajoutera votre client à la liste des known hosts5).
Cette partie est commune à la méthode standard
Nous allons utiliser le compte "backup". Ce compte est pré-existant sous Ubuntu selon la norme FHS . Comme on peut le voir dans /etc/passwd , le répertoire personnel de cet "utilisateur" est /var/backups.
Pour chacun des clients:
sudo mkdir /var/backups/.ssh
sudo vim /var/backups/.ssh/authorized_keys
from="serveur"
sudo -i -u backup cat ~/.ssh/authorized_keys from="serveur" ssh-rsa AAAAB3N123456789xyz.......== backuppc@<serveur>
Modifier avec les droits d'administration le fichier /etc/ssh/sshd_config pour indiquer qu'il n'y pas besoin d'autoriser root, ni des connexions par mot de passe pour vos sauvegardes.
PermitRootLogin no
À l'aide de visudo mettez dans le fichier sudoers :
backup ALL=NOPASSWD: /usr/bin/rsync
Ceci donnera à l'utilisateur "backup" le droit sudo pour lancer rsync sans demande de mot de passe.
Pour pouvoir mener à bien cette opération, il faut revenir à un utilisateur qui ait les droits sudo, en fait à l'utilisateur que vous étiez avant de passer à l'utilisateur backup. Pour cela :
exit
puis simplement :
sudo visudo
Depuis le serveur de sauvegarde, tenter une première connexion ssh vers le poste à sauvegarder pour l'utilisateur "backuppc".
sudo -i -u backuppc ssh backup@<client>
Répondre "yes", ce qui ajoutera votre client à la liste des known hosts7).
onglet Xfert → pour rsync → chapitre Chemins/Commandes/Args Rsync indiquer pour:
$sshPath -q -x -l backup $hostIP /usr/bin/sudo $rsyncPath $argList+
$sshPath -q -x -l backup $hostIP /usr/bin/sudo $rsyncPath $argList+
Modifier avec les droits d'administration le fichier /etc/backuppc/config.pl/ comme suit :
# $Conf{RsyncClientCmd} = '$sshPath -q -x -l root $hostIP $rsyncPath $argList+'; $Conf{RsyncClientCmd} = '$sshPath -q -x -l backup $hostIP /usr/bin/sudo $rsyncPath $argList+'; # $Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $hostIP $rsyncPath $argList+'; $Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l backup $hostIP /usr/bin/sudo $rsyncPath $argList+';
Il ne reste plus qu'à ajouter la machine à sauvegarder à la liste.
#Connexion à l'interface Web |
- Serveur → Modifier les machines → Machines : ajouter <client> avec "backuppc" comme user8)
Testé sur Mac OS 10.6 & 10.7.
La procédure est identique en tout point à la méthode Sauvegarder un poste Linux distant via rsync (ssh) à celà près qu'il vous faudra commencer par vous connecter en tant qu'administrateur avant de continuer.
ssh admin@ip du mac
sudo -su root
Sans s'étendre sur la configuration des postes Windows, sachez qu'il existe un paquet tout fait sur le site de BackupPC, qui, en moins de 1 Mio comprend une version de CygWin et le binaire de Rsync.
Ce paquet s'appelle « cygwin-rsyncd » et est disponible ici.
Il suffira ensuite de suivre les instructions du fichier « README.TXT » de ce paquet.
Il sera donc considéré pour la suite de cet article que vous avez :
Éditez le fichier /etc/backuppc/config.pl avec les droits d'administration et modifiez les options de la façon suivante :
$Conf{XferMethod} = 'rsyncd'; $Conf{RsyncdUserName} = "UUU"; $Conf{RsyncdPasswd} = "PPP"; $Conf{RsyncShareName} = "docs";
Sauvegarder le fichier et recharger la configuration depuis l'interface Web.
Pour l'exemple ici:
Éditez le fichier /etc/backuppc/config.pl avec les droits d'administration et modifiez les options ainsi :
$Conf{XferMethod} = 'smb'; $Conf{SmbShareUserName} = 'backup'; $Conf{SmbSharePasswd} = 'mdpbupc'; $Conf{SmbShareName} = 'docs$';
Sauvegarder le fichier et recharger la configuration depuis l'interface Web.
Éditez le fichier /etc/backuppc/hosts avec les droits d'administration pour y ajouter cette ligne en fin de fichier
192.168.1.10 0 utilisateur UUU
Sauvegarder le fichier et recharger la configuration depuis l'interface Web.
Il est intéressant de pouvoir effectuer la sauvegarde des machines lorsqu'elles ne sont pas en production, par exemple la nuit. Par défaut, backuppc ne permet pas de gérer le wake on lan, mais avec quelques astuces, c'est possible !
L'outil etherwake est parfait pour démarrer une machine à distance. Pour pouvoir utiliser ce dernier avec le nom de la machine au lieu de son adresse MAC, il faut compléter le fichier /etc/ethers :
adresse:MAC nom_machine
Il va sans dire que le nom de la machine doit être déclaré comme dans le fichier /etc/backuppc/hosts.
Pour que le fichier ethers soit pris en compte par etherwake modifier le fichier /etc/nsswitch.conf, à la ligne ethers :
ethers: files
Par defaut, la commande etherwake n'est exécutable que par root, pour remédier à cela :
ln /usr/sbin/etherwake /usr/bin/ chmod +s /usr/sbin/etherwake
Créez dans le dossier /etc/backuppc/ deux petits scripts qui doivent pouvoir être améliorés :
#!/bin/bash declare -i z z=0 i=0 /usr/sbin/etherwake $1 sleep 1m while [ $i = 0 -a $z -lt 15 ] do if smbclient -L $1 -U backup%mdpbupc>/dev/null then i=1 fi sleep 10s z=z+1 done
Explication: Une fois la commande etherwake exécutée:
#!/bin/bash if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 20 ] then /usr/bin/net rpc SHUTDOWN -f -I $1 -U administrateur%mdpadministrateur -t 30 else if [ $2 = 1 ] then echo sauvegarde terminé avec succès. | smbclient -M $1 --user="backuppc" fi fi
Explication: entre 20h00 et 07h00 est exécutée la commande d'extinction du pc sauvegardé. En dehors de cette plage horaire, au lieu d'arrêter la machine, un message est envoyé.
net rpc SHUTDOWN -f -I $1 -U administrateur%mdpadministrateur -t 30
peut ne pas fonctionner si le pc sous Windows n'accepte pas l'exécution de la commande d'extinction à distance.
Pour parer à cela, vous êtes invité à lire le dernier message de cette discussion
Pour utiliser ces scripts, veuillez mettre le paramètre UserCmdCheckStatus à 1 dans la configuration, ou ajoutez cette ligne au fichier /etc/backuppc/config.pl:
$Conf{UserCmdCheckStatus} = '1';
ceci permet de dire à Backuppc de prendre en compte le code d'erreur des scripts de réveil/extinction.
#!/bin/bash declare -i z z=0 i=0 filename=/var/lib/backuppc/$1.laststate echo "Starting wake on lan script" echo "Filename=$filename" cnt=$(ping -c 1 $1 | awk -F, '/received/{print $2*1}') echo "Count ping to host $1 = $cnt" if [ $cnt -eq 0 ]; then echo $cnt > $filename # Time to wait for machine to boot in minutes # Use value given as argument if [ -n "$2" ] && [ "$2" -eq "$2" ] 2>/dev/null; then min=$2 else echo " Second argument given is not a valid number! : $2" echo " Using default value: 2 minutes" min=2 fi m=$min"m" echo "Send WOL to $1 and wait $min minutes" sudo /usr/sbin/etherwake -i enp5s0 $1 sleep $m while [ $i = 0 -a $z -lt 18 ] do count=$(ping -c 5 $1 | awk -F, '/received/{print $2*1}') if [ $count -eq 0 ]; then echo "$1 is down" if [ $z -eq 17 ]; then echo "$1 not up after `expr $min + 3` minutes... exiting" exit 1 fi else i=1 echo "$1 is up" exit 0 fi sleep 10s z=z+1 done else echo $cnt > $filename exit 0 fi
Explication: Ce script prend deux arguments: le nom d'hôte de la machine en premier et un nombre en deuxième (correspondant au nombre de minutes à attendre une fois que la commande etherwake est executée).
sudo /usr/sbin/etherwake -i enp5s0 $1
peut varier selon les machines. Vous devrez peut-être l'adapter à votre configuration.
Ici 'enp5s0' est l'interface par laquelle est envoyée le paquet magique via ethernet. $1 est la variable du nom d'hôte (ne doit pas être modifiée).
Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration:
$Conf{DumpPreUserCmd} = '/etc/backuppc/wol.sh $host 3';
Cette commande envoi le paquet magique et attend ensuite 3 minutes (à adapter selon vos besoins) le réveil de la machine (si rien n'est donné en second argument, le script utilise la valeur de 2 minutes par défaut).
#!/bin/bash # Backuppc user script if [ "$#" != 2 ]; then echo echo "The BackupPC user script takes two arguments:" echo " First: a host name ( with a corresponding /etc/hosts entry )" echo " Second: - either a number corresponding to the output of the backup process (0 = failed / 1 = success)" echo " - OR -f to force shutdown a host" echo exit 1 fi # Array of computers, in the form: [hostname]='Username%Password' # these must be Administrator's accounts # Modify these according to your needs declare -A names names=( [hostname1]='adminuser1%password1' [hostname2]='adminuser2%password2' [hostname3]='adminuser3%password3' ) for i in "${!names[@]}" do if [ $i = $1 ]; then host_name=$i upwd=${names[$i]} fi done # Exit if no corresponding host name found [ "$host_name" = "" ] && echo "Host unknown!" && exit 1 # To stop a pc, if -f argument given ( wol script wasn't used and there is no host file ) if [ "$2" = "-f" ] then /usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 1 exit 0 fi # File to record the host status filename=/var/lib/backuppc/$host_name.laststate if [ -f $filename ] then echo "Filename=$filename" declare -i laststate read laststate < $filename echo "Last State Host $host_name = $laststate" else echo "Missing host file!" exit 1 fi # Actions after backup if [ $2 = 1 ] # Successfull backup then echo "Backup of $host_name OK" if [ $laststate = 0 ] then # Last state off, send shutdown echo "Sent SHUTDOWN to host $host_name" /usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 30 else # Last state : up echo "SHUTDOWN not sent to $host_name cause Host already UP before" fi elif [ $2 = 0 ] # backup error then echo "Problem during backup of $host_name" # Only shutdown after unsuccesfull backup during out of office hours #if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ] #then #/usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 30 #fi fi if [ -f $filename ] then echo "Delete $filename" unlink $filename fi
Explication: Ce script prend deux arguments: le nom d'hôte de la machine en premier et le code de résultat du backup en deuxième (0 = échec / 1 = succès).
Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration:
$Conf{DumpPostUserCmd} = '/etc/backuppc/shutdown.sh $host $xferOK';
/etc/backuppc/shutdown.sh $host -f
peut être utilisé en ligne de commande directement pour éteindre une machine en dehors de backuppc.
Backuppc contrôle la présence du pc sur le réseau avec ping, sans quoi il n'effectue pas de sauvegarde. Pour remédier à cela, dans le fichier /etc/backuppc/config.pl, avec les droits d'administration remplacer
$Conf{PingPath} = '/bin/ping';
par
$Conf{PingPath} = '/bin/echo';
dans ce cas le backup pourrait essayer de se lancer alors que la machine n'est pas accessible.
et ajouter les chemins des scripts comme suit :
$Conf{DumpPreUserCmd} = '/etc/backuppc/wol.sh $host'; $Conf{DumpPostUserCmd} = '/etc/backuppc/shutdown.sh $host $xferOK';
Sauvegardez le fichier et recharger la configuration via l'interface web.
Il ne vous reste plus qu'à activer le wol sur les postes clients…
Backuppc gère la déduplication des données. C'est à dire qu'après la copie des fichiers, si un fichier apparaît plusieurs fois, il n'en gardera qu'un seul exemplaire, en créant des liens matériels (hardlinks) vers le fichier d'origine.
Lorsqu'on sauvegarde avec un rsync "traditionnel" les sauvegardes de Backuppc, rsync ne gère pas les liens matériels, et recopie le fichier autant de fois qu'il y a de liens matériels. Ce qui a pour effet de gonfler considérablement le volume des données.
Pour éviter cela, on indique à rsync qu'il doit gérer les liens matériels avec l'option -H. Ce qui donne :
rsync -rlptDvzH --delete-after /chemin/sauvegardes/backuppc/ /chemin/vers/support/externe/sauvegardes/backuppc
ATTENTION !!! : cette opération entraîne une forte consommation en CPU et en RAM !!!
Cliquez sur "Last bad XferLOG". Si vous obtenez un message ressemblant à :
/bin/tar: --totals: Cannot chdir: No such file or directory
Sauvez votre configuration backuppc, puis effectuez ces commandes avec la console :
sudo mv /etc/backuppc/localhost.pl /etc/backuppc/fileserver.pl sudo chown backuppc:www-data /etc/backuppc/fileserver.pl
Reparamétrez votre configuration dans "xfer".
Pour se connecter aux partages SMB, backuppc utilise smbclient et lui passe par défaut l'argument -N qui siginifie "no password"9).
Apparament dans une version antérieure de smbclient, même si -N était spécifié, le mot de passe était quand même demandé. Ainsi même si le partage avait un mot de passe, smbclient pouvait s'y connecter.
Toutefois, ceci a été corrigé dans la nouvelle version de smbclient mais backuppc utilise toujours le -N. C'est pourquoi, cette option empêche de prendre en compte votre mot de passe et provoquera une erreur.
Pour corriger ceci, sur l'interface Web de backuppc, depuis le menu Edit Config du Server →onglet Xfer, supprimer le -N dans les 3 commandes pour la sauvegarde (smblient… -N …).
Contributeurs : Cyprien,wouldsmina, naoli, snoopysnoopy Ool, gg gfontaniere, mathieuc