Configuration BackupPC

De Cliss XXI
Sauter à la navigation Sauter à la recherche

Cette page décrit une procédure de configuration simple de backupPC, où les machines à sauvegarder le sont par rsync+ssh. Le serveur est sous debian, et les machines à sauvegarder sous GNU/Linux, mais à quelques adjustement près, les informations données peuvent s'appliquer à tous type de système.

Installation de backupPC sur le serveur de sauvegarde

Installation et configuration de base de backuppc

On commence à installer backupPC sur le serveur. Sous debian, il s'agit d'installer le paquet backuppc:

apt-get install backuppc

Lors de l'installation du paquet debian, le système propose la configuration de l'accès à l'interface dans le serveur web installé, et crée un utilisateur backuppc avec un mot de passe aléatoire qui est fourni et que vous devez notez. Le mot de passe peut ensuite être changé à l'aide de la commande:

htpasswd /etc/backuppc/htpasswd backuppc

La configuration vit dans plusieurs fichier (/etc/backuppc):

  • config.pl -> configuration générale (fichier mis à jour par l'interface web). C'est une bonne idée de garder une copie original avec le nom de la distribution (ex: config.pl.wheezy.orig) car a chaque mise a jour de backuppc, le systeme va se plaindre que le fichier de configuration n'est plus le meme que celui d'origine (ce qui est normal si le serveur vit un peu...). Dans ce cas là, je choisi "garder la configuration actuelle" et j'obtient la nouvelle configuration dans un ".dpkg-dist". Au lieu de tenter un diff entre la configuration actuelle et ce .dpkg-dist (_très_ fastidieux), je fait un diff entre le fichier original et le .dpkg-dist -j'aurais moins de différences- et je peux les réintégrer à la conf existante.
  • hosts -> c'est la liste des machines à sauvegarder (mis à jour par l'interface web)
  • <HOSTNAME>.pl -> ce sont des fichiers qui viennent surcharger la configuration par defaut pour chaque machine (aussi mis a jour par l'interface web).

BackupPc n'utilise pas de base de donnée, uniquement des fichiers et des répertoires. Les sauvegardes sont là: /var/lib/backuppc. Au niveau systeme de fichier, nous avons de bons résultat en "ext4". Voila la structure générale de /var/lib/backuppc/:

  • cpool (ou pool pour les anciennes version): Compressed Pool, c'est le coeur de la sauvegarde, chaque fichier y est représenté par son hash md5
  • pc/<HOSTNAME> : la sauvegarde concernant une machine:
    • <XYZ> : numero de sauvegarde (contient la sauvegarde de la machine, tout les fichiers ont au moins 1 lien hard vers le cpool), dans cette hierachie, les fichiers sont préfixé par un "f", les caractères "exotique" (comme le slash /) sont encodé en urlencode, la racine "/" s'écrit donc "f%2f". Les fichiers eux même sont compressés en zip sans signature (utiliser /usr/share/backuppc/bin/BackupPC_zcat pour les voir). A coté des fichiers "f" se trouve un fichier "attrib" qui contient les méta info des fichiers du répertoire (lisible avec /usr/share/backuppc/bin/BackupPC_attribPrint)
    • backups: tableau résumé des dernières sauvegarde (taille, temps, type, taille compressée, fichiers nouveau vs fichiers connus, etc.)
    • LOG... : les logs d'activités de BackupPC concernant cette machine (quand démarre/termine quelle type de sauvegarde)
    • XferLOG.... : le detail des fichiers transféré, s'ils sont nouveau ("create") déjà vu dans l'arboresence ("same") ou, pas vu dans l'arboresence mais reconnu dans le cpool ("pool").

Création d'une configuration par défaut via l'interface web

Pour le moment la méthode la plus versatile, la plus sûre et la plus efficace est pour nous ssh+rsync (y compris sous windows et mac). Cette methode nous permet:

  • de faire des sauvegardes locales (même réseau)
  • de faire des sauvegardes distantes en passant par un "pivot" ssh (via l'utilisation de ProxyCommand)


Si les sauvegardes de toutes les machines ou presque sont effectuées de la même façon, il est possible (et recommandé) de définir la configuration qui sera utilisée par défaut pour les sauvegardes.

Pour cela, accéder à l'interface web via l'adresse du type http://machine.domaine.tld/backuppc (machine.domaine.tld était un nom de votre serveur) en vous authentifiant via l'utilisateur backuppc créé lors de l'installation du paquet debian.

Une fois dans l'interface web:

  • dans le menu « Serveur » du cadre de gauche, cliquer sur le lien « Modifier la configuration »,
  • dans la page qui s'affiche, cliquer sur le lien « Xfer »
  • choisir la méthode de transfert (« rsync » dans notre cas)
  • définir les répertoires à exclure de la sauvegarde. Pour cela, dans la section « Inclure/Exclure », modifier la définition de BackupFilesExclude en ajoutant une clé « * » (cette clef correspond à des partages lors de sauvegardes par samba, et n'est pas utilisée avec rsync, mais semble incoutournable dans l'interface), puis dans cette clef, utiliser le bouton « Ajouter » et saisir les répertoires suivants (l'utilisation de /rep/* au lieu de /rep permet de conserver un répertoire /rep vide dans la sauvegarde, ce qui peut être utile en cas de restauration):
    • /dev/*
    • /proc/*
    • /sys/*
    • /tmp/*
    • /mnt/*
    • /media/*

Ne pas oublier de sauvegarder les modifications en cliquant sur le bouton Sauvegarder devenu rouge en haut de la page.

Pour mettre en cache les verification lors des sauvegardes completes, dans les parametres de rsync preciser:

--checksum-seed=32761

Création d'une clef ssh dédiée

Comme nous voulons effectuer les sauvegardes via rsync+ssh, nous créons une clef ssh dédiée à BackupPC qui permettra de s'authentifier sur les machines à sauvegarder. Cette clef est assez sensible puisqu'elle donne un accès root à plusieurs machines, et n'est pas protégée par une passphrase (bien que l'accès distant soit limité en lecture seule -- voir les instructions de configuration d'une machine à sauvegarder --, et que les données déjà sauvegardées soit de toutes façons accessibles sur le serveur). N'utilisez cette méthode que si vous êtes suffisamment sûr de votre serveur, et que le risque vous paraît acceptable.

Sous debian, Backuppc utilise l'utilisateur système « backuppc ». La clef utilisée par défaut sera donc conservée dans le fichier ~backuppc/.ssh/id_rsa (ce qui pourrait être changé par des instructions dans un fichier ~backuppc/.ssh/config). Le répertoire personnel de l'utilisateur backuppc, ~backuppc équivaut sous debian à /var/lib/backuppc. Utiliser la commande echo ~backuppc pour trouver le répertoire utilisé votre système. Utilisez les commandes suivantes pour générer la clef SSH:

mkdir -m 700 /var/lib/backuppc/.ssh
ssh-keygen -N "" -f /var/lib/backuppc/.ssh/id_rsa
chown -R backuppc: /var/lib/backuppc/.ssh

Configuration d'une nouvelle sauvegarde

Si vous souhaitez configurer la sauvegarde d'une nouvelle machine, suivez les étapes ci-dessous.

Autoriser la connexion ssh sur la machine à sauvegarder

Sur la machine à sauvegarder, créez si nécessaire le répertoire /root/.ssh, et ajouter la partie publique de la clef de backuppc dans le fichier authorized_keys, avec un maximum de restrictions (on force ici l'utilisation de la partie serveur de rsync pour limiter à un accès en lecture seule).

mkdir -m 700 /root/.ssh
cat >> /root/.ssh/authorized_keys <<<"no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,command="nice -n 19 rsync --server --sender ${SSH_ORIGINAL_COMMAND#*rsync}" ssh-rsa AAAAB...yp7QmN backuppc@serveur"

(les caractères de la clef publique ont été supprimés par souci de brièveté).

Pour plus de détail sur les limitations voir ci après: limitation de ressources

Si vous ne souhaitez pas autoriser les accès directs en root, il est possible de varier la configuration pour appeler rsync en sudo, comme indiqué dans la FAQ de BackupPC.

Configurer les nouvelles machines via l'interface de backuppc

Se connecter à l'interface web de BackupPC, accessible à une adresse du type http://machine.domaine.tld/backuppc:

  • dans le menu « Serveur » sur le cadre de gauche de la page web, cliquer sur « Mofifier les machines »
  • sur la page qui s'affiche, cliquer sur le bouton « Ajouter »
  • renseigner la case « host ». Les cases « user » et « moreUsers » définit lesutilisateurs qui auront accès aux sauvegardes de la machine et recevront les messages d'alerte par email en cas d'erreur de sauvegarde. On utilisera généralement en utilisateur principal « backuppc » dont on fera pointer l'alias vers une adresse email dans /etc/aliases (par défaut le mail est renvoyé vers root, ce qui peut suffire), et en utilisateur additionnel le propriétaire de la machine (dont il faudra créer un utilisateur pour l'accès à l'interface: voir ci-dessous).
  • recharger la page d'admin pour mettre à jour le cadre de gauche, puis choisir dans le menu déroulant « Hôtes » de ce cadre la machine nouvellement ajoutée.
  • si vous utilisez pour cette machine la configuration générale, il n'y a rien à changer dans la configuration de cette machine. Sinon, vous pouvez lui définir une configuration particulière en cliquant sur « Modifier la configuration » dans le menu du cadre de gauche.

Créer l'utilisateur web

Pour permettre aux utilisateurs mentionnés dans les champs « user » ou « moreUsers » d'accéder à leurs sauvegardes, il faut leur créer un login dans le fichier htpasswd utilisé par l'interface web de BackupPC. On pensera également à leur définir un alias dans /etc/aliases qui pointe vers leur adresse email pour leur permettre de recevoir les messages d'alerte envoyés lorsqu'aucune sauvegarde n'a été effectuée pendant un certain temps.

Attention: dans la configuration présentée sur cette page, les fonctions de BackupPC « Restaurer les fichiers sélectionnés » ne fonctionneront pas puisque BackupPC n'a qu'un accès en lecture aux données de l'utilisateur. Pensez à le signaler aux utilisateurs (ou supprimez cette restriction si vous voulez activer cette fonctionnalité et que le risque de sécurité vous paraît acceptable).

Pour créer l'utilisateur de l'interface web, utiliser cette commande (la même commande permet de changer son mot de passe):

# htpasswd /etc/backuppc/htpasswd loginutilisateur
New password: *********
Re-type new password: *********
Adding password for user loginutilisateur

Pour définir l'alias mail, on peut faire quelque chose comme ceci:

echo "loginutilisateur: utilisateur@sondomaine.tld" >> /etc/aliases
newaliases

Effectuer une première connexion SSH manuellement

Important: lors de la première connexion ssh depuis le serveur, il faut que l'utilisateur backuppc accepte l'empreinte de la clef de la machine à sauvegarder. On doit donc effectuer une première connexion SSH manuellement pour accepter cette empreinte (sinon les sauvegardes ne fonctionneront pas). La commande suivante devrait suffire (où machineZ est la machine à sauvegarder):

  sudo -u backuppc ssh root@machineZ

Réponsez « yes » lorsque ssh demandera si vous voulez continuer à vous connecter. Si vous avez forcé l'utilisation de la commande rsync via la clef déposée sur la machine à sauvegarder, cette commande affichera alors l'aide de rsync, puisque nous n'avons pas fourni d'options.

Lancer une première sauvegarde

Lancer éventuellement une sauvegarde complète pour tester le fonctionnement de backuppc en cliquant sur le bouton « Démarrer la sauvegarde complète » et en confirmant. La page de la machine dans backuppc indiquera si la sauvegarde s'est bien déroulée. Si ce n'est pas le cas, suivez le lien « Bilan des derniers transferts échoués (erreurs seulement) » sur le cadre de gauche pour voir les erreurs. Réparez-les et retentez une sauvegarde complète (les logs donnent la ligne de commande utilisée par backuppc, ce qui est pratique pour l'essayer manuellement en cas d'erreur).

Limitation de ressource

Contraintes:

  • Sécurité: on impose la commande dans la clef ssh:
    command=""
  • Sobriété: on impose une priorité de processus:
    command="nice -n 19"
  • Efficacité: ajuster les ressources systèmes consommée par backuppc sans pour autant allonger le temps de sauvegarde au delà du raisonnable.

Pour aller plus loin,

  • imposer une limite IO avec ionice (il y a beaucoup plus de temps consommé à attendre les I/O disque qu'à exécuter du code
  • limiter la bande passante en passant --bwlimit=6000 à rsync. bwlimit prend un argument en kilo-octet par seconde. 6000 représente la moitié d'une liaison 100 mpbs (réseau local)
  • administration simplifiée: choisir la limitation côté serveur en préfixant $Conf{RsyncClientPath} avec nice et ionice:
    nice -n 10 ionice -c2 -n7 rsync...
  • sécurité: écrire un script a ajouter dans le paramètre command de la clef ssh qui impose un rsync mais prend en compte le nice et l'ionice si ceux ci sont précisés.
  • limiter les ressources systèmes prise sur le serveur: écrire un script qui prend la place de BackupPC_dump et appel la version original de celui ci avec nice/ionice.


Informations complémentaires

Si vous avez besoin d'aller plus loin avec BackupPC, que vous voulez le configurer directement via les fichiers de configuration, ou rechercher une erreur, voici quelques indications supplémentaires qui pourront vous aider:

Sur le serveur, la configuration de backuppc est principalement conservée dans les fichiers suivants:

  • /etc/backuppc/config.pl : c'est la configuration générale utilisée par défaut pour toutes les machines
  • /etc/backuppc/serveur1.pl : dans ce fichier sont redéfinis certains éléments de configuration pour la machine « serveur1 ». Les autres éléments de configuration sont lus dans config.pl.
  • /etc/backuppc/hosts : liste des machines configurées
  • /var/lib/backuppc/pc/ : contient un répertoire par machine configurée où sont conservés les fichiers des logs de sauvegarde, ainsi que les sauvegardes elles-mêmes (dans un sous-répertoire, et sous un format spécial).
  • le fichier /var/lib/backuppc/log/LOG peut également être utile en cas d'erreurs (en cas de partition pleine, par exemple, la sauvegarde d'une machine indique seulement « Backup aborted (Child exited prematurely) »)

Voir aussi