====== Script de sauvegarde sur un serveur avec BorgBackup en SSH ======
#!/bin/bash
# ***************************************************************************
# ** FICHIER : borg_abeilles_SAVDOC_SSH.sh
# ** TYPE : Shell linux
# ** LOCALISATION : Poste utilisateur
# ** ORGANISATION : Centre social des Abeilles
# ** AUTEUR : RB
# ** DATE : 05/12/2020
# ** DATE maj : 30/8/2021
# ** OBJET : Sauvegarde du profil utilisateur
# ** des postes sur le serveur local avec BorgBackup en SSH
# ** Préalables : avoir créé les clés publique et privée ssh
# ** et avoir envoyé la clé publique sur le serveur
# ** Initialiser BorgBackup et renseigner dans ce script la BORG_PASSPHRASE
# ****************************************************************************
# initialisation à faire une fois
# borg init --encryption=repokey-blake2 ssh://$HOSTNAME@192.168.1.116/home/sauvegardes/$HOSTNAME/borg
# changement de phrase de passe
# borg key change-passphrase -v ssh://$HOSTNAME@192.168.1.116/home/sauvegardes/$HOSTNAME/borg
# problème de version entre local et serveur à faire une fois
# borg upgrade --disable-tam ssh://$HOSTNAME@109.190.1.205:5022/home/sauvegardes/borgbackup/$HOSTNAME
HOSTNAME=$(hostname)
SERVEUR="$HOSTNAME@Adresse-serveur"
PORT="" # port du serveur pour le ssh soit rien pour 22
SOURCE="$HOME" # Chemin du répertoire à sauvegarder
DESTI="/home/sauvegardes/$HOSTNAME/borg" # Chemin du répertoire de destination sur le serveur
MOUNT="/mnt/borg_archive" # chemin de montage de l'archive sur le PC
TEMPS=$(date '+%Y%m%d%H%M%S')
JOUR=$(date '+%Y%m%d')
LOG="$HOME/log/$HOSTNAME-$LOGNAME-$TEMPS.log" # Chemin du journal log sur le PC
ERR="$HOME/log/$HOSTNAME-$LOGNAME-$TEMPS.err" # Chemin du journal err sur le PC
# echo $LOG
OPTIONSprune=" --keep-within=10d --keep-weekly=4 --keep-monthly=-1 --stats --list --verbose "
OPTIONScreate="-v --stats --progress --exclude-caches --exclude $HOME/.cache "
# --compression : absent Super fast, low compression (lz4, default)
# --keep-within=10d : garde les sauvegardes des 10 derniers jours
# --keep-weekly=4 : garde 4 sauvegardes additionelles de fin de semaine
# --keep-monthly=-1 : garde toutes les sauvegardes mensuelles
# --exclude-caches : exclure les répertoires contenant un fichier cache
# --exclude : exclusions
# --verbose : mode verbeux
# --stats : affiche quelques statistiques de transfert de fichiers
# --prefix PREFIX : ne considère que les noms d'archive commençant par ce préfixe.
export BORG_PASSPHRASE='xxxxxxxxxxxxxxxx' # phrase de passe pour le référentiel chiffré
echo =============================================================== >$LOG 2>$ERR
echo "Sauvegarde des données de $LOGNAME@$HOSTNAME" >>$LOG 2>>$ERR
echo "Options create $OPTIONScreate" >>$LOG 2>>$ERR
echo "Options prune $OPTIONSprune" >>$LOG 2>>$ERR
echo =============================================================== >>$LOG 2>>$ERR
echo >>$LOG 2>>$ERR
echo --------------------------------------------------------------- >>$LOG 2>>$ERR
echo $(date +%d\/%m\/%Y\ %H\:%M) - Début de la sauvegarde : $LOGNAME@$HOSTNAME >>$LOG 2>>$ERR
echo --------------------------------------------------------------- >>$LOG 2>>$ERR
zenity --width=550 --info --text "
La sauvegarde automatique vers le serveur sera
plus ou moins longue suivant le nombre et le poids de vos fichiers
" 2>/dev/null &
echo "**************" >>$LOG 2>>$ERR
echo "Création d une archive appelée $HOSTNAME-`date +%Y%m%d`" >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
echo /usr/bin/borg create $OPTIONScreate ssh://$SERVEUR$PORT$DESTI::$HOSTNAME-$LOGNAME-`date +%Y%m%d` $SOURCE >>$LOG 2>>$ERR
/usr/bin/borg create $OPTIONScreate ssh://$SERVEUR$PORT$DESTI::$HOSTNAME-$LOGNAME-`date +%Y%m%d` $SOURCE >>$LOG 2>>$ERR
# nettoyage du référentiel en supprimant toutes les archives ne correspondant à aucune des options spécifiées
echo "**************" >>$LOG 2>>$ERR
echo "Nettoyage du référentiel en supprimant toutes les archives ne correspondant aux options spécifiées" >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
echo /usr/bin/borg prune $OPTIONSprune --prefix $HOSTNAME-$LOGNAME ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$ERR
/usr/bin/borg prune $OPTIONSprune --prefix $HOSTNAME-$LOGNAME ssh://$SERVEUR$PORT$DESTI 2>>$LOG 2>>$ERR
# zenity --width=550 --info --text "
# Fin de la sauvegarde
# Début du controle de l'intégrité de la sauvegarde
# " 2>/dev/null &
echo "**************" >>$LOG 2>>$ERR
echo --------------------------------------------------------------- >>$LOG 2>>$ERR
echo $(date +%d\/%m\/%Y\ %H\:%M) - Fin de sauvegarde >>$LOG 2>>$ERR
echo --------------------------------------------------------------- >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
echo " " >>$LOG 2>>$ERR
echo "Vérification de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
NOPB="no problems found" # phrase se retrouvant dans le fichier log indiquant qu'il n'y a pas de pb après vérification
echo Vérification uniquement du référentiel >>$LOG 2>>$ERR
FICHIER=$ERR
/usr/bin/borg -v check --repository-only ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$ERR
# echo Vérification uniquement des archives >>$LOG 2>>$ERR
# FICHIER=$LOG
# /usr/bin/borg -v check --archives-only ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$LOG
# echo Vérification de l intégrité des données des archives >>$LOG 2>>$ERR
# /usr/bin/borg -v check --verify-data ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$LOG
echo "$NOPB dans $FICHIER " >>$LOG 2>>$ERR
echo "Vérification terminée de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
echo " " >>$ERR
echo "Vérification terminée de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$ERR
echo "**************" >>$ERR
# echo if grep -q "$NOPB" "$FICHIER"
if grep -q "$NOPB" $FICHIER
then
# echo "trouvé"
echo " " >>$LOG 2>>$ERR
echo "Montage de ssh://$SERVEUR$PORT$DESTI sur $MOUNT" >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
# borg mount ssh://$SERVEUR$PORT$DESTI $MOUNT >>$LOG 2>>$ERR
zenity --width=550 --info --text "
Sauveagrde terminée
" 2>/dev/null &
# Elle est accessible sur $MOUNT
else
# echo "pas trouvé"
zenity --width=550 --info --text "
ATTENTION IL Y A DES PROBLÈMES DANS LA SAUVEGARDE
Voir les fichiers
$LOG et $ERR
" 2>/dev/null &
exit 1
fi
echo "**************" >>$LOG 2>>$ERR
echo "transfert du fichier log vers le serveur - peut-être à annuler une fois que tout sera ok" >>$LOG 2>>$ERR
/usr/bin/scp $LOG $SERVEUR:$DESTI >>$LOG 2>>$ERR
# /usr/bin/scp -P 5022 $LOG $SERVEUR:$DESTI >>$LOG 2>>$ERR
echo "**************" >>$LOG 2>>$ERR
echo " " >>$LOG 2>>$ERR
echo " " >>$LOG 2>>$ERR
echo " " >>$LOG 2>>$ERR
echo " " >>$LOG 2>>$ERR
exit 0