]> andersk Git - moira.git/blobdiff - gen/nfs.sh
fixed lint errors
[moira.git] / gen / nfs.sh
index 02a79474c02c8df4ba7937eec78432df93218793..9c4c11706aeebddce363c8b98a2e5bc4909ad8d7 100644 (file)
@@ -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
This page took 0.035673 seconds and 4 git commands to generate.