2 # This script performs nfs updates on servers.
6 # The following exit codes are defined and MUST BE CONSISTENT with the
7 # MR error codes the library uses:
8 set MR_NOCRED = 47836470
9 set MR_MKCRED = 47836474
10 set MR_TARERR = 47836476
12 set path=(/etc /bin /usr/bin /usr/etc /usr/athena/etc)
15 # The file containg the information for the update
16 set TARFILE=/tmp/nfs.out
17 # The directory into which we will empty the tarfile
18 set SRC_DIR=/tmp/nfs.dir
20 # Alert if the tarfile does not exist
21 if (! -r $TARFILE) then
25 # Create a fresh source directory
30 # Note that since MR is going to be exported, assuming .MIT.EDU is
31 # incorrect. For now however, it is probably not worth the effort
32 # to canonicalize the hostname, especially with the upcoming update
34 set uchost=`hostname | tr '[a-z]' '[A-Z]'`.MIT.EDU
38 # Just extract everything since some of what we need exists as
39 # hardlinks and tar doesn't deal well with extracting them in isolation.
41 if ($status) exit $MR_TARERR
43 foreach type (dirs quotas)
44 echo "Installing ${type}:"
45 foreach i ( ${uchost}*.${type} )
47 # Convert the from the filename HOST.@dev@device.type to /dev/device
48 set dev=`echo $i | sed "s,.${type},," | sed "s,${uchost}.,," | sed "s,@,/,g"`
50 ./install_${type} $dev < $i
51 if ($status) exit $status
52 if ($type == quotas) ./zero_quotas $dev < $i
53 if ($status) exit $status
54 # save the files used here for later debugging
60 # build new credentials files.
61 rm -f /usr/etc/credentials.new
62 cp ${uchost}.cred /usr/etc/credentials.new
63 if ($status) exit $MR_NOCRED
65 # After this point, if /tmp gets cleared out by reactivate (which
66 # happens on a combined server/workstation) we don't care.
68 mkcred /usr/etc/credentials.new
69 if ($status) exit $MR_MKCRED
71 # Try to install the files
72 foreach e ( "" .dir .pag)
73 mv -f /usr/etc/credentials.new$e /usr/etc/credentials$e
76 # If any of them didn't get installed, fail
77 foreach e ( "" .dir .pag)
78 if (! -e /usr/etc/credentials$e) exit $MR_NOCRED
84 if [ -f $TARFILE ] ; then rm -f $TARFILE ; fi
85 if [ -d $SRC_DIR ] ; then cd $SRC_DIR/.. ; rm -rf $SRC_DIR ; fi
86 if [ -f $0 ] ; then rm -r $0 ; fi