= I‐ Installation de Backuppc : Procédure à zéro sur une debian etch = {{{ ### Voir installation d'un serveur type AUF: 1- Les outils de base : ssh, rsync aptitude install ssh rsync 2- Le Serveur WEB apache2 et de Backuppc aptitude install apache2 backuppc cp /etc/backuppc/apache.conf /etc/apache2/conf.d/backuppc.conf /etc/init.d/apache2 start /etc/init.d/backuppc start 3- Modifier les mots de passe de l'utilisateur backuppc pour l'accès a l'interface web d'administration: htpasswd -b /etc/backuppc/htpasswd backuppc }}} = II‐ Procedure de configuration et de sauvegarde = Note: On backup tout sauf des répertoires particuliers (Backuppc gère les doublons), on met une liste à exclure (les .mp3 ....) , on sauvegarde les serveurs la nuit === II -1- Le fichier de configuration config.pl du serveur: === Explication du fichier de config : /etc/backuppc/config.pl {{{ $Conf{ServerHost} = 'IP'; // l’adresse ip du serveur ou le nom du serveur de sauvegarde. $Conf{WakeupSchedule} = [13]; // pour lancer la sauvegarde à 13h l’heure ou par exemple $Conf{WakeupSchedule} = [1..24]; // toutes les heures de la journée $Conf{MaxBackups} = 4; // nombre maximum de sauvegardes sumultanée à effectuer $Conf{CompressLevel} = 3; // taux de compression qui peut prendre des valeurs entre 0 et 9 (0 pour désactiver la compression). 3 est la valeur recommandée pour avoir une bonne compression sans trop surcharger le processeur. $Conf{MaxOldLogFiles} = 28; // L'âge max des logs (en jours) $Conf{DfMaxUsagePct} = 92; // à 92% de saturation de disque il donne une notification de saturation du disque. $Conf{BackupPCUser} = 'backuppc' // le nom de l’utilisateur qui à l’accès de faire le backup dans le serveur. $Conf{FullPeriod} = 13.97; // full backup par exemple toutes les 2 semaines (par PC ) $Conf{IncrPeriod} = 0.97; // Incrémental backup tous les jours $Conf{FullKeepCnt} = 6; // 6 backup complets $Conf{FullAgeMax} = 93; // Age maximale des backup-complet = 93 jours par exemple $Conf{FullKeepCntMin} = 1; // Garder au minimum un backup-complet, même s'il est plus vieux que 93 jours. $Conf{IncrKeepCnt} = 15; // On garde par exemple 15 sauvegardes incrémentales, ce qui nous fait 15 jours. $Conf{IncrAgeMax} = 30; // 30 jours max pour l'âge des sauvegardes incrémentales. $Conf{IncrKeepCntMin} = 3; // On garde 3 sauvegardes incrémentales quelques soient leur âge. // de 7:30 AM a 6 :30 PM ,,, Pour ne pas faire de backup durant cette periode du lundi au Vendredi $Conf{BlackoutPeriods} = [ { hourBegin => 7.5, hourEnd => 18.5, weekDays => [1, 2, 3, 4, 5], }, ]; $Conf{XferMethod} = 'rsync'; // La méthode de sauvegarde par défaut $Conf{PingMaxMsec} = 999; // Délai maximum pour un ping, avant de considérer que le PC n'est pas joignable et donc ne peut se faire un backup. $Conf{Language} = 'fr' // l'interface Web et les messages en français ou « en » pour l'anglais. $Conf{EMailNotifyMinDays} = 2.5;''' : période minimale durant laquelle un utilisateur ne recevra pas de mails. La valeur par défaut (2.5) signifie que l'utilisateur ne recevra qu'un message tous les trois jours au maximum $Conf{EMailFromUserName} = 'backuppc';''' : adresse de l'expéditeur. Les emails envoyés prendront en champ from la valeur indiquée ici. Il est possible d'indiquer le nom d'utilisateur ou l'adresse email complète en fonction de la configuration de votre serveur mail. $Conf{EMailAdminUserName} = ' admin-backup@backup.domain.com ';''' : adresse email de l'administrateur du serveur de sauvegarde $Conf{EMailUserDestDomain} = '@domain.com';''' : domaine des utilisateurs. Les emails seront envoyés à l'adresse {utilisateur}@domain.com ### la configuration de l'interface CGI : $Conf{CgiAdminUserGroup} = '';''''''' : groupe des utilisateurs administrateurs. Le groupe doit exister dans le fichier .htpasswd $Conf{CgiAdminUsers} = 'admin utilisateur1';''' : utilisateurs administrateurs. Chaque utilisateur doit exister dans le fichier .htpasswd $Conf{CgiURL} = 'http://backup.domain.com/cgi-bin/BackupPC_Admin';''' : adresse HTTP du script CGI $Conf{Language} = 'fr';''' : langue de l'interface CGI $Conf{CgiDateFormatMMDD} = 0;''' : format de date. 0 pour le format internationnal (JJ/MM) et 1 pour le format US (MM/JJ) // Exclusion de la musique et de la video , tmp ... $Conf{BackupFilesExclude} = { '/' => [ '/dev', '/proc', '/sys', '/mnt', '/media', '/var/cache/apt/archives', '/var/spool/squid', '/.backup', '/volatil', '/export/.tampon', '*.avi', '*.AVI', '*.mpg', '*.MPG', '*.mov', '*.MOV', '*.mp3', '*.MP3', '*.wav', '*.WAV', '*.wmv', '*.WMV', '*.wma', '*.WMA', '*.nrg', '*.NRG', '*.dvf', '*.DVF', '*.bmp', '*.BMP', '*.tif', '*.TIF', '*.tiff', '*.TIFF', '*.mso', '*.MSO', '*.dbx', '*.DBX', '*.exe', '*.EXE', '*.gif', '*.GIF', '*.jpg', '*.JPG', '*.png', '*.PNG', '*.iso', '*.ISO', '*.dat', '*.DAT', ], }; }}} === II-2- Sauvegarder le client pc-pascal === il faut ajouter dans /etc/backuppc/hosts la ligne {{{ pc-pascal 0 backuppc #### 0 pour adresse statique }}} - Depuis l'interface graphique lancer une sauvegarde complète afin que le logiciel crée le répertoire de sauvegarde /var/lib/backuppc/pc/pc-pascal - Sans doute, la sauvegarde échoue puisque la config du client n'existe toujours pas mais l'étape précédente crée le répertoire pc-pascal dans /var/lib/backuppc/pc/ du serveur (sinon crée le manuellement) === II-3- parametrer la config du client sur le serveur === On doit ensuite ajouter dans ce répertoire un fichier ''''config.pl'''' qui contient les options suivantes: {{{ $Conf{XferMethod} = 'rsync'; $Conf{RsyncClientPath} = '/usr/bin/rsync'; $Conf{RsyncClientCmd} = '$sshPath -l root $host $rsyncPath $argList+'; $Conf{RsyncClientRestoreCmd} = '$sshPath -l root $host $rsyncPath $argList+'; $Conf{RsyncShareName} = ['/','/home']; #### D'apres le client pc-pascal qui contient deux partitions (Ceci est un exemple) $Conf{RsyncArgs} = [ '--numeric-ids', '--perms', '--owner', '--group', '--devices', '--links', '--specials', '--times', '--block-size=2048', '--recursive', '--one-file-system', ]; $Conf{RsyncRestoreArgs} = [ "--numeric-ids", "--perms", "--owner", "--group", "--devices", "--links", "--times", "--block-size=2048", "--relative", "--ignore-times", "--recursive", "--one-file-system", ]; $Conf{RsyncLogLevel} = 1; }}} NB: l'option '--specials' donne la possibilité a rsync de copier des fichiers spéciaux des "non-device" === II- 4- Les cles ssh === Copions la clé ssh de l'utilisateur backuppc du serveur vers le client: ''Première étape, si ce n'est pas déjà fait : créer les cl''''é''''s de l'utilisateur backuppc sur le serveur de sauvegarde : '' {{{ su backuppc ssh-keygen -t dsa cd /var/lib/backuppc/.ssh }}} ''Copier les cles sur le client<
>'' {{{ ssh-copy-id - i id_dsa.pub root@pc-pascal }}} Essayons à présent de nous connecter, depuis le serveur de sauvegarde (utilisateur backuppc) sur le client: '' '' ssh root@pc-pascal Finalement, lancer une sauvegarde complete .... = III- Restauration avec BackupPC = ''Apres un crash disque si on a une sauvegarde complète, on doit etre capable de restaurer un client très facilement: '' * '' Il faut avoir la table des partitions pour les recreer ( on prendra l'exemple du client pc-pascal ayant deux partitions le / et le /home)'' * ''J'ai fait des tests avec un « rescuecd » (je l'ai trouvé interessant car il contient tous les outils necessaires ssh, rsync, la famille fdisk, la possibilite de configurer le reseau....)' mais un CD debian-etch pourra etre utilise en mode rescue '' * ''démarrons le client avec le « RescueCD » '' '' '' * configurer l'interface réseau: net-setup eth0'' '' * Recréer les partitions (exemple en utilisant cfdsik cree le / et le /home ) * Creer deux repertoire /mnt/target et /mnt/target/home (le target sera l'equivalent du / ) : mkdir –p /mnt/target/home '' '' * Monter les partitions : * mount –t ext3 /dev/sda1 /mnt/target '' '' * mount –t ext3 /dev/sda2 /mnt/target/home * Recuperer la cles ssh de backuppc a partir du serveur : {{{ ssh-copy-id - i id_dsa.pub root@pc-pascal }}} * A partir de l'interface graphique, selectionner le client, * A partir de la derniere sauvegarde: choisir le client, selectionnez tous le fichiers et choisir «Restore the files below dir » on met « /mnt/target » * La restauration ne copie pas le /home qui est sur une partition differente, il faut la faire manuellement, * Pour restaurer « /home » on met dans “Restore the files below dir” “/mnt/target/home” et on fait “restore” '' '' Après la restauration : Sur le client , chrooter le /mnt/target # chroot /mnt/target /bin/bash Installer Grub: # grub-install hd0 (ou hd0 c’est le MBR du premier disque dur) Sinon il faut on utilise la commande : # find /boot/grub/stage1 alors elle retourne par exemple root(hd0,0) donc le dernier (0) c’est la première partition, si elle retourne root(hd0,2) le (2) indique la troisièmes partition. '' '' Alors on exécute les commandes suivantes : '' '' #grub root (hd0,?) #setup (hd0) '' '' Si le Grub donne une erreur donc on peut essayer la commande suivante: grub-install --root-directory=/boot (hd0) ''''' '' ''' = IV‐ Particularités = === V-1 pour les serveurs virtuels (OpenVZ) === * Il suffit donc de backupper les machines hôtes à 100% * En OpenVZ, la sauvegarde se fait sur le repertoire $Conf'''{RsyncShareName'''} = ['/var/lib/vz/root/xxx/'] qui contient l'image de la machine virtuelle et donc elle sera automatiquement sauvegarde au complet. * la restauration se fait en recuperant le fichier mentionne de la machine virtuelle === IV -2 Pour les systemes en LVM === La sauvegarde est pareille,Verifier l'existance du /boot au niveau de la sauvegarde dans le config.pl du client $Conf{'''RsyncShareName} =''' ['/','/home','/boot']; Pour la restauration complète du système en''' '''LVM on doit utiliser un RescueCD 1.1.4 qui support la création des partions LVM (Kernel 2.6..) Crée les partitions /boot en EXT3 et les autres partions LVM, les VL et les VG Crée un répertoire /mnt/target/boot et /mnt/target/home pour pouvoir restaurer les partition /boot et /home en tappant: * mkdir -p /mnt/target/boot * mkdir -p /mnt/target/home * mount -t ext3 /dev/sda1 /mnt/target/boot * mount /dev/testvg/root /mnt/target/ * mount /dev/testvg/home /mnt/target/home === IV -3 Pour la sauvegarde d'un poste fixe ou portable === * Pour un poste fixe : si c’est sous Mysql/NFS à ne pas backupper * Pour le reste poste fixe ordinaire ou portable, On ne backup pas les mp3, films... === IV - 4 Limiter l'accès de l'utilisateur backuppc a rsync uniquement au niveau du client === * Sur le client on crée un script nommé `/root/.ssh/restrict-to-rsync` que l'on associe à la clé publique de backuppc dans le fichier `/root/.ssh/authorized_keys` {{{ #!/bin/sh # script "/root/.ssh/restrict-to-rsync" logfile=/root/.ssh/restrict-to-rsync.log case "$SSH_ORIGINAL_COMMAND" in *\&*|*\(*|*\{*|*\;*|*\<*|*\`*|*\|*) echo `date` "- SSH connection rejected" >> $logfile ;; rsync\ --server*) echo `date` "- SSH connection accepted" >> $logfile $SSH_ORIGINAL_COMMAND ;; *) echo `date` "- SSH connection rejected" >> $logfile ;; esac }}} * Ensuite, éditez le fichier authorized_keys de sorte que la ligne devient: {{{ command = "/root/.ssh/restrict-to-rsync" ssh-dsa AAAAB3 ... }}} . ''Question : est-ce qu'il ne suffirait pas plutôt de mettre directement ici `command="/usr/bin/rsync --server"` ? -- ProgFou''