====== 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