#!/bin/bash
#**************************************************************************************
#*  PI-SYSBACK script version 1.0  Voor BACKUPSERVER.         Ben Makkink 16/08/2024  *
#**************************************************************************************
#*  Eenvoudig programma om het OS van de backup-server als backup op te slaan         *
#*  Het script wordt alleen handmatig uitgevoerd op momenten die daarom vragen, zoals"*
#*  voordat er aan programa's gesleuteld wordt. De tarball wordt opgeslagen in        *
#*  /store/pi-sysback. Zie aan het eind de restore informatie                         *
#**************************************************************************************

# Check of SSD al is gekoppeld
echo;
if mountpoint -q "/store"; then
  echo "   SSD is al gemount";
else
  echo "   Mounting SSD....";
  mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store;
  wait;
  echo "  Start Pi-sysback";
  echo "  ----------------";
fi
# Plaats jezelf in de root
cd /;

# Set VARIABLES
# Geef hier aan waar backups opgeslagen moeten worden
sysbackdir="/store/pi-sysback/";

# Geef hier aan welk datumformaat gebruikt moet worden voor de bestandsnaam van de backup
datestamp=$(date +%Y%m%d)

# Maak tarball van systeem bestanden
tar -cvzf $sysbackdir$datestamp"-pi-sysback.tar.gz" --exclude /proc --exclude /sys --exclude /store /;
echo "backing up...";
wait;

# delete bestaande tarballs, bewaar 2 laatste
# find $sysbackdir -maxdepth 1 -mtime +14 -name *sysback.* -exec rm {} \;;
# Bewaar alleen de laatste tarballs
# Bewaar 3: tail -n +4
# Bewaar 2: tail -n +3
# Bewaar 1: tail -n +2
cd $sysbackdir;
ls -t | tail -n +3 | xargs rm -f --;

# Check of SSD ontkoppeld mag worden, i.e. er is geen mainserver- of images-backup gaande?
if [ -f /home/ben/tmp/*-ransom.txt ]; then
	echo;
	echo "  De SSD is niet ontkoppeld, er is nog een backup actief";
	sleep 5;
	exit;
fi

# Als er geen ander proces gebruikt maakt van de SSD dan kan deze ontkoppeld worden
  umount -l /store;
  wait;
  echo;
  echo "  De SSD is succesvol ontkoppeld";
  sleep 5;

# ===========================================================================================
# RESTORE PI-SERVER met (secties uit) tarball samengesteld met script PI- SYSBACK
# ===========================================================================================
# Sysback v1.0 16 augustus 2024 Ben Makkink
# -------------------------------------------------------------------------------------------
# 1. Bestanden (tarballs) zijn opgeslagen in /store/pi-sysback
# 2. Tarballs zijn gecreeerd met path vanuit root '/'
# 3. !!! Dus extract (restore) uitvoeren vanuit root '/' !!!
#
# Hier een voorbeeld met een backup met naam: 20151025-pi-sysback.tar.gz
# Gebruik volgende commando's:
# #cd /                                                         (extract tarball vanuit root)
# #ls /store/pi-sysback                                   (haal lijst met bestaande tarballs)
# #tar -tzvf /store/pi-sysback/20151025-pi-sysback.tar.gz(lijst van bestanden in een tarball)
# voorbeeld: usr
#            usr/lib64/security/
#            usr/lib64/security/pam_chroot.so
#            etc.
# #tar -tzvf /store/pi-sysback/20151025-pi-sysback.tar.gz usr/local/bin
# toont lijst van bestanden onder usr/local/bin in de tarball
#
# #tar -xzvf /store/pi-sysback/20151025-pi-sysback.tar.gz
#                              (restore complete '/' directory en subdirectories)
# #tar -xzvf /store/pi-sysback/20151025-pi-sysback.tar.gz usr
#                              (restore alleen subdir 'usr' en al z'n subdirectories)
# #tar -xzvf /store/pi-sysback/20151025-pi-sysback.tar.gz usr/local/bin/sysback
#                              (restore alleen bestand 'sysback')
#
# Als bijvoorbeeld met het laatste voorbeeld de fout gemaakt wordt dit commando niet vanuit
# / (root) te geven maar vanuit /home dan belandt het uitgepakte bestand op
# /home/usr/local/bin/sysback. Dus een hele nieuwe reeks met (sub)dirs op de verkeerde plaats.
#
# Opties van commando tar:
# -c creeer,  -t list,  -x extract, -z zip/unzip naar/van gz,  -v verbose
# -f onmiddellijk gevolgt door de tarball naam.
# ===========================================================================================

