#!/bin/bash
#
# Versione 1.2
#

# Nocona
SCR_STR="ST3250410AS"
SCR_STR_TOTAL="    ATTRS{model}==\"ST3250410AS     \""


SRC_ROOT_PARTITION="2"
SRC_BOOT_PARTITION="1"


# USB 2"
#DST_STR="MHV2100AH"
#DST_STR_TOTAL="    ATTRS{model}==\"MHV2100AH       \""

# sdb
DST_STR="ST3500320AS"
DST_STR_TOTAL="    ATTRS{model}==\"ST3500320AS     \""


DST_PARTITION="1"

DestDir="/backupvarie/stage4_uzzmaster"








NETWORK_INTERFACE="eth0"
NETWORK_IP="192.168.75.222 netmask 255.255.255.0"
NETWORK_ROUTE="192.168.75.254"
NETWORK_DNS="192.168.75.254"






PORTAGE_SITE="http://gentoo.osuosl.org"


MACHINE="`uname -m`"
Date="`date +%Y%m%d-%H%M`"


if [ -f /sbin/functions.sh ]
then
  source /sbin/functions.sh
else
	alias ebegin='echo'
	alias einfo='echo'
	alias ewarn='echo'
	alias eend='echo'
	ln -s /bin/echo /bin/ebegin
	ln -s /bin/echo /bin/einfo
	ln -s /bin/echo /bin/ewarn
	ln -s /bin/echo /bin/eend
fi

function Smonta() {
	sync
	sleep 3
	sync
	sleep 3
	MOUNTPOINT="`mount | grep /tmp/tmpstage4/boot | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		umount  /tmp/tmpstage4/boot
		sync
	fi
	MOUNTPOINT="`mount | grep /tmp/tmpstage4/boot | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		sync
		sleep 3
		umount  /tmp/tmpstage4/boot
	fi
 

	MOUNTPOINT="`mount | grep /tmp/tmpstage4 | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		umount  /tmp/tmpstage4
		sync
	fi
	MOUNTPOINT="`mount | grep /tmp/tmpstage4 | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		sync
		sleep 3
		umount  /tmp/tmpstage4 
	fi

	MOUNTPOINT="`mount | grep /tmp/destdir | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		umount  /tmp/destdir
		sync
	fi

	MOUNTPOINT="`mount | grep /tmp/destdir | awk -F " " '{ print $3; }'`"
	if [ "$MOUNTPOINT" ] ; then
		sync
		sleep 3
		umount  /tmp/destdir 
	fi

}


function Search_Device() {
	local str=${1}
	local str_total=${2}
	local str_device=${3}
	local X
	for SRC_DEV in a b c d e f g h i l m n o none; do
		X="`/usr/bin/udevinfo -a -p /sys/block/sd$SRC_DEV | egrep "${str}" `"
#	        echo "\"$X\""
		if [ "$X" = "${str_total}" ] ; then
			break
		fi
	done
	if [ $SRC_DEV = "none" ]; then 
		eerror "${str_device} Device not found"
		Smonta
	else 
		SRC_DEV_NOD="/dev/sd$SRC_DEV"
		einfo "${str_device} Device is $SRC_DEV_NOD"
	fi
}






Search_Device "$SCR_STR" "$SCR_STR_TOTAL" "Source Device"
B_SRC_DEV=$SRC_DEV
B_SRC_DEV_NOD=$SRC_DEV_NOD


Search_Device "$DST_STR" "$DST_STR_TOTAL" "Destination Device"
B_DST_DEV=$SRC_DEV
B_DST_DEV_NOD=$SRC_DEV_NOD

if [ ! -d "/tmp/destdir" ]; then
	einfo "make /tmp/destdir"
	mkdir -p /tmp/destdir
fi
if [ ! -d "/tmp/tmpstage4" ]; then
	einfo "make /tmp/tmpstage4"
	mkdir -p /tmp/tmpstage4
fi


DST_DEV_MOUNTPOINT="`mount | grep $B_DST_DEV_NOD$DST_PARTITION | awk -F " " '{ print $3; }'`"
if [ ! "$DST_DEV_MOUNTPOINT" ] ; then
	einfo "mount destination"
	mount "$B_DST_DEV_NOD$DST_PARTITION" /tmp/destdir
else 
	DST_DEV_MOUNTPOINT_2="`mount | grep /tmp/destdir | awk -F " " '{ print $3; }'`"
	if [ ! "$DST_DEV_MOUNTPOINT_2" ] ; then
		ewarn "Use mount --bind for mount destination"
		mount --bind "$DST_DEV_MOUNTPOINT" /tmp/destdir
	else
		ewarn "destination just mounted"
	fi
fi

if [ ! -d "/tmp/destdir/$DestDir" ]; then
	einfo "make /tmp/destdir$DestDir"
	mkdir -p "/tmp/destdir$DestDir"
fi


