# **********************************************************************************************
# * IMAGES-BACKUP script  Ben Makkink   25-jan-2025      Raspberry Pi 4 Backup server          *
# * De backup drive is per default niet gemount en dus airgapped t.o.v. het thuisnetwerk       *
# * Eerst controleren we een bestand in de Images map van BEN-PC. Als deze bestaat en tevens   *
# * niet encrypted is, kunnen we aannemen dat BEN-PC vrij van ransomware is en kan de externe  *
# * backup drive gemount worden en gesynchroniseerd met de IMAGES map van BEN-PC.              *
# **********************************************************************************************
#!/bin/bash
echo;
echo "  Images-Backup start: "$(date +%d/%m/%Y-%X);
echo "  ========================================";

# Start timer
begin=$(date +"%s");

# bug systemd still uses old version fstab
systemctl daemon-reload;
# wait;

# Check of Thuisserver-Backup draait, zo ja dan mag Images-Backup niet starten!
if [ -f /home/ben/tmp/thuisserver-ransom.txt ]; then
  echo;
  echo "CONFLICT!";
  echo "Thuisserver-Backup is bezig, nu geen Images-Backup";
  sleep 10;
  exit;
fi

# Check of Testserver-Backup draait, zo ja dan mag Images-Backup niet starten!
if [ -f /home/ben/tmp/testserver-ransom.txt ]; then
  echo;
  echo "CONFLICT!";
  echo "Testserver-Backup is bezig, nu geen Images-Backup";
  sleep 10;
  exit;
fi

# Wek ben-pc
echo "  Wekken en verbinding maken met ben-pc.....";
/usr/local/bin/wakeup -c1 -w5 ben-pc
if [ $? -ne 0 ]; then
  # echo "geen verbinding met host";
  # echo "error mail"
  cat /home/ben/geen-connectie-mail.txt | msmtp ben@makkink.eu;
  halt;
  exit;
fi

# Per default is de externe backup drive niet gekoppeld, maar we controleren het toch nog even
# een keer voordat we de airgap sluiten
if mountpoint -q "/store"; then
   umount -l /store;
   wait;
   echo "  De backup drive was nog gemount en is nu ontkoppeld";
fi

# Verwijder mogelijk nog achtergebleven controlebestand /home/ben/tmp/pcs-ransom.txt
  rm -rf /home/ben/tmp/pcs-ransom.txt;

# check of op BEN-PC het controle bestand bestaat en niet encrypted is.
 sshpass -f ~/.rsync_pass_ben-pc rsync -azh backuprsyncd@192.168.178.2::Images/*txt /home/ben/tmp/;

if [ -f /home/ben/tmp/pcs-ransom.txt ]; then
    if grep -q "\bransomware-check\b" /home/ben/tmp/pcs-ransom.txt; then

       # Het controle-bestand in //ben-pc/Images is in orde.
       # Het is veilig de externe Backupdrive te koppelen voor synchronisatie.
       echo "  Het controlebestand op Ben-PC is in orde, mounting SSD....";
       mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store;
       wait;
       echo "  Start Rsync naar BackupServer van:";
       echo "  ----------------------------------";
       echo;
       echo "Ben-PC";
       echo "------";    
       # synchroniseer alleen maandelijkse full backups
        sshpass -f ~/.rsync_pass_ben-pc rsync -av backuprsyncd@192.168.178.2::Images/ben-pc/*benpc-00-00.mrimg /store/pc-images/ben-pc;
       wait;
       # Bewaar alleen de laatste backups
       # Bewaar 3: tail -n +4
       # Bewaar 2: tail -n +3
       # Bewaar 1: tail -n +2
       ls -t /store/pc-images/ben-pc | tail -n +3 |xargs rm -f --;       
       echo;
       echo "Benovo";
       echo "------";
        sshpass -f ~/.rsync_pass_ben-pc rsync -av --delete backuprsyncd@192.168.178.2::Images/benovo/ /store/pc-images/benovo;
       echo;
       echo "Erica";
       echo "-----";
        sshpass -f ~/.rsync_pass_ben-pc rsync -av --delete backuprsyncd@192.168.178.2::Images/erica/ /store/pc-images/erica;
       echo;
       echo "BackupServer";
       echo "------------";
        sshpass -f ~/.rsync_pass_ben-pc rsync -av --delete backuprsyncd@192.168.178.2::Images/raspberry/ /store/pc-images/raspberry;
       echo;
       echo "Homeassistant";
       echo "------------";
        sshpass -f ~/.rsync_pass_ben-pc rsync -av --delete backuprsyncd@192.168.178.2::Images/homeassistant/ /store/pc-images/homeassistant;
       wait;
       echo;
       echo "  Einde Rsync van PC's naar BackupServer";
       echo "  ----------------------------------------"; 

       # Na de synchronisatie ontkoppelen we de externe drive
       umount -l /store;
       wait;
       echo;
       echo "  Einde Rsync en SSD ontkoppeld: "$(date +%d/%m/%Y-%X);
       echo "  ===================================================";
       # Stop timer
       einde=$(date +"%s");
       DIFF=$(($einde-$begin));
       echo "  Duur backup: $(($DIFF / 3600 )) uur $((($DIFF % 3600) / 60)) minuten $(($DIFF % 60)) seconden.";
       echo;
       sleep 5;
       # Verwijder controlebestand /home/ben/tmp/pcs-ransom.txt
       rm -rf /home/ben/tmp/pcs-ransom.txt;
       # Shutdown Backup-Server
       echo "   Shutdown Backup-Server";
       sleep 5;
       halt;
       sleep 5;
       exit;
    fi
   # echo "Ben-pc ransomed?";
fi

# Het controlebestand //ben-pc/Images/pcs-ransom.txt bestaat niet of is versleuteld. Potentieel ransomware!
 echo;
 echo "  Ben-pc is waarschijnlijk geransomed. Een error-mail is verstuurd.";
cat /home/ben/pcs-ransom-mail.txt | msmtp ben@makkink.eu;
echo;
echo "  Shutdown BackupServer";
sleep 5;
halt;
