Table des matières

BackupPC - Installation d'une solution de sauvegarde sous Linux

CréationNicolas THOREZ 2019/11/14 10:55

La sauvegarde est et sera toujours un élément incontournable d'une infrastructure. Pour Linux, il existe plusieurs solutions. Nous allons voir ici backuppc, une solution permettant la sauvegarde de système Linux aussi bien que Windows et dont la gestion se fait via une interface Web, ce qui en facilite la compréhension.

Environnement

Cette procédure a été réalisé sur une debian 9.

danger

Cette procédure nécessite des accès root. Faîtes donc attention à ce que vous faîtes.

Prérequis

Il n'y a pas de prérequis particulier, si ce n'est l'espace de stockage pour accueillir les sauvegardes ainsi que la localisation de cette espace.

Il faut prendre en compte quelques points essentiels, généralement abordés lors de l'établissement du plan global de sauvegarde :

Installation

apt-get update

apt-get install backuppc

systemctl restart apache2

Paramétrage

htpasswd /etc/backuppc/htpasswd backuppc

service backuppc stop

mkdir -p /chemin/du/dossier/de/sauvegarde/

rsync -va /var/lib/backuppc /chemin/du/dossier/de/sauvegarde/

rm -rf /var/lib/backuppc/

ln -s /chemin/du/dossier/de/sauvegarde /var/lib/backuppc

chown -h backuppc:backuppc /var/lib/backuppc

service backuppc start

Notification

Attention: Les notifications par mail ne seront effectives que si l'envoi de mail est configuré sur la machine (voir les paramétrages d'exim4 par exemple).

Installation

BackupPC est désormais configuré. Il ne reste plus qu'à créer des tâches de sauvegarde.

Sauvegarde du poste local

 nano /etc/sudoers

Sauvegarde d'un poste Linux distant

Paramétrage côté serveur

sudo -i -u backuppc

ssh-keygen -t rsa -b 2048

Paramétrage côté client

nano /root/.ssh/authorized_keys

Test de connexion coté serveur

sudo -i -u backuppc

ssh root@client

Ajout et paramétrage de la tâche de sauvegarde

Test de la sauvegarde

Paramétrage

Votre tâche de sauvegarde est opérationnelle. Il ne vous reste plus qu'à faire la même chose pour tous les autres clients Linux.

Script de supervision

Les informations sur l'état des sauvegardes sont affichées dans l'interface graphique et envoyées par mail. Cependant, on a pas toujours les yeux fixés sur l'interface et les mails peuvent se perdre dans un flot important de réception de messages.

Le script suivant permet de lire les logs de BackupPC afin de savoir si la sauvegarde d'une machine est à jour ou pas. Il renvoie un résultat lisible par Nagios pour obtenir des alertes visuelles.

Droits

Pour pouvoir utiliser les commandes spéciales de BackupPC et accéder à ses logs, l'utilisateur nagios doit faire parti du groupe backuppc

Pour intégrer l'utilisateur nagios au groupe backuppc :

adduser nagios backuppc

Script de supervision :

#!/bin/bash

###############################################################################
#
# Script de vérification des sauvegardes de BackupPC
#
# Par Nicolas THOREZ
#
###############################################################################

##### Déclarations des fonctions #####

# Fonction d'affichage de l'aide
display-help()
{
        echo "Aide pour check-backup.sh"
        echo ""
        echo "Script de vérification des sauvegardes de BackupPC."
        echo ""
        echo "Usage :             ./check-backup.sh [-s|--server] nom_du_serveur [-w|--warning] duréé_pour_avertissement [-c|--critical] durée_pour_critique"
        echo ""
        echo "Demande d'aide :    ./check-backup.sh [-h|--help]"
        echo ""
        echo "Paramètres et arguments :"
        echo ""
        echo "-h, --help                   Affiche cette aide."
        echo ""
        echo "-s, --server                 Nom du serveur dont il faut vérifier l'état de la dernière sauvegarde."
        echo ""
        echo "-c, --critical               Ecart en nombre de jour à partir duquel on déclenche une alerte critique."
        echo "                             La valeur par défaut est 7 (1 semaine)."
        echo ""
        echo "-w, --warning                Ecart en nombre de jour à partir duquel on déclenche un avertissement."
        echo "                             La valeur par défaut est 1 (1 jour)."
        echo ""
        exit 2
}
##### Déclarations des variables #####

# Dossier de logs de BackupPC
LOG_DIR="/var/lib/backuppc/log"

##### Traitement des arguments en entrée #####

