#! /bin/bash
# aktualisiert den Reserverechner mit Hilfe der Daten des Backupservers
# für den c't/ODS-Schulserver
# Nutzung gemäss der GNU Public License

debug=0
test $debug -eq 1 && set -x
export SHELLOPTS

Reserve=sda
# da liegt das zu aktualisierende System; muss kontrolliert werden
Wurzel=1
# einfach definiert (z.B. sda1)
Quelle=/srv/Back/Arktur/daily.0
# muss kontrolliert werden

test -d $Quelle || {
	echo kann das Quellverzeichnis $Quelle nicht finden
	exit 1
	}

ResEx=/etc/rsnapshot.d/Reserve
test -f $ResEx || {
	echo kann die Exclude-Datei $ResEx nicht finden
	exit 1
	}

Ziel=/mnt/Reserve
mkdir -p $Ziel

rdev | grep -q $Reserve && {
	echo falsche Platte erwischt
	exit 1
	}

grep -w -q $Reserve /proc/partitions || {
	echo kann die Platte /dev/$Reserve nicht finden
	exit 1
	}

WurzelEx=$(cd $Quelle; ls -d * | tr '\n' ' ')
for Verz in $WurzelEx
    do
	echo $Verz"/*"
    done > /tmp/ResExclude

mount | grep -q -w "$Ziel" || mount /dev/$Reserve$Wurzel $Ziel
mount | grep -q -w "$Ziel" || {
	echo kann die Partition $Reserve$Wurzel nicht mounten.
	exit 1
	}

test $debug -eq 1 && { 
    mount; read -p "Pause in $LINENO " dummy
    }

test -f $Ziel/etc/fstab -a -s $Ziel/etc/fstab || {
	echo kann "/etc/fstab" nicht finden
	exit 1
	}

while read Device Mountp Typ Options Rest
  do
    test $debug -eq 1 && echo "$Device $Mountp"
    echo "$Mountp" | grep -q ^/ || continue 
    case $Device in
      LABEL=*)
      Device=$(findfs $Device)
      ;;
    esac
    test "$Device" || continue
    case $Device in
	/dev/*)
	    case "$Typ" in
		ext2|ext3|ext4|reiserfs)
		echo "$Options"- | grep -q noauto || {
		mkdir -p ${Ziel}$Mountp
		mount | grep -q -w $Device || mount $Device ${Ziel}$Mountp
		mount | grep -q -w $Device || {
			echo kann $Device nicht mounten
			exit 1
			}
		   }
		;;
	    esac
	;;
    esac
  done < $Ziel/etc/fstab

# alles gemountet

test $debug -eq 1 && { 
    mount; read -p "Pause in $LINENO " dummy
    }

# rsync
Option="-ax"
test $debug -eq 1 && Option="-nvax"
# Option "-n": zeigt nur, was gemacht wuerde
# Option "-v": geschwaetzig

for Verz in $WurzelEx
  do
	case $Verz in
	*wurzel|Wurzel)
	cd $Quelle/$Verz
	rsync $Option --delete --numeric-ids --relative  \
	 --exclude-from=$ResEx --exclude-from=/tmp/ResExclude . $Ziel
	;;
	
	*)
	cd $Quelle/$Verz
	rsync $Option --delete --numeric-ids --relative  \
	 --exclude-from=$ResEx . $Ziel/$Verz
	;;
	esac
  done

rm -rf $Ziel/var/lock/samba/*
# damit eine aktuelle Datenbank aufgebaut wird

# lilo -t -r $Ziel >/dev/null 2>&1 && lilo -r $Ziel

# alles unmounten
while read Device Rest
  do
	case "$Device" in
	/dev/*)
	umount $Device
	;;
	esac 

  done <<EOF
$(mount | tac | grep ${Ziel})
EOF

hdparm -y /dev/$Reserve

# ====================================================================
# $Id: reserve.neu,v 1.2 2011-07-31 15:58:34+02 HHullen Exp $
# $Log: reserve.neu,v $
# Revision 1.2  2011-07-31 15:58:34+02  HHullen
# Kurzversion HWS
#
# Revision 1.3  2011-07-12 22:00:21+02  HHullen
# lauffaehig 12. Juli 2011
#
# Revision 1.2  2011-07-11 12:54:16+02  HHullen
# angepasst an HWS-Rechner
#
# Revision 1.1  2011-07-11 11:19:43+02  HHullen
# Start
#
# Revision 1.5  2006-08-23 10:29:35+02  HHullen
# Samba-Datenbank wird gelöscht
#
# Revision 1.4  2006-08-21 18:19:24+02  HHullen
# lauffähig
#
# Revision 1.3  2006-08-20 17:30:50+02  HHullen
# rsync eingebaut
#
# Revision 1.2  2006-08-20 16:39:50+02  HHullen
# erste Korrekturen
#
# Revision 1.1  2006-08-20 16:25:54+02  HHullen
# Start
#

 