Table des matières

, , , , , ,

Serveur de sauvegarde automatique : BackupPC

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)

Présentation

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.

Politique de sauvegarde par défaut

Sur le serveur

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 :

Pour chaque machine cliente

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é).

Installation

Version des dépôts

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.

Backuppc sous Ubuntu utilisera par défaut:

Une fenêtre debconf doit apparaître durant l'installation :

Pour générer le mot de passe et le stocker vous pouvez utilisez par exemple KeepassX.

Ajout de l'utilisateur dans le groupe 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

Ajout du fichier apache.conf

Comme l'installation ne copie pas le /etc/backuppc/apache.conf sur le serveur apache2. Il faut le faire soit même en copiant le fichier dans le répertoire /etc/apache2/conf-available/ avant de rendre actif le site:

sudo cp /etc/backuppc/apache.conf /etc/apache2/conf-available/backuppc.conf

sudo a2ensite backuppc.conf

Le fichier de configuration a été renommé en backuppc.conf, ce qui permet de l'identifier plus facilement parmi les autres fichiers.

sudo /etc/init.d/apache2 restart

Version des backports

Vous pouvez choisir d'installer une version de backuppc plus récente depuis les dépôts backports.

Utilisation

Connexion à l'interface Web

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.

Configuration générale

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

Il vous faudra adapter les termes <client> et <serveur> à votre architecture en les remplaçant par les adresses IP, les FQDN ou les noms hosts correspondants.

Mettre l'interface en français

Par l'interface web

Depuis le menu Serveur → Modifier la configuration → CGI → Language
Depuis le menu Server → Edit config → CGI → Language

En ligne de commandes

Modifier avec les droits d'administration l'option dans le fichier

/etc/backuppc/config.pl
 $Conf{Language} = 'en'; 

pour obtenir

/etc/backuppc/config.pl
 $Conf{Language} = 'fr'; 

Modifier la configuration pour toutes vos machines

Depuis le menu Serveur → Modifier la configuration

Puis affiner pour chacune d'entre elle

Depuis Hôtes →

Où sont sauvegardées les données ?

Par défaut

Les données sont sauvegardées dans des sous-répertoires de /var/lib/backuppc

Changer le lieu de stockage

Cela n'est bien sûr pas obligatoire, mais cela peut-être pratique de ne pas laisser vos données dans le dossier /var.

Avec un lien symbolique

En utilisant un un lien symbolique vous ne risquerez pas de problème lié à l'écrasement du fichier de configuration lors d'une mise à jour.

Configurer les sauvegardes

Vous trouverez dans cette sections 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é.

Sauvegarder un répertoire local via tar

Se connecter à l'interface web et depuis les menus :

  1. Serveur → Modifier la configuration → Machine : vérifier que la machine (host) “localhost” existe bien, avec “backuppc” comme user2)
  2. Hôtes → choisir Localhost dans la liste déroulante
  3. localhost → Modifier la configuration → xfer → XferMethod → choisir “tar”, “TarShareName” : indiquer le chemin à sauvegarder et cliquer sur insérer → Sauvegarder (apparaît en rouge)
  4. localhost → localhost Accueil → Démarrer la sauvegarde complète
  5. localhost → Explorer les sauvegardes: vérifiez ici que ça a fonctionné.

Par défaut cette sauvegarde sera dans /var/lib/backuppc/pc/localhost

En faisant comme ça, je n'ai obtenu qu'une erreur Tar 512. Je crois qu'elle est due aux droits d'accès. Pour y remédier, j'ai donc ajouté

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

Sauvegarde du poste local sur un disque dur externe USB

Sauvegarder un poste Linux distant via rsync (ssh)

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:

  1. La méthode standard qui utilise le compte root désactivé par défaut sur Ubuntu.
  2. Une méthode alternative, basé sur le compte backup et l'usage de sudo, utilisable avec toute distribution ayant sudo.

Si vous avez plusieurs clients vous pouvez utiliser le très pratique cssh

Méthode standard

Plus simple à mettre en place. 3)

Manipulations sur le serveur de sauvegarde.

Manipulations sur les postes clients.

Placer la clef publique

