#!/bin/bash
# Script zur Registrierung einer Datensicherungsfestplatte für das Sicherungssystem invis-rdbu.
# Version 0.18
# (c) 2009-2017 Stefan Schäfer invis-server.org
# License: GPLv3
# Questions: stefan@invis-server.org
# Have a look at wiki.invis-server.org and progress.opensuse.org/projects/invis-server

# Arbeitsverzeichnis
workingdir="/var/lib/invis-rdbu"

# Funktion - Konfigurationsparameter tauschen
changevalues() {
    # Arg1 = Pfad, Arg2 = Datei, Arg3 = sed String
    echo $3 >> /root/test.txt
    cat $1/$2|sed -e "s%$3%g" > $1/$2.new
    mv $1/$2.new $1/$2
}

if [[ -z $1 ]]; then
    # Festplatte und Partition der Dasi-Festplatte ermitteln
    hdisk=`journalctl --no-pager --system --since -3h |grep "sd[a-z]: sd[a-z][1-9]"|tail -n1|tr -s " "|cut -d " " -f6|tr -d ":"`
    partition=`journalctl --no-pager --system --since -1h |grep "sd[a-z]: sd[a-z][1-9]"|tail -n1|tr -s " "|cut -d " " -f7`
else
    # Testen, ob der angegebene Partitionsname 4 Zeichen lang ist
    if (( ${#1} == 4 )); then
	partition=$1
	hdisk=`echo $1|tr -d [:digit:]`
    else
	echo "Fehlerhafte Partitionsbezeichnung"
	exit 1
    fi
fi

if [[ -z $partition ]]; then
    echo "Es wurde keine Datensicherungsfestplatte gefunden, die innerhalb der letzten 3 Stunden mit dem Server verbunden wurde."
    exit 1
else
    echo "Gefundene Festplatte: $hdisk"
    echo "Gefundene Partition: $partition"
    sleep 3
fi

if [[ -n $partition ]]; then
    ismounted2=`cat /etc/mtab|grep "/dev/$partition"`
else
    ismounted2=""
fi

echo $ismounted2

if [[ -n $ismounted2 ]];then
    echo "Ihre Festplatte ist derzeit eingehängt, das Script wird abgebrochen. Wenn Sie sicher sind, dass das nicht der Fall ist, 
schalten Sie sie einfach noch einmal aus und wieder ein. Starten Sie dann das install-Script erneut."
    exit
fi

#Datensicherungspartition einhängen
mount /dev/$partition /mnt/udevsync
mountok=$?

if [[ $mountok == 0 ]]; then
    # wenn nicht vorhanden backup-Verzeichnis anlegen
    if [[ ! -d /mnt/udevsync/rdbackups ]]; then
	mkdir /mnt/udevsync/rdbackups
    fi

    # wenn nicht vorhanden backup-Verzeichnis anlegen
    if [[ ! -d /mnt/udevsync/bin ]]; then
	mkdir /mnt/udevsync/bin
    fi

    # DasiScript auf die Platte kopieren
    cp $workingdir/rdbackup /mnt/udevsync/bin/rdbackup
    chmod ug+x /mnt/udevsync/bin/rdbackup
    chown root.root /mnt/udevsync/bin/rdbackup

    #echo $hdisk,$partition
    # UDEV-Identifikationsparameter ermitteln
    partsize=`udevadm info -a -p /sys/block/$hdisk/$partition|grep ATTR{size}|cut -d "=" -f 3|tr -d '"'`
    contserial=`udevadm info -a -p /sys/block/$hdisk/$partition|grep ATTRS{serial}|head -n1|cut -d "=" -f 3|tr -d '"'`

    echo "Gefundenes Merkmal Partitionsgröße: $partsize"
    echo "Gefundenes Merkmal Seriennummer: $contserial"

    # UDEV-Regel vorbereiten
    file="80-backupdisk.rules"
    cp $workingdir/$file.template $workingdir/$file

    # Werte ändern 
    strings="serialnr%$contserial"
    changevalues $workingdir $file "$strings"

    strings="partsize%$partsize"
    changevalues $workingdir $file "$strings"

    if [[ ! -f /etc/udev/rules.d/$file ]]; then
	cp $workingdir/$file /etc/udev/rules.d/
    else
	if [[ ! `cat $workingdir/$file` == `cat /etc/udev/rules.d/$file` ]]; then
	    cat $workingdir/$file >> /etc/udev/rules.d/$file
	fi
    fi

    rm -f $workingdir/$file

    # Laufwerk aushängen
    umount /dev/$partition

    echo "Datensicherungsplatte hinzugefügt"

else
    echo "Die Partition der Sicherungsfestplatte ist nicht formatiert.\nProgramm wird abgebrochen"
    exit 1
fi