while [[ $# -gt 0 ]]
do
        PARAM="$1"
        case $PARAM in
                # aide
                "-h"|"--help")
                display-help
                shift
                ;;
                # serveur
                "-s"|"--server")
                SERVER="$2"
                shift
                shift
                ;;
                # critique
                "-c"|"--critical")
                CRITICAL="$2"
                shift
                shift
                ;;
                # avertissement
                "-w"|"--warning")
                WARNING="$2"
                shift
                shift
                ;;
                # autres options non déterminées
                *)
                display-help
                shift
                ;;
        esac
done

##### Vérification des arguments #####

# Vérification de la variable SERVER
if [ -z "$SERVER" ]
then
        echo "[CRIT] Le nom du serveur est obligatoire."
        echo "[INFO] Utilisez l'option -h pour avoir de l'aide."
        exit 2
fi

# Vérification de la variable WARNING
if [ -z "$WARNING" ]
then
        WARNING=1
fi

# Vérification de la variable CRITICAL
if [ -z "$CRITICAL" ]
then
        CRITICAL=7
fi

##### Traitement #####

# Recherche d'une sauvegarde dans le fichier log du jour
SAVE=$(cat $LOG_DIR/LOG | grep -E "(Finished incr backup|Finished full backup)"| grep -i "$SERVER" | tail -n 1)

if [ -z "$SAVE" ]
then
        # Pas de sauvegarde dans le log du jour -> On cherche dans les vieux log
        SAVE=$(/usr/share/backuppc/bin/BackupPC_zcat $LOG_DIR/LOG.*.z | grep -E '(Finished incr backup|Finished full backup)'| grep -i "$SERVER" | head -n 1)

        if [ -z "$SAVE" ]
        then
                # Pas de sauvegarde -> Alerte critique
                echo "[CRIT] Pas de sauvegarde. Merci de regarder les logs."
                exit 2
        else
                # Une sauvegarde a été trouvée -> On récupère sa date
                SAVEDATE=$(echo $SAVE | awk '{ print $1,$2 }')

                # On calcule l'écart de jours
                SAVEDATESTAMP=$(date --date="$SAVEDATE" +%s)
                TODAYSTAMP=$(date --date="now" +%s)
                DELTASEC=$(($TODAYSTAMP-$SAVEDATESTAMP))
                DELTA=$(($DELTASEC/86400))

                # On vérifie si le delta est supérieur ou égal au seuil critique
                if [[ $DELTA -ge $CRITICAL ]]
                then
                        # Oui -> Alerte critique
                        echo "[CRIT] Pas de sauvegarde depuis plus de $DELTA jour(s)."
                        exit 2
                else
                        # Non -> On vérifie si le delta est supérieur ou égal au seuil d'avertissement
                        if [[ $DELTA -ge $WARNING ]]
                        then
                                # Oui -> Avertissement
                                echo "[WARN] Pas de sauvegarde depuis plus de $DELTA jour(s)."
                                exit 1
                        else
                                # Non -> La sauvegarde est bonne
                                echo "[GOOD] Sauvegarde OK."
                                exit 0
                        fi
                fi
        fi
else
        # Sauvegarde trouvée dans le log du jour
        echo "[GOOD] Sauvegarde OK."
        exit 0
fi

# Si on n'est toujours pas sorti du script à ce niveau -> Erreur inconnue
echo "[UNKN] Erreur inconnue."
exit 3

Erreurs et Corrections

fileListReceive failed

Problème

Après une mise à jour, un nettoyage de paquets ou une mise à niveau du système d'exploitation du client, le paquet rsync peut avoir été supprimé, ce qui provoque cette erreur. La simple réinstallation du paquet permet de résoudre le problème et de relancer la sauvegarde.

Vérification

which rsync

L'état correct doit renvoyer :

/usr/bin/rsync

Dans le cas contraire, la correction est nécessaire.

Correction

apt update && apt install -y rsync

no ping response from localhost

Problème

La sauvegarde du serveur BackupPC est impossible, le service indique que le localhost ne répond pas au ping. Après vérification en ligne de commande, le ping fonctionne.

Vérification

grep 'Conf{Ping6Path}' /etc/backuppc/config.pl

La commande doit renvoyer :

$Conf{Ping6Path} = '/bin/ping6';

Dans le cas contraire, la correction est nécessaire.

Correction

Éditez le ficher /etc/backuppc/config.pl et modifiez la variable $Conf{Ping6Path} (Créez la, si absente, juste après la ligne $Conf{PingPath} = '/bin/ping';). La ligne correcte doit être : $Conf{Ping6Path} = '/bin/ping6';. Une fois le fichier de configuration modifié, redémarrez le service backuppc.