BackupPC

Version imprimableEnvoyer par emailversion PDF

BackupPC permet de sauvegarder des ordinateur exécutant Windows, Linux, ou tout autre OS.

Ce programme fournit une interface web qui permet la gestion des sauvegardes quelque soit solutions choisie (rsync, smb, tar, etc...).

Installer rsyncd sous Windows

BackupPC propose une version binaire de rsyncd sur ce lien sous le nom "cygwin-rsyncd".

Une autre option est d'utiliser cygwin et d'installer le paquet "rsync".

Il faut éviter d'avoir les deux options installées sur un poste, dans tous les cas de figure, la variable "path" sera définie à "/cygdrive/c/" pour le disque "c:\".

Editez les fichiers :

  • C:\rsyncd\rsyncd.secrets : en fin de fichier, entrez un nom d'utilisateur et un mot de passe unique, dédié à Rsyncd, qui sera recopié dans l'interface web de BackupPC.

  • C:\rsyncd\rsyncd.conf, avec les paramètres de configuration suivant :

use chroot = false
max connections = 1
log file = c:/rsyncd/rsyncd.log
lock file = c:/rsyncd/rsyncd.lock
[adminuser]
    path = /cygdrive/c/Users/admin
    comment = Docs utilisateur admin
    strict modes = false
    auth users = monutilisateur
    secrets file = c:/rsyncd/rsyncd.secrets
    hosts allow = 192.168.0.5, nom.dns.du.poste
    read only = false
    list = false


Tester la connexion à rsyncd

Pour tester que rsyncd est bien configuré, après que le port 873 et rsync.exe soit autorisé dans le pare-feu, tapez la commande suivante :


telnet <adresse IP du poste>:873


La réponse doit être du genre :


@RSYNCD: 30.0
             @ERROR: protocol startup error

Perte de la connexion à l'hôte.


Ceci signifie que le serveur rsyncd est bien configuré.

Suivre la progression de la sauvegarde

Pour afficher la progression en temps réel des fichiers utilisés par BackupPC, exécutez cette commande :


watch "lsof -n -u backuppc | egrep ' (REG|DIR) ' | egrep -v '( (mem|txt|cwd|rtd) |/LOG)' | awk '{print $9}'"


Pour afficher le log d'une sauvegarde en cours, ouvrez ce fichier :


/usr/share/backuppc/bin/BackupPC_zcat /var/lib/backuppc/pc/<ordinateur>/XferLOG.z


Tester la connexion depuis Linux à un partage Windows (smb)

Utilisez la commande suivante pour vous connecter à votre partage réseau :


smbclient //AdresseIP/PartageWindows$ -U UtilisateurWindows


Le mot de passe de connexion de l'utilisateur Windows utilisé pour l'option "-U" vous sera alors demandé. Vous povuez alors tester le bon fonctionnement du partage avec une commande tel que "dir".

Tester la connexion entre deux machines Linux (rsync)

Etape 1 : se connecter sur la machine distante avec l'utilisateur backuppc


su - backuppc
ssh root@example.com


Etape 2 : En cas de problème, générer une clé SSH pour la connexion sans mot de passe

su - backuppc

cd /var/lib/backuppc/.ssh

ssh-keygen -t rsa

Laisser la "passphrase" vide.

Deux clés sont générées : id_rsa (clé privé) et id_rsa.pub (clé publique).

Copier la clé publique sur le serveur qu'il faut sauvegarder :

scp id_rsa.pub root@example.com:.ssh/.

Sur le serveur qu'il faut sauvegarder, on ajoute la clé publique dans le fichier authorized_keys :

#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Vérifiez que les droits sur le fichier authorized_keys soit bien à 600 (chmod 600 authorized_keys).

Désormais, sur la machine hébergeant BackupPC et stockant les sauvegardes, la connexion avec l'utilisateur backuppc doit bien se dérouler :

su - backuppc
ssh root@example.com

Sauvegarde d'un poste Windows

Diverses astuces sont disponibles ici : https://sourceforge.net/projects/backuppc/

Liste des exclusions par défaut pour les postes Windows : https://sourceforge.net/projects/backuppc/

 

En utilisant le protocole smb, il est possible d'exclure des fichiers et dossiers (option BackupFilesExclude ) en respectant la mise en forme suivante :

\Application Data\*

Pour un fichier se trouvant à la racine du partage, il faut utiliser deux \\ :

\\*.DAT

\\Thumbs.db

 

L'encodage d'un client Windows peut être définis à "cp1252" si vous utilisez Rsync avec Cygwin.

Astuces de la console de configuration

Spécifier une adresse e-mail :

EMailAdminUserName -> votremail@example.com

Empêcher aux utilisateurs d'éditer leur configuration :

CgiUserConfigEditEnable -> no

Définir un mot de passe d'accès pour chaque utilisateur

Vous pouvez utiliser un mail pour chaque utilisateur :

htpasswd /etc/backuppc/htpasswd adressemail

Envoi des mails avec Gmail

Utilisation de smtp.gmail.com avec exim.

 

dpkg-reconfigure exim4-config > mail sent by smarthost; no local mail.

 

Editer /etc/exim4/update-exim4.conf et vérifiez le paramètre suivant :

dc_smarthost='smtp.gmail.com'

 

Ajouter ces lignes au fichier /etc/exim4/passwd.client :

 

smtp.gmail.com : ACCOUNT_NAME@gmail.com : PASSWORD

gmail-smtp.l.google.com : ACCOUNT_NAME@gmail.com: PASSWORD

 