sudo mkdir /root/.ssh

sudo -i
cat ~/.ssh/authorized_keys
from="serveur" ssh-rsa AAAAB3N123456789xyz.......== backuppc@serveur
Configuration de sshd

Modifier avec les droits d'administration le fichier /etc/ssh/sshd_config

**/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.

Test de connexion SSH

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).

Méthode avec sudo

Manipulations sur le serveur de sauvegarde

Cette partie est commune à la méthode standard

Manipulations sur les postes clients

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.

Placer la clef publique.

Pour chacun des clients:

sudo -i -u backup 
cat ~/.ssh/authorized_keys
from="serveur" ssh-rsa AAAAB3N123456789xyz.......== backuppc@<serveur>
Configuration de sshd.

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.

/etc/ssh/sshd_config
PermitRootLogin no
Configuration de sudo.

À 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

Test de connexion SSH

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).

En cas d'erreur SSH vous pouvez rendre la commande plus volubile avec l'option -v de ssh. Regarder aussi /var/log/syslog sur le poste à sauvegarder. Dans tous les cas jeter un œil sur la page consacrée à ssh. En cas de blocage suite à la réinstallation du poste à sauvegarder, la partie traitant de la gestion des clefs vous sera sûrement d'une grande aide.

Si l'erreur ssh est “This account is currently not available.”, sur le client, éditer /etc/passwd, et pour le compte “backup” remplacer “/usr/sbin/nologin” par “/bin/sh” (rencontré sur ubuntu 14.10)

Paramétrer l'usage de ce compte par backuppc

Par l'interface Web

onglet Xfert → pour rsync → chapitre Chemins/Commandes/Args Rsync indiquer pour:

Depuis le fichier « /etc/backuppc/config.pl »

Modifier avec les droits d'administration le fichier /etc/backuppc/config.pl/ comme suit :

/etc/backuppc/config.pl
# $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+';

Ajouter la machine à sauvegarder à la liste.

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)

  1. Hôtes : choisir <client> dans la liste déroulante
  2. Modifier la configuration → xfer → XferMethod : choisir “rsync” → Sauvegarder (apparaît en rouge)
  3. <client> Accueil → Démarrer la sauvegarde complète
  4. Explorer les sauvegardes : vérifier ici que ça a bien fonctionné.

Sauvegarder un poste Mac OS distant via ssh

Testé sur Mac OS 10.6 & 10.7.

Pré-requis:

  • La sauvegarde se faisant au travers de ssh, activer le serveur ssh en cochant “session a distance” depuis le menu Preferences → Système → Partage.
  • Afin de sauvegarder un poste GNU/linux distant, il est nécessaire que l'utilisateur “backuppc” du serveur se connecte au poste distant.

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.

  1. Se connecter à la machine Mac à sauvegarder en ssh avec un compte administrateur du Mac qui a un mot de passe.
    ssh admin@ip du mac
  2. Passez en utilisateur root
    sudo -su root
  3. Suivre la procédure telle qu'expliquée ici

Sauvegarder des postes Windows via « rsyncd »

Configuration des postes Windows

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 :

Configuration du fichier « config.pl »

Éditez le fichier /etc/backuppc/config.pl avec les droits d'administration et modifiez les options de la façon suivante :

/etc/backuppc/config.pl
$Conf{XferMethod} = 'rsyncd';
$Conf{RsyncdUserName}  = "UUU";
$Conf{RsyncdPasswd}    = "PPP";
$Conf{RsyncShareName}  = "docs";

Sauvegarder le fichier et recharger la configuration depuis l'interface Web.

Sauvegarder des postes Windows via « smb »

Configuration des postes Windows

  1. Créez un utilisateur avec un mot de passe.
  2. Créez un partage sur la ressource à sauvegarder avec les droits modifiés en lecture pour l'utilisateur créé précédemment.
  3. Effectuez les changements depuis l'interface Web ou en modifiants les fichiers config.pl et hosts comme indiqué ci-dessous.

Pour l'exemple ici:

Configuration du fichier « config.pl »

Éditez le fichier /etc/backuppc/config.pl avec les droits d'administration et modifiez les options ainsi :

