# **********************************************************************************************
# * TESTSERVER-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 vault van de testserver. Als deze bestaat en tevens *
# * niet encrypted is, kunnen aannemen dat de testserver vrij van ransomware is en kunnen we   *
# * de externe backup drive mounten en synchroniseren met de /vault van de testserver          *
# **********************************************************************************************
#!/bin/bash
echo;
echo "  Testserver-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 Images-Backup draait, zo ja dan kan Testserver-Backup niet starten!
if [ -f /home/ben/tmp/pcs-ransom.txt ]; then
  echo;
  echo "CONFLICT!";
  echo "Images-Backup is bezig, nu geen Testserver-Backup";
  sleep 10;
  exit;
fi

# Check of Thuisserver-Backup draait, zo ja dan kan Testserver-Backup niet starten!
if [ -f /home/ben/tmp/thuisserver-ransom.txt ]; then
  echo;
  echo "CONFLICT!";
  echo "Thuisserver-Backup is bezig, nu geen Testserver-Backup";
  sleep 10;
  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/testserver-ransom.txt
  rm -rf /home/ben/tmp/testserver-ransom.txt;

# check of op de homeserver het controle bestand bestaat en niet encrypted is.
 sshpass -f ~/.rsync_pass_testserver rsync -azh --exclude '*/' ububen@192.168.178.5:/vault/* /home/ben/tmp/;

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

       # Het controle-bestand in //testserver/vault is in orde.
       # Het is veilig de externe Backupdrive te koppelen voor synchronisatie.
       echo "  Het controlebestand op de testserver is in orde, mounting SSD....";
       mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store;
       wait;
       echo "  Start Rsync van Testserver naar BackupServer";
       echo "  --------------------------------------------";
        sshpass -f ~/.rsync_pass_testserver rsync -avzh --delete ububen@192.168.178.5:/vault/* /store/vault-testserver/;
       wait;
       echo "  Einde Rsync van Testserver 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/testserver-ransom.txt
       rm -rf /home/ben/tmp/testserver-ransom.txt;
       wait;
       # shutdown backup-server
       echo "   Backup-Server Shutdown";
       sleep 5;
       shutdown now;
       sleep 5;
       exit;
    fi
fi

# Het controlebestand //testserver/vault/testserver-ransom.txt bestaat niet of is versleuteld. Potentieel ransomware!
 echo;
 echo "De testserver backupbestanden zijn waarschijnlijk geransomed. Een error mail is verstuurd.";
cat /home/ben/testserver-ransom-mail.txt | msmtp ben@makkink.eu;
echo;
echo "Shutdown BackupServer";
sleep 5;
shutdown now;
