#!/bin/bash

# Script effectuant un backup des principaux repertoires
# du serveur ScoDoc vers une machine distante.
# utilise rsync (pour ne cpier que les fichiers modifies)
# et ssh (pour se connecter de faon securisee).
#
# L'utilisateur root du serveur scodoc (qui execute ce script)
# doit pouvoir se conencter directement (sans mot de passe) sur
# la machine distante (installer les cles ssh necessaires).
#
# A adapter a vos besoins. Utilisation a vos risques et perils.
#
# E. Viennet, 2002, 2021

# Installation:
# 1- Installer rsync:
#     apt-get install rsync
# 2- mettre en place un job cron:
#     par exemple copier ce script dans /etc/cron.daily/
#    (et le rendre executable avec chmod +x ...)

# -------------------- CONFIGURATION A ADAPTER

remotehost=XXXX # nom ou IP du serveur de sauvegarde
destdir=/home/SAU-SCODOC # repertoire sur serveur de sauvegarde

logfile=/var/log/rsynclog # log sur serveur scodoc

# A qui envoyer un mail en cas d'erreur de la sauvegarde:
SUPERVISORMAIL=emmanuel.viennet@example.com

CALLER=$(basename $0)
MACHINE=$(hostname -s)

# -----------------------------------------------------

# ----------------------------------
# Subroutine to terminate abnormally
# ----------------------------------
terminate()
{
 dateTest=$(date)

 mail -s "Attention: Probleme sauvegarde ScoDoc" $SUPERVISORMAIL <<EOF
The execution of script $CALLER was not successful on $MACHINE.

Look at logfile $logfile"

$CALLER terminated, exiting now with rc=1."

EOF
 
# repeat message for logs...
 echo "The execution of script $CALLER was not successful on $MACHINE."
 echo
 echo  "Look at logfile $logfile"
 echo
 echo "$CALLER terminated, exiting now with rc=1."
 dateTest=$(date)
 echo "End of script at: $dateTest"
 echo ""

 exit 1
}

# --------------------------------------
# Subroutine to mirror a dir using rsync (mirror on REMOTE HOST)
# Variables:
#   remotehost : hostname on which is the mirror
#   srcdir     : directory to mirror on local host 
#   destdir    : directory on remotehost where to put the copy
#   logfile    : filename to log actions
# --------------------------------------
rsync_mirror_to_remote()
{
  echo "--------------- mirroring $MACHINE:$srcdir to $remotehost:$destdir" >> $logfile 2>&1
  echo "starting at $(date)" >> $logfile 2>&1
  rsync -vaze ssh --delete --rsync-path=/usr/bin/rsync "$srcdir" "$remotehost:$destdir" >> $logfile 2>&1
  if [ $? -ne 0 ]
  then
    echo Error in rsync: code=$?
    terminate
  fi

  echo "ending at $(date)" >> $logfile 2>&1
  echo "---------------"  >> $logfile 2>&1
}



# ----------- REPERTOIRES A SAUVEGARDER:
for srcdir in /etc /home /root /opt /usr/local /var; do
    rsync_mirror_to_remote
done