/etc/backuppc/config.pl
$Conf{XferMethod} = 'smb';
$Conf{SmbShareUserName} = 'backup';
$Conf{SmbSharePasswd} = 'mdpbupc';
$Conf{SmbShareName} = 'docs$';
 

Sauvegarder le fichier et recharger la configuration depuis l'interface Web.

Configuration du fichier « hosts »

É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.

Sauvegarder des PC éteints

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 !

Configuration du WOL sur le serveur

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 

Script de réveil et d'arrêt des machines

Créez dans le dossier /etc/backuppc/ deux petits scripts qui doivent pouvoir être améliorés :

le fichier **wol.sh**
wol.sh
#!/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:

le fichier **shutdown.sh**
shutdown.sh
 #!/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é.

N'oubliez pas de rendre les scripts exécutables pour l'utilisateur backuppc !

Cette commande :

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

autre exemple de fichier **wol.sh** qui conserve l'état précédent
wol.sh
#!/bin/bash
declare -i z
z=0
i=0
filename=/var/lib/backuppc/$1.laststate
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
	echo "Send WOL to $1 and wait 1 minutes"
	sudo /usr/bin/etherwake -i em1 $1
	sleep 1m
	while [ $i = 0 -a $z -lt 15 ]
	do
		count=$(ping -c 5 $1 | awk -F, '/received/{print $2*1}')
		if [ $count -eq 0 ]; then
       		echo "$1 is down"	
		else
			i=1
       	fi
		sleep 10s
		z=z+1
	done
else
	echo $cnt > $filename
fi
et le fichier **shutdown.sh** qui prend en compte l'état précédent
shutdown.sh
#!/bin/bash
filename=/var/lib/backuppc/$1.laststate
echo "Filename=$filename"
declare -i laststate
read laststate < $filename
echo "Last State Host $1 = $laststate"
if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ]
then
	if [ $2 != 1 ]
	then
		if [ $laststate  != 1 ]
		then
			echo "Sent SHUTDOWN to host $1"
			/usr/bin/net rpc SHUTDOWN -f -I $1 -U 'Administrateur%motdepasse' -t 30
		else
			echo "SHUTDOWN not sent to $1 cause Host already UP before"
			#echo sauvegarde terminé avec succès. | smbclient -M $1 -U 'Administrateur%motdepasse'
		fi
	fi
else
        if [ $2 = 1 ]
        then
			echo "Sauvegarde $1 OK"
            #echo sauvegarde terminé avec succès. | smbclient -M $1 -U 'Administrateur%motdepasse'
       	fi
       	if [ $laststate = 0 ]
       	then
			echo "Sent SHUTDOWN to host $1"
			/usr/bin/net rpc SHUTDOWN -f -I $1 -U 'Administrateur%motdepasse' -t 30
       	fi
fi
echo "Delete $filename"
unlink $filename

Configuration de backuppc pour utiliser les scripts

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';

FIXME dans ce cas le backup pourrait essayer de se lancer alors que la machine n'est pas accessible.

Pour faire encore mieux, vous pouvez aussi réaliser un ping a travers le démon ssh en executant simplement la commande cat sur le fichier /dev/null. Ceci permettra de tester que le démon ssh est bien démarré et donc de tester que le serveur est accessible. Pour faire ceci, remplassez la configuration précédente par la ligne ci-contre: $Conf{PingPath} = '/usr/bin/ssh $host cat /dev/null';

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…

Faire une copie des sauvegardes sur un support externe avec RSYNC

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 !!!

Erreurs

No files dumped for share ...

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”.

Erreur NT_STATUS...

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 …).

Liens utiles


Contributeurs : Cyprien,wouldsmina, naoli, snoopysnoopy Ool, gg gfontaniere

1) <serveur> sera à remplacer par l'adresse IP de la machine faisant office de serveur de sauvegarde
2) , 8) utilisateur
4) donc visible dans le fichier id_rsa.pub du répertoire caché .ssh dans le Dossier Personnel du serveur de backup
5) , 7) hôtes connus
6) donc visible dans le fichier id_rsa.pub du répertoire caché .ssh dans le Dossier Personnel du serveur
9) pas de mot de passe