#!/bin/bash
# Dieses Script wird ausgeführt, wenn ein System nach einem Absturz
# oder Erwerb eines neuen Rechners wieder hergestellt werden soll.
# Falls das System mit neuer Platte oder Hardeware wieder hergestellt werden 
# muss, ist auf der neen Maschine oder Platte zunächst ein Grundsystem 
# am besten der selben Distribution und der selben Version aufzusetzen.
# Anschließend ist /etc/fstab einzurichten, so dass die Rettungsdisk
# dort in /mnt/backup eingehängt wird.
# Von dort sind dann die Rettungsprogramme 
# /mnt/backup/usr/local/bin/recovery
# /mnt/backup/usr/local/bin/service_stop
# /mnt/backup/usr/local/bin/service_start
# und der Inhalt des Vezeichnisses /mnt/backup/usr/local/etc/backup
# wieder nach /usr/local/bin bzw. /usr/local/etc zurückzuholen.


# Ins aktuelle Verzeichnis wechseln
cd /usr/local/bin

# Hierbei wird das Medium eingehängt, auf dem sich das Backup befindet.
# In unserem Fall handelt es sich um eine externe USB-Platte
# Damit der Mount-Befehl funktioniert, sollte die die USB-Platte in die fstab
# eingetragen werden.

mount /mnt/backup

# Dies ist nur eine Prüfung, die sicherstellen soll, dass auf dem einhängten
# Medium tatsächlich ein Betriebssystem ist.
# Sonst würde rsync mit --delete nämlich alles auf dem Rechner löschen
if [ -d /mnt/backup/boot ]; then

	# Beim Recovery sollten einige Dienste vorher beendet werden.
	# service_stop ist ein eigenes Script, dass diese Dienste vorher stoppt.
	# z.B. MySQL oder OpenLDAP
    service_stop
    
    # Hier der eigentliche Wiederhestellungsprozess via rsync
    rsync -av --delete --exclude-from=/usr/local/etc/backup/exclude /mnt/backup/ /
    
    # Eigentlich kann man auf den Neustart der Dienste verzichten, da anschließend
    # das System sowieso neu gestartet werden soll. Aber es gibt ein gutes Gefühl,
    # wenn man sieht, dass die Dienste hinterher wieder ordentlich anlaufen.
    service_start

    # Backup-Status wieder zurück setzen, da sonst keine weiteren Backups mehr möglich wären
    echo 0 > /mnt/backup/var/local/startup_time
else
    echo "Backup ist nicht eingehängt."
fi

# Backup-medium noch aushängen
umount /mnt/backup

# Anschließend sollte der Rechner neu gestartet werden, damit alle Änderungen 
# am Kernel wirksam werden. Dies wird aber nicht mit dem Script gemacht, 
# sondern sollte vom Administrater von Hand durchgeführt werden.
echo "Das System ist wieder hergestellt. Bitte den Rechner sofort neu starten"