Testez l'envoi d'email avec cette commande :

/usr/share/backuppc/bin/BackupPC_sendEmail -u emailaddress

 

Si ça ne fonctionne pas :

tail -f /var/log/exim4/mainlog

puis observez la livraison des mails avec la commande "mailq".

 

Un des problèmes les plus courants sont les messages du type "Authentication Required".

 

Si l'hôte n'est pas "gmail-smtp.l.google.com", replacez la valeur en rapport dans le fichier "/etc/exim4/passwd.client".

 

Une fois le problème résolu, vous pouvez envoyer tous les mails en attente avec la commande :

 

exim -qff

 

 

Supprimer une sauvegarde

Ce script vous permet de supprimer une sauvegarde :

 


#! /bin/bash
#this script contributed by Matthias Meyer
#note that if your $Topdir has been changed, the script will ask you
#the new location.
#
usage="\
Usage: $0 -c <client> [-d <backupnumber> -b <before data> [-f]] | [-l]

Delete specified backups.
Attention!
If a full backup is deleted, all incremental backups
that depends on it will also be deleted.

    -c <client>    - client machine for which the backup was made
    -d <number>    - backup number to delete
    -b <date>    - delete all backups before this date (YYYY-MM-DD)
    -f        - run Backuppc_nightly afterwards to clean up the pool
    -l        - list all backups for <client>
    -h        - this help

Example:
list backups of <client>
$0 -c <name of the client which was backed up> -l

remove backup #3 from <client>
$0 -c <name of the client which was backed up> -d 3

remove all backups before 2007-07-02 from <client>
$0 -c <name of the client which was backed up> -b 2007-07-02
"

typeset -i len

while test $# -gt 0; do
    case "$1" in
    -c | --client )
        shift; client=$1; shift;;
    -b | --before )
        shift; bDate=$1; shift;;
    -d | --delete )
        shift; bNumber=$1; shift;;
    -f | --force )
        nightly="true"; shift;;
    -l | --list )
        list="true"; shift;;
    * | -h | --help)
        echo "$usage"
        exit 0
        ;;
    esac
done

if [ -z "$client" ] || [ -z $list ] && [ -z $bNumber ] && [ -z $bDate ]
then
    echo "$usage"
    exit 0
fi

if [ -e /etc/backuppc/config.pl ]
then
    TopDir=`grep $Conf{TopDir} /etc/backuppc/config.pl | awk '{print $3}'`
    len=${#TopDir}-3
    TopDir=${TopDir:1:len}
else
    echo "/etc/backuppc/config.pl not found"
    exit 1
fi

ls $TopDir/pc > /dev/null 2>&1
while [ $? != 0 ]
do
    read -p "examined $TopDir seems wrong. What is TopDir ? " TopDir
    ls $TopDir/pc > /dev/null 2>&1
done

ls $TopDir/pc/$client > /dev/null 2>&1
if [ $? != 0 ]
then
    echo "$client have no backups"
    exit 1
fi

if [ ! -z $list ]
then
    while read CLine
    do
        BackupNumber=`echo $CLine | awk '{print $1}'`
        BackupType=`echo $CLine | awk '{print $2}'`
        BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber | awk '{print $1}'`
        echo "BackupNumber $BackupNumber - $BackupType-Backup from $BackupTime"
    done < $TopDir/pc/$client/backups
    exit 0
fi

if [ ! -z $bNumber ] && [ ! -e $TopDir/pc/$client/$bNumber ]
then
    echo "Backup Number $bNumber does not exist for client $client"
    exit 1
fi

LogDir=`grep $Conf{LogDir} /etc/backuppc/config.pl | awk '{print $3}'`
len=${#LogDir}-3
LogDir=${LogDir:1:len}

delete2full="false"
rm -f $TopDir/pc/$client/backups.new > /dev/null 2>&1
while read CLine
do
    BackupNumber=`echo $CLine | awk '{print $1}'`
    BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber | awk '{print $1}'`
    BackupType=`echo $CLine | awk '{print $2}'`
    if [ $BackupType == "full" ]
    then
        delete2full="false"
    fi
    if [ "$BackupTime" \< "$bDate" ] || [ $BackupNumber == "$bNumber" ] || [ $delete2full == "true" ]
    then
        if [ $BackupType == "full" ]
        then
            if [ $delete2full == "false" ]
            then
                delete2full="true"
            else
                delete2full="false"
            fi
        fi
        bNumber=$BackupNumber
        echo "remove $TopDir/pc/$client/$bNumber"
        echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup delete $TopDir/pc/$client/$bNumber" >> $LogDir/LOG
        rm -fr $TopDir/pc/$client/$bNumber > /dev/null 2>&1
        echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup $TopDir/pc/$client/$bNumber deleted" >> $LogDir/LOG
    fi
    if [ $BackupNumber != $bNumber ]
    then
        echo "$CLine" >> $TopDir/pc/$client/backups.new
    fi
done < $TopDir/pc/$client/backups
mv $TopDir/pc/$client/backups.new $TopDir/pc/$client/backups
echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup $TopDir/pc/$client/backups updated" >> $LogDir/LOG

if [ ! -z $nightly ]
then
    path=${0%/BackupPC*}
    su backuppc -c "$path/BackupPC_nightly 0 255"
    echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup BackupPC_nightly finished" >> $LogDir/LOG
fi

exit $?


Liens

Externes

http://www.cs.umd.edu/~cdunne/projs/backuppc_guide.html#Mobile Clients

Sponsors