SRC_DEV_MOUNTPOINT="`mount | grep $B_SRC_DEV_NOD$SRC_ROOT_PARTITION | awk -F " " '{ print $3; }'`"
if [ "$SRC_DEV_MOUNTPOINT" ]; then
	eerror "Source just mounted. Stop."
	Smonta
else
	einfo "Root partition not mounted, mounting it"
	mount "$B_SRC_DEV_NOD$SRC_ROOT_PARTITION" /tmp/tmpstage4
fi
if [ ! -d "/tmp/tmpstage4/boot" ]; then
	eerror "Root Partition Invalid"
	Smonta
fi
mount "$B_SRC_DEV_NOD$SRC_BOOT_PARTITION" /tmp/tmpstage4/boot

DestDir="/tmp/destdir"$DestDir
if [ ! -d "$DestDir" ]; then
	ewarn "Creating destination directory"
	mkdir -p $DestDir
fi


BackupFile="$DestDir/stage4-$MACHINE-$Date.tar"


ebegin "Setup network"
	ifconfig $NETWORK_INTERFACE $NETWORK_IP
	route add default gw $NETWORK_ROUTE
	echo "nameserver $NETWORK_DNS" > /etc/resolv.conf
eend



ebegin "Cleannig log"
	rm -r /tmp/tmpstage4/var/log/named/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/apache2/*/*/*.log > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/apache2/*/*/*.gz > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/apache2/*_log > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/apache2/*.gz > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/*.gz > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/*.old > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/*.[1-9] > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/samba/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/qmail-backup/*/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/clamav/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/cups/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/dcc/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/gdm/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/mysql/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/news/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/sandbox/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/vmware/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/qmail/*/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/Xorg* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/privoxy/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/tor/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/mail/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/zoneminder/* > /dev/null 2>&1
	rm -r /tmp/tmpstage4/var/log/archivio-qmail > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/log/HOSTS/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/log/portage/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/cache/samba > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/cache/fontconfig/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/tmp/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/tmp/.* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/tmp/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/tmp/.* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/cache/samba/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/cache/edb/* > /dev/null 2>&1
	rm -rf /tmp/tmpstage4/var/run/vmware/* > /dev/null 2>&1
        rm -rf /tmp/tmpstage4/var/lib/mysql/mysqld-bin*
	LOGFILE="`ls /tmp/tmpstage4/var/log`"
	for log in $LOGFILE; do
		if [ -f "/tmp/tmpstage4/var/log/$log" ]; then
			> /tmp/tmpstage4/var/log/$log > /dev/null 2>&1
		fi
	done
	mkdir /tmp/tmpstage4/var/tmp/portage
eend

ebegin "Cleaning portage tree"
  rm -rf /tmp/tmpstage4/usr/portage > /dev/null 2>&1
eend

ebegin "Cleanning .old , *~ , socket files"
	LISTA_FILES_TILDE=`find /tmp/tmpstage4 -name "*~" `
	LISTA_FILES_OLD=`find /tmp/tmpstage4 -name "*.old" `
	LISTA_FILES_SOCKET=`find /tmp/tmpstage4 -type s `
	LISTA_FILES_VARRUN=`find /tmp/tmpstage4/var/run -type f `

	for i in $LISTA_FILES_TILDE; do
		rm -fr $i;
	done
	for i in $LISTA_FILES_OLD; do
		rm -fr $i;
	done
	for i in $LISTA_FILES_SOCKET; do
		rm -fr $i;
	done
	for i in $LISTA_FILES_VARRUN; do
		rm -fr $i;
	done
eend

ebegin "tar"
	TAR_BEGIN_TIME=`date +%s`
	tar --one-file-system -cpWf $BackupFile  --directory /tmp/tmpstage4  . ./boot 
	TAR_END_TIME=`date +%s`
	TAR_TIME=$TAR_END_TIME-$TAR_BEGIN_TIME
	echo $TAR_TIME > tar_time.txt
eend

ebegin "md5sum"
	md5sum "$BackupFile" > "$BackupFile.md5"
eend

#ebegin "bzip2"
#	bzip2 --best "$BackupFile"
#eend

#ebegin "md5sum"
#	md5sum "$BackupFile.bz2" > "$BackupFile.bz2.md5"
#eend


ebegin "Downloading new portage tree"
	OLDDIR=$PWD
	cd "$DestDir"
	PORTAGE_FILE="$DestDir/portage-latest.tar.bz2"
	if [ -f "$PORTAGE_FILE" ]; then
		mv "$PORTAGE_FILE" "$PORTAGE_FILE.old"
	fi
	wget $PORTAGE_SITE/snapshots/portage-latest.tar.bz2
	cd $OLDDIR
eend

ebegin "Restoring portage tree in source"
	cd /tmp/tmpstage4/usr
	tar jxpf $PORTAGE_FILE
	mkdir -p /tmp/tmpstage4/usr/portage/distfiles
	cd -
eend




Smonta
Smonta
