# **********************************************************************************************************
# * UPGRADE script Raspberry PI4 Backupserver          Ben Makkink 13-apr-2025                             *
# * De backupserver voert security updates automatisch uit middels de package 'unattendended upgrasdes     *
# * Voor de reguliere upgrades van geïnstalleerde packages en dependencies geven we de voorkeur aan het op *
# * de hand upgraden om te voorkomen dat mogelijkse bugs de goede werking verstoren.                       *
# * Dit script voert de nodige commando's uit voor een upgrade op de hand                                  *
# **********************************************************************************************************
#!/bin/bash
clear;
# Geef de MOTD weer met het aantal beschikbare upgrades
run-parts  /etc/update-motd.d

# Tel aantal beschikbare updates en exit als er geen upgrades zijn
apt-get update --quiet=2
pkgCount="$(apt-get -s dist-upgrade | grep -Po '^\d+(?= upgraded)')"
if [ $pkgCount -lt 1 ]; then
  echo -n "Er zijn geen upgrades beschikbaar Druk <Enter> om door te gaan."; read foo ;
  exit;
fi

# Check of SSD al is gekoppeld
echo;
if mountpoint -q "/store"; then
  echo "   SSD is gemount";
  echo "  ----------------";
else
  echo "   Mounting SSD....";
  mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store;
  wait;
  echo;
  echo "  Start Upgrade";
  echo "  -------------";
fi

# Set VARIABLES
# Geef hier aan waar al gemaakte backups opgeslagen zijn
sysbackdir="/store/pi-sysback/";
# Datum meest recente systeembackup
fn=$(ls -t $sysbackdir | head -n1);
laatste=$(date -r $sysbackdir$fn +'%d-%m-%Y');

# Eerst een systeembackup maken?
echo;
echo "   De backup van het Ubuntu-OS wordt niet automatisch gemaakt.";
echo "   De handmatige backup was de laatste keer op "$laatste;
echo -n "   Toch een extra backup naar "$sysbackdir" maken? Y/N: ";
read yn;
case $yn in
     [Yy])
       # Maak systeembackup
       echo;
       echo "   Systeembackup wordt nu gemaakt";
       pi-sysback;;
esac
echo;

# Start Upgrading
echo "   Er zijn" $pkgCount "upgrades beschikbaar.";
echo;
# Geef lijst van upgrades
echo "   Volgende upgrades voor geïnstalleerde packages zijn beschikbaar:";
apt list --upgradable;
echo;
# Upgrade
yn="n";
echo;
echo -n "   Nu alle beschikbare upgrades uitvoeren? Y/N: ";
read yn;

case $yn in
     [Nn])
       echo;
       echo "   Upgrade gecanceld.";
       echo "   Individuele package upgrades kunnen uitgevoerd worden met commando:";
       echo "   # apt install <pakketnaam>";
       echo;
       echo -n "   Druk <Enter> om door te gaan."; read foo;
       echo;;
     [Yy])
       echo;
       apt upgrade;
       # Remove Dependency Packages That Are No Longer Needed
       echo;
       echo "   Verwijder dependencies die niet meer nodig zijn.";	
       apt --purge autoremove;
       echo;
       echo "   Clean APT Cache";
       # Clean apt Cache
       apt clean;
       echo;
       # Update Static Motd - Dynamic Folder File /etc/update-motd.d/20-update
       echo "   Update Static Motd - Dynamic Folder File /etc/update-motd.d/20-update";
       run-parts /etc/update-motd-static.d;
       echo;
       echo -n "   Upgrades zijn uitgevoerd en counter is gereset. Druk <Enter> om door te gaan."; read foo;
       echo;
       echo;;
esac

# 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;
else
        # 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";
        echo "   REBOOT server na upgrade!"; 
        sleep 5;
fi

utils;
