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 "
<big>La sauvegarde automatique vers le serveur sera
plus ou moins longue suivant le nombre et le poids de vos fichiers</big>
" 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 "
# <big>Fin de la sauvegarde
# Début du controle de l'intégrité de la sauvegarde</big>
# " 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 "
	<big>Sauveagrde terminée</big>
	" 2>/dev/null &
#       Elle est accessible sur $MOUNT
    
else
#        echo "pas trouvé"
	zenity --width=550 --info --text "
	<big>ATTENTION IL Y A DES PROBLÈMES DANS LA SAUVEGARDE
	Voir les fichiers
	$LOG et $ERR</big>
	" 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