isohome

Isohome is a simple script that tries to make an image of your CS home directory that is suitable for burning onto a CD or DVD.

It will confirm that you are running it from the machine where your home directory is actually a local disk. If not it will tell you which machine you need to run the script from.

So, bring a blank CD into the lab and give it a go.

For the curious, here is the script.

-Greg

#!/usr/bin/bash
#
# isohome: a script to make an iso image of a users home
# directory in a users home directory by Greg Priest-Dorman
#
# $Id: isohome,v 1.7 2004/05/15 06:42:11 priestdo Exp $
#
IFS="
"
ECHO=/usr/bin/echo
MKISOFS=/bin/mkisofs
BKUPNAME=$HOME/$USER-home-`/usr/bin/date +%Y-%m-%d`.iso
DU=/usr/local/bin/du
MAIL=/usr/ucb/mail
DF=/usr/local/bin/df
AWK=/usr/local/bin/awk
#
# Get the name of the system that the users home directory lives on from the nis auto.home map
#
HomeHost=`ypcat -k auto.home|grep $USER|$AWK '{ print $2 }'|cut -f1 -d:`
#
if [ $HOST == $HomeHost ] ; then
    $ECHO "\n Checking available space...\n"
    HomeUsed=`$DU -sk $HOME |$AWK '{ print int(($1  / 1024) + .5)}'`
    HomeFree=`$DF -k|grep $HOME | $AWK '{ print int(($3 / 1024) + -99.5)}'`
    if [ ${HomeUsed} -lt ${HomeFree} ] ; then
	$ECHO "\n There is enough free space to create the backup image.\n"
	MEDIA=""
	if [ ${HomeUsed} -lt 650 ] ; then 
	    $ECHO " Your backup image will fit on a single CD\n"
	    MEDIA="CD"
	else 
	    if  [ ${HomeUsed} -lt 4000 ] ; then
		$ECHO " Your backup image may not fit on a single CD, but will fit on a DVD.\n"
		MEDIA="DVD"
	    fi
	fi
	if [ ${MEDIA} != "" ] ; then 
	    $ECHO " It will use around $HomeUsed Meg.\n"
	    $ECHO " If you choose to proceed an iso9660 image of your home directory"
	    $ECHO " will be created and a log message will be sent to Greg.  Once"
	    $ECHO " complete you will have to copy the backup image to a machine"
	    $ECHO " that has a $MEDIA burner in order to make your $MEDIA.\n"
	    $ECHO " Please remove your image from the suns once you"
	    $ECHO " have burned your $MEDIA.  Should you forget to"
	    $ECHO " remove it, it will be removed once it is more than"
	    $ECHO " a day old.\n"
	    $ECHO " The image will skip anything ending in"
	    $ECHO ' ".iso", "~", "#" or containing the word'
	    $ECHO ' "cache" in its name or its directory name.\n'
	    $ECHO "Do you wish to proceed? (y/n):"
	    read YN
	    case $YN in
		y|Y|yes|Yes|YES|yep)
		$ECHO "\nHere we go...\n"
		for FOUND in `find $HOME -print |egrep  'cache|.iso'` 
		  do
		  $ECHO "Ignoring $FOUND"
		done
#
# options to mkisofs explained:
#     -J Joliet directory records in addition to iso9660 file names
#     -x exclude pattern(seems to like '*' better than -m)
#     -m exclude glob 
#     -r generates additional Rock Ridge protocol records with intelligent uid and gid
#     -T Generate a TRANS.TBL in each directory for use in non-Rock Ridge system
#     -o output file name
#
#  put all togethe and you get a cd that should be readable on a very wide varity of systems
#  HOWEVER,  consider changing the "-r" to "-R" which will not mess with the uid 
#  and gid - see man page
#

		$MKISOFS  -J -x '*cache*' -m '*.iso' -m '~' -m '#' -r -T -o  $BKUPNAME  $HOME && $ECHO " $0 run as $USER\n free before = ($HomeFree +100)Meg\n `$DU -sh $BKUPNAME`" |$MAIL -s "$0 run as $USER" priestdo@cs.vassar.edu  && $ECHO "* * * $BKUPNAME created * * *"
       		;;
		*)
		$ECHO "\n If thats the way you feel about it...\n ... script aborting"
		;;
	    esac
	fi
    else
	$ECHO "\n There is not enough free space in your home directory"
	$ECHO " to do the backup.  Please ask Greg for assistance."
	$ECHO "... script aborting\n"
    fi
#
else
    $ECHO "\n You need to run $0 from ${HomeHost}. "
    $ECHO " When this script exits issue the command: \n"
    $ECHO "   ssh ${USER}@${HomeHost}\n"
    $ECHO "... script aborting\n"
fi