X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/51bf07bbd57944b0983e4758552a40e8315ba328..94fdc64f0f172649d4a3895c6d53db0ddafb1c3f:/gen/nfs.sh diff --git a/gen/nfs.sh b/gen/nfs.sh index 02a79474..9c4c1170 100644 --- a/gen/nfs.sh +++ b/gen/nfs.sh @@ -1,39 +1,87 @@ #!/bin/csh -f -set path=(/bin /usr/bin /etc /usr/etc ) -set TARFILE=/tmp/nfs -set TMPDIR=/tmp/nfs.dir - -if ( ! -d $TMPDIR ) then - rm -f $TMPDIR - mkdir $TMPDIR - chmod 755 $TMPDIR +# This script performs nfs updates on servers. +# +# $Source$ +echo '$Header$' + +# The following exit codes are defined and MUST BE CONSISTENT with the +# SMS error codes the library uses: +set SMS_NOCRED = 47836470 +set SMS_MKCRED = 47836474 +set SMS_TARERR = 47836476 + +set path=(/etc /bin /usr/bin /usr/etc) + +# The file containg the information for the update +set TARFILE=/tmp/nfs.out +# The directory into which we will empty the tarfile +set SRC_DIR=/tmp/nfs.dir + +# Alert if the tarfile does not exist +if (! -r $TARFILE) then + exit $SMS_TARERR endif -cd $TMPDIR -tar xf $TARFILE -if ($status) exit 1 +# Create a fresh source directory +rm -rf $SRC_DIR +mkdir $SRC_DIR +chmod 755 $SRC_DIR -set uchost=`hostname|tr a-z A-Z`.MIT.EDU -set uchostrev=`echo $uchost | rev` +# Note that since SMS is going to be exported, assuming .MIT.EDU is +# incorrect. For now however, it is probably not worth the effort +# to canonicalize the hostname, especially with the upcoming update +# protocol redesign +set uchost=`/bin/hostname | tr a-z A-Z`.MIT.EDU -foreach i ( ${uchost}* ) - set t1=`echo $i | rev` - set dev=`basename $t1 :$uchostrev | rev | sed 's;@;/;g'` +cd $SRC_DIR - echo ${uchost}:$dev +# Only files starting with $uchost, install_, and list- are needed. +# The files starting with list- are needed because the credentials +# files are hard links to them. Tar will fail if they are not extracted. +foreach file (`/bin/tar tf $TARFILE | awk '{print $1}'`) + if (($file =~ ./${uchost}*) || \ + ($file =~ ./install_*) || \ + ($file =~ ./list-*)) then + tar xf $TARFILE $file + if ($status) exit $SMS_TARERR + endif +end - ./install_fs $dev < $i +foreach type (dirs quotas) + echo "Installing ${type}:" + foreach i ( ${uchost}*.${type} ) + # Convert the from the filename HOST.@dev@device.type to /dev/device + set dev=`echo $i | sed "s,.${type},," | sed "s,${uchost}.,," | sed "s,@,/,g"` + echo ${uchost}:$dev + ./install_${type} $dev < $i + if ($status) exit $status + end end -# build new credentials file. +# build new credentials files. rm -f /usr/etc/credentials.new -cp credentials /usr/etc/credentials.new -if ($status) exit 1 +cp ${uchost}.cred /usr/etc/credentials.new +if ($status) exit $SMS_NOCRED /usr/etc/mkcred /usr/etc/credentials.new -if ($status) exit 1 +if ($status) exit $SMS_MKCRED +# Try to install the files foreach e ( "" .dir .pag) - mv /usr/etc/credentials.new$e /usr/etc/credentials$e + mv -f /usr/etc/credentials.new$e /usr/etc/credentials$e end +# If any of them didn't get installed, fail +foreach e ( "" .dir .pag) + if (! -e /usr/etc/credentials$e) exit $SMS_NOCRED +end + + + +# cleanup +rm -f $TARFILE +cd $SRC_DIR/.. +rm -rf $SRC_DIR +rm $0 + +exit 0