home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk1.iso
/
altsrc
/
articles
/
10688
< prev
next >
Wrap
Text File
|
1994-06-19
|
92KB
|
5,339 lines
Newsgroups: alt.sources
Path: wupost!psuvax1!uwm.edu!spool.mu.edu!agate!ihnp4.ucsd.edu!pacbell.com!rtech!ingres!rca
From: rca@Ingres.COM (Bob Arnold)
Subject: saenv_alldisks OS research / backup tools (Alpha Release) Part 02/06
Message-ID: <1994Jun17.235120.3413@pony.Ingres.COM>
Lines: 5329
Organization: Ingres Corporation, A subsidiary of The ASK Group, Inc.
Date: 17 Jun 94 23:51:20 GMT
Submitted-by: rca@ingres.com
Archive-name: saenv_alld/part02
---- Cut Here and feed the following to sh ----
#!/bin/sh
# this is saenv_alld.02 (part 2 of saenv_alld)
# do not concatenate these parts, unpack them in order with /bin/sh
# file dist/saenv.setup continued
#
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 2; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping dist/saenv.setup'
else
echo 'x - continuing file dist/saenv.setup'
sed 's/^X//' << 'SHAR_EOF' >> 'dist/saenv.setup' &&
X # test in $CRONCMD_B research code below
X if test ! -f $CRON_P ; then
X touch $CRON_P
X fi
X fi
Xelse
X CRON_P=$cron_d/crontab
Xfi
Xecho "CRON_P=$CRON_P # path to real crontab file" >> $tsaenv
X
X## CRONCMD_B - do we use the crontab command?
Xif ( crontab -l ) > /dev/null 2>&1 ; then
X CRONCMD_B=true
Xelse
X CRONCMD_B=false
Xfi
Xecho "CRONCMD_B=$CRONCMD_B # do we use the crontab command?" >>$tsaenv
X
X# Oddball directories for ALIAS_D and SMCF_D:
X# /usr/adm/sendmail AIX 3.x and OSF
X# /etc/sendmail NeXT
X# /usr/lib/mail Xenix
X# /etc/mail Solaris 2.x
X# /usr/ucblib SVR4 for ICL, NCR
X
X## SMCF_D - real dir for "sendmail.cf"
Xsmcf_d=`$DTGTBIN/realdir sendmail.cf /usr/lib /etc /usr/etc /usr/adm/sendmail /etc/sendmail /usr/lib/mail /etc/mail /usr/ucblib`
Xecho "SMCF_D=$smcf_d # real dir for sendmail.cf: /usr/lib (old normal), /etc and /usr/etc (now common), /usr/adm/sendmail (AIX 3.x, OSF), /etc/sendmail (NeXT), /etc/mail (Solaris 2.x), /usr/ucblib (SVR4 for ICL, NCR)" >> $tsaenv
X
X## ALIAS_D - real dir for "aliases"
Xalias_d=`$DTGTBIN/realdir aliases /usr/lib /etc /usr/etc /usr/adm/sendmail /etc/sendmail /usr/lib/mail /etc/mail /usr/ucblib`
Xecho "ALIAS_D=$alias_d # real dir for aliases file: /usr/lib (old normal), /etc and /usr/etc (now common), /usr/adm/sendmail (AIX 3.x, OSF), /etc/sendmail (NeXT), /etc/mail (Solaris 2.x), /usr/lib/mail (XENIX), /usr/ucblib (SVR4 for ICL, NCR)" >> $tsaenv
X
X## MAILER - preferred mailer
Xfor tmailer in Mail mailx mail ; do
X for i in `echo $PATH | tr : ' '` ; do
X if test -f $i/$tmailer ; then
X # the extra <SPACE><STAR> in egrep's RE is needed
X # for AIX 3.x 'ls -dF' output - this is a bug
X if ls -dF $i/$tmailer | egrep '\* *$' > /dev/null ; then
X MAILER=$tmailer
X break 2
X fi
X fi
X done
Xdone
Xecho "MAILER=$MAILER # preferred mailer (Mail > mailx >> mail)" >> $tsaenv
X
X################################################################################
X#### command arguments: df, echo, find, ls, mt, ps, ln
X#### in roughly alphabetical order by VARIABLE_NAME
X
X## $DFFSTYPE_K and $LOCFSTYPE_S - Does "df" have a "type" key, and if so
X## what is it and what is the name of the local filesystem type.
X# This code relies on:
X# a) "df > file" will produce no output if we are hung on NFS because df blocks.
X# b) under some conditions we may not get a definite answer, in which case we
X# break out of the loop and inherit $LOCFSTYPE_S and $DFFSTYPE_K from $SAENV
X#
X# need some loop to break out of - make sure we break out before final "done"
Xcd $junkdir
Xwhile : ; do
X dfsleep=5 # wait dfsleep time for df's to finish
X dfout=s.sdfout$$ # holds df output
X dfkout=s.sdfkout$$ # holds df $key output
X dfkerr=s.sdfkerr$$ # holds df $key stderr
X dfkerr=s.sdfkstat$$ # holds df $key exit status
X dfrmlist="$dfout $dfkout $dfkerr"
X for f in fstab vfstab ; do
X test -f /etc/$f && fstab=$f && break
X done
X ## no type key if fstab does not exist
X if test -z "$fstab" ; then
X DFFSTYPE_K=
X LOCFSTYPE_S=
X break
X fi
X ## no type key if $fstab does not have a filesytem type
X # egrep pattern works for both fstab and vfstab
X case $fstab in
X fstab) fstype=`egrep '/dev/[^ ]+[ ]+/[ ]' /etc/$fstab 2> /dev/null | awk '{print $3}'` ;;
X vfstab) fstype=`egrep '/dev/[^ ]+[ ]+/[ ]' /etc/$fstab 2> /dev/null | awk '{print $4}'` ;;
X esac
X if test -z "$fstype" ; then
X DFFSTYPE_K=
X LOCFSTYPE_S=
X break
X fi
X ## more research needed - try -F (SVR4) and -t (BSD) flags
X for key in -F -t ; do
X # do df's in background in case we NFS hang; sleep to give them a chance
X df > $dfout &
X df $key $fstype > $dfkout 2> $dfkerr &
X sleep $dfsleep
X ## no type key if df complains about $key
X if test -s $dfkerr ; then
X DFFSTYPE_K=
X LOCFSTYPE_S=
X continue
X fi
X ## no definitive answer if no devices in "df $key" output,
X ## since we are probably NFS hung
X if test `grep -c /dev/ $dfkout` -eq 0 ; then
X continue
X fi
X #### if we get this far, we have a definitive answer
X # if no devices in "df" output, we are probably NFS hung
X # but "df $key" might have worked
X test `grep -c /dev/ $dfout` -eq 0 && nfshang=true
X ndf=` wc -l < $dfout`
X ndfk=`wc -l < $dfkout`
X ## have type key if "df $key" worked and "df" hung on NFS
X if test $ndf -lt $ndfk -a "$nfshang" = true ; then
X DFFSTYPE_K=$key
X LOCFSTYPE_S=$fstype
X ## no type key if we found SysV df -t
X elif test $ndf -lt $ndfk ; then
X DFFSTYPE_K=
X LOCFSTYPE_S=
X ## have type key if both df's worked and "df $key" had
X ## smaller or same number of filesystems
X else
X DFFSTYPE_K=$key
X LOCFSTYPE_S=$fstype
X fi
X ## break, since we have difinitive answer
X break
X done
X ## make sure we break out regardless of results
X break
Xdone
Xrm -f $dfrmlist
Xecho "DFFSTYPE_K=$DFFSTYPE_K # df filesystem type key: '-t' (BSD and OFS); '-F' (SVR4)" >> $tsaenv
Xecho "LOCFSTYPE_S=$LOCFSTYPE_S # local filesystem type: '4.2' ConvexOS, DYNIX, SunOS; 'ffs' MIPS, Motorola, Tandem; 'ufs' SVR4 and OFS" >> $tsaenv
X
X## $ECHOPRE and $ECHOSUF - what is echo's no-newline prefix/suffix
Xif test `echo -n | wc -c` = 0 ; then
X epre="-n" # normal bsd echo prefix
X esuf= # normal bsd echo suffix
Xelse
X epre= # system V echo prefix
X esuf="\\\c" # system V echo suffix
Xfi
Xecho "ECHOPRE='$epre' # echo's no-newline prefix: '-n' (BSD), '' (SysV)" >> $tsaenv
Xecho "ECHOSUF='$esuf' # echo's no-newline suffix: '' (BSD), '\\\c' (SysV)" >> $tsaenv
X
X## FINDXDEV_S - does 'find' have the -xdev option?
X## FINDFSTYPE_S - does find have '-fstype $LOCFSTYPE_S' or '-fsonly hfs' option?
X# need to check stdout for -xdev since ConvexOS can return nonzero
X# exit status even if it works :-(
Xfor x in -xdev -mount ; do
X xdev=
X if find $junkdir $x -print 2> /dev/null | grep $junkdir > /dev/null ; then
X xdev=$x
X break
X fi
Xdone
X# exit status is sufficient for FINDFSTYPE_S; the "-fsonly hfs" is for HP-UX
Xif test -n "$LOCFSTYPE_S" ; then
X findfstype="-fstype $LOCFSTYPE_S"
Xfi
Xfor x in "$findfstype" "-fsonly hfs" ; do
X fstype=
X if test -z "$x" ; then
X continue
X fi
X if find $junkdir $x -print > /dev/null 2>&1 ; then
X fstype="$x"
X break
X fi
Xdone
Xecho "FINDXDEV_S=$xdev # find -xdev opt: '-xdev' (BSDish,SVR4), '-mount' (SVR3,Ultrix)" >> $tsaenv
Xecho "FINDFSTYPE_S='$fstype' # find: '-fstype <fstype>' (SunOS, Dynix, SVR4), '-fsonly hfs' (HP-UX)" >> $tsaenv
X
X## $LSGROUP_K - does "ls" need a "-g" key to force output of group info?
Xif test `ls -lg /etc/passwd | wc -w` -gt `ls -l /etc/passwd | wc -w` ; then
X lsgroup='g' # need -g to get group info
Xelse
X lsgroup='' # ls automatically puts out group info
Xfi
Xecho "LSGROUP_K=$lsgroup # ls group info: 'g' (BSD), '' (SysV)" >> $tsaenv
X
X## $MT_K - do we have the "mt" mag tape program, and what is its key?
X# The AIX 2.2.1 "mt" is a typesetter program!
X# AIX 2.2.1 mt -e mt: no input file
X# HP/UX mt -f mt: unknown command "-f"
X# IRIX mt -f mt [-t /dev/tapename] command [count]
X# see if we have "mt", if so check key
X# if we have the AIX 2.2.1 "mt", which is typesetter program :-(
Xif ( mt -e ) 2>&1 | egrep 'mt: no input file' > /dev/null ; then
X # bummer, so define mt as none
X mtkey=''
X# most Sys V boxes don't have an mt (AIX 3.0 has 2 spaces in 'mt: not found')
Xelif ( mt -f ) 2>&1 | egrep 'mt: *not found' > /dev/null ; then
X # couldn't find the program
X mtkey=''
X# else add key for mt command - HP/UX and IRIX use "-t", not the normal "-f"
Xelif mt -f 2>&1 | egrep 'mt: unknown command "-f"|mt \[-t /dev/tapename\]' > /dev/null ; then
X mtkey=-t # for HP and SGI
X# we have the normal "mt"
Xelse
X mtkey=-f # for the normal BSD machines
Xfi
Xecho "MT_K=$mtkey # mt key: '' (mt doesn't exist), '-t' (HP/UX,IRIX), '-f' (common)" >> $tsaenv
X
X## PS_C - ps command
X## PSALL_K - ps key to get all processes
X# NCR SysVR4 has /usr/ucb/ps and /sbin/ps (and symlinks from /bin and /usr/bin)
Xps_c=ps # in most cases
Xps ax > /dev/null 2>&1
Xstatax=$?
Xps -e > /dev/null 2>&1
Xstat_e=$?
Xcase "$statax$stat_e" in
X# BSD
X0[1-9]*)
X psallkey=ax
X;;
X# SysV
X[1-9]*0)
X psallkey=-e
X;;
X# HP-UX 8.0 allows both "ax" and "-e"
X00)
X nlinesax=`ps ax 2>&1 | wc -l`
X nlinese=`ps -e 2>&1 | wc -l`
X if test $nlinesax -gt $nlinese ; then
X psallkey=ax
X else
X psallkey=-e
X fi
X;;
X# NCR SysVR4 allows "/usr/ucb/ps -ax" and "/sbin/ps -e"
X# we'd like to choose the UCB version, but we assume the SysV version is
X# implemented more reliably so we check on it first. Also, "-e" is
X# more common that "-ax". The full path is necessary if we end up here.
X[1-9]*)
X if ( /sbin/ps -e ) > /dev/null 2>&1 ; then
X ps_c=/sbin/ps
X psallkey=-e
X elif ( /usr/ucb/ps -ax ) > /dev/null 2>&1 ; then
X ps_c=/usr/ucb/ps
X psallkey=-ax
X # else we have no idea what to do
X else
X psallkey=''
X fi
X;;
Xesac
Xecho "PS_C=$ps_c # ps command: 'ps' (most), '{/sbin,/usr/ucb}/ps' (NCR SysVR4)" >> $tsaenv
Xecho "PSALL_K=$psallkey # \$PS_C key to get all processes: 'ax' (BSD), '-e' (SysV)" >> $tsaenv
X
X## SLINK_B - does the system support symbolic links?
Xcd $junkdir
Xtouch x
Xif ( ln -s x y ) > /dev/null 2>&1 ; then
X slink=true
Xelse
X slink=false
Xfi
Xrm -f x y
Xecho "SLINK_B=$slink # does the system support symbolic links?" >> $tsaenv
X
X##############################################################################
X#### file types e.g. 4.3BSD crontab formats, df outputs, etc.
X
X## CRON43_B - are we a 4.3 cron host?
Xx=`awk '$1 !~ /^\#/ && $6 == "root" {print}' $CRON_P | wc -l`
Xif test $x -gt 0 ; then
X crontab43=true
Xelse
X crontab43=false
Xfi
Xecho "CRON43_B=$crontab43 # is the crontab file is in 4.3 BSD format?" >> $tsaenv
X
X################################################################################
X#### special commands e.g. mkpasswd, mkhosts
X
X# MKHOSTS_B - do we have dbm'd hosts files?
Xif test -f /etc/mkhosts ; then
X MKHOSTS_B=true
Xelse
X MKHOSTS_B=false
Xfi
Xecho "MKHOSTS_B=$MKHOSTS_B # do we have dbm'd hosts files?" >> $tsaenv
X
X## MKPW_B - do we need to run the mkpasswd command?
X# Note: Must remove passwd DB before running mkpasswd on 4.3 systems
Xif test -f /etc/passwd.dir ; then
X MKPW_B=true
Xelse
X MKPW_B=false
Xfi
Xecho "MKPW_B=$MKPW_B # do we need to run the mkpasswd command?" >> $tsaenv
X
X##############################################################################
X#### miscellaneous
X
X## INTERP_B - does exec(2|3) support '#!' file interpretation
Xcat > $script << EOF
X#!/bin/sh -x
Xecho hello > /dev/null
XEOF
Xchmod 700 $script
Xif { $script 2>&1 | egrep '^.*+.*' > /dev/null ; } ; then
X INTERP_B=true
Xelse
X INTERP_B=false
Xfi
Xecho "INTERP_B=$INTERP_B # does exec(2|3) support '#!' file interpretation" >> $tsaenv
X
X## SUIDSCRIPT_S - header string for setuid shellscripts
Xrm -f $junkf
X# 1) we need a "user" with a positive uid and a normal shell, since
X# bad shells (e.g. /bin/false) can cause problems;
X# the grep is sneaky - even if $CSH_P is null we still get ':$' which is OK
X# 2) should be able to have the script simply say "touch $junkf", but some
X# Ultrix's have a bug in touch which let's touch create the file but not
X# change the mod date. Other machines (Convex, Pyramid OSx) produce the
X# wrong answer too, for reasons I'm not sure of.
Xuser=`awk -F':' '$3>0 {print}' /etc/passwd \
X| egrep ':$|:/bin/[ck]*sh$|:'$CSH_P'$' \
X| awk -F':' '{print $1 ; exit}'`
Xfor i in '#!/bin/sh' ':' ; do
X echo "$i" > $script
X echo "echo $pr: SUID testing > $junkf" >> $script
X chmod 4755 $script
X chown root $script
X su $user -c $script > /dev/null 2>&1
X if test $? -eq 0 ; then
X SUIDSCRIPT_S="$i"
X break
X fi
X SUIDSCRIPT_S=''
Xdone
Xecho "SUIDSCRIPT_S='$SUIDSCRIPT_S' # header string for setuid shellscripts" >> $tsaenv
X
X## SUIDWRAP_B - if a script is run by a setuid binary, is it setuid too?
Xecho 'main(argc, argv) char *argv[]; { execl("/bin/sh", "sh","'$script'",0); }' > $script.c
X# do this in a subshell because we may not have "cc", especially with Solaris
X(
X cc -o $wrapper $script.c
X chmod 4755 $wrapper
X chown root $wrapper
X) 2> /dev/null
Xsu $user -c $wrapper > /dev/null 2>&1
Xif test $? -eq 0 ; then
X SUIDWRAP_B=true
Xelse
X SUIDWRAP_B=false
Xfi
Xecho "SUIDWRAP_B=$SUIDWRAP_B # if a script is run by a setuid binary, is it setuid too?" >> $tsaenv
X
X## SHFN_B - does sh support functions?
Xecho ':
Xhahaha() { echo funny ; }' > $script
Xif sh $script 2>&1 | egrep funny > /dev/null 2>&1 ; then
X shfn_b=true
Xelse
X shfn_b=false
Xfi
Xecho "SHFN_B=$shfn_b # does sh support functions?" >> $tsaenv
X
X## PIPESIZE_N - how many characters in a pipe?
X# We care about the size of the block that the second "dd" gets from the pipe.
X# For some reason I can't figure out, on some hosts this line produces
X# a blank line to standard error unless we do the dd's in a subshell
X# like this:
Xx=`(echo "$pr: get pipe size" | dd bs=100k conv=sync | dd bs=100k count=1) 2> /dev/null | wc -c`
XPIPESIZE_N=`echo $x` # strip leading spaces from 'wc'
Xecho "PIPESIZE_N=$PIPESIZE_N # how many characters in a pipe?" >> $tsaenv
X#echo `( dd if=$bigfile bs=100k count=1 2> /dev/null | dd bs=100k count=1 2> /dev/null ) 2> /dev/null | wc -c`
X
X## ALIASRO_N - number of rotations on the aliases file
XALIASRO_N=2 # assume we only need two old versions
Xfor i in $ALIASCHG ; do
X if test $i = $HOST ; then
X ALIASRO_N=10 # we need 10 old versions
X break
X fi
Xdone
Xecho "ALIASRO_N=$ALIASRO_N # number of rotations on the aliases file" >> $tsaenv
X
X## DSMCF_B - local sendmail config files need protection on some hosts
XDSMCF_B=true
Xfor i in $LOCSMCF ; do
X if test $i = $HOST ; then
X DSMCF_B=false
X break
X fi
Xdone
Xecho "DSMCF_B=$DSMCF_B # does $HOST use the distributed sendmail config file? (mail gateways don't)" >> $tsaenv
X
X##############################################################################
X#### get system info
X
Xtest -f $DTGTBIN/showsys && $DTGTBIN/showsys >> $tsaenv
X
X##############################################################################
X#### local mods (if any) and exports done last
X
X## the last thing saenv should do is check if there is a "manual" file
X## that needs to be run, in case we have to override or add to
X## saenv.setup's output.
Xecho "test -f /etc/saenv.man && . /etc/saenv.man # hack to allow temp local mods" >> $tsaenv
X
Xecho "export PATH" >> $tsaenv
X
X##############################################################################
X#### Finish up.
X
X## try to make sure that the temporary file is OK before we install it
X# check the number of variables set in the temporary vs. real versions
X# probably the newer version will have at least as many variables as the old one
Xnvartmp=`egrep -c '^[A-Z0-9_]*=' $tsaenv`
Xif test -f $SAENV ; then
X nvarreal=`egrep -c '^[A-Z0-9_]*=' $SAENV`
Xelse
X nvarreal=0
Xfi
X#if test $nvartmp -ge $nvarreal ; then
Xif test $nvartmp -ge 32 ; then
X exitstat=0
X mv $tsaenv $out
X chmod 444 $out
Xelse
X exitstat=1
X echo "$ELESSVAR" 1>&2
Xfi
X
X## clean up and exit
Xcd /tmp # go somewhere public
Xrm -f $rmlist
Xrm -fr $rmrlist
Xexit $exitstat
SHAR_EOF
echo 'File dist/saenv.setup is complete' &&
chmod 0444 dist/saenv.setup ||
echo 'restore of dist/saenv.setup failed'
Wc_c="`wc -c < 'dist/saenv.setup'`"
test 33376 -eq "$Wc_c" ||
echo 'dist/saenv.setup: original size 33376, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= dist/crontab.dist ==============
if test -f 'dist/crontab.dist' -a X"$1" != X"-c"; then
echo 'x - skipping dist/crontab.dist (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting dist/crontab.dist (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'dist/crontab.dist' &&
X##<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
X##<> THE FOLLOWING LINES ARE CENTRALLY UPDATED AND MAINTAINED. <>
X##<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
X## FORMAT: <minute> <hour> <day of month> <month> <day of wk> <commands>
X## update distribution files at night
X0 21 * * * /etc/dist/bin/upd-dist >> /usr/adm/cronerrs 2>&1
X## run any automatic backups
X# Do a full backup Fri 10pm and incremental backups Mon, Tue, Wed, and Thu 10pm
X#00 22 * * 5 /home/backup/backup full alldisks video0 cron verifytoo 2>&1 | Mail root
X#00 22 * * 1-4 /home/backup/backup incr alldisks video0 cron verifytoo 2>&1 | Mail root
SHAR_EOF
chmod 0644 dist/crontab.dist ||
echo 'restore of dist/crontab.dist failed'
Wc_c="`wc -c < 'dist/crontab.dist'`"
test 676 -eq "$Wc_c" ||
echo 'dist/crontab.dist: original size 676, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= dist/dlist ==============
if test -f 'dist/dlist' -a X"$1" != X"-c"; then
echo 'x - skipping dist/dlist (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting dist/dlist (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'dist/dlist' &&
Xbin/crontab.conv43
Xbin/cut-paste
Xbin/mkpath
Xbin/realdir
Xbin/showsys
Xbin/sleep-number
Xbin/upd-dist
Xbkp.media
Xbkp.opers
Xbkp.site
Xcrontab.dist
Xsaenv.setup
Xsahead
SHAR_EOF
chmod 0644 dist/dlist ||
echo 'restore of dist/dlist failed'
Wc_c="`wc -c < 'dist/dlist'`"
test 159 -eq "$Wc_c" ||
echo 'dist/dlist: original size 159, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= firstinst-saenv ==============
if test -f 'firstinst-saenv' -a X"$1" != X"-c"; then
echo 'x - skipping firstinst-saenv (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting firstinst-saenv (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'firstinst-saenv' &&
X:
X# firstinst-saenv - installs sysadmin environment on sysadmin master host
X
X# Edit ./dist/sahead before you run this script.
X
XDOSETUP=true ; export DOSETUP
X
X# if we're not in the right directory
Xif test ! -f ./dist/sahead ; then
X echo "$pr: Please run this script from the sysadmin directory"
X echo "$pr: where you extracted the 'seanv_alld' shar archive."
X exit 1
X# else check to make sure that there are no blanks in sahead
Xelif egrep "_____" ./dist/sahead > /dev/null ; then
X echo "$pr: You haven't filled in all the blanks in './dist/sahead'."
X echo "$pr: Please do that first, and then run this script again."
X exit 1
Xfi
X
X# source the customized sahead
X. ./dist/sahead
X
X# check usage
Xhost=`(hostname) 2> /dev/null || uname -n`
Xif test "$host" != "$SAHOST" ; then
X echo "$pr: This script should be run ONLY on your master sysadmin host."
X echo "$pr: If you want '$host' to be your master sysadmin host, then"
X echo "$pr: define '$host' as the 'SAHOST' in 'sahead', copy this"
X echo "$pr: source tree over to '$host', and try again."
X exit 1
Xfi
X
X# build empty directories that the shar won't extract for us
Xtest -d data || mkdir data
Xmkdir data/passwd data/saenv dist/stamp
Xchmod 777 data/passwd data/saenv dist/stamp
X
Xecho "$pr: Setting umask to 2"
Xumask 2
X
Xecho "$pr: Creating directory $DTGTBIN"
Xif test ! -d $DTGTBIN ; then
X mkdir $DTGT $DTGTBIN
Xfi
X
X# copy files into place
Xecho "$pr: Copying files and scripts into place"
X# these are for $SAHOST
Xcd ./dist/bin ; cp * $DTGTBIN
Xcd .. ; cp crontab.dist dlist sahead saenv.setup $DTGT
X# these are for distribution via upd-dist from $SAHOST to other hosts
Xcd ../src/backup ; cp bkp.media bkp.opers bkp.site ../../dist
X
X# go back home
Xcd ../..
X
X# now we can do research on $SAHOST
Xecho "$pr: Doing first time research on $host; this will take a bit"
Xsh ./dist/saenv.setup
X
X# finish up
Xecho "$pr: OK, the 'saenv' toolset has been bootstrapped onto on '$SAHOST'."
Xecho "$pr: Enjoy!"
X
X# like it says, enjoy!
SHAR_EOF
chmod 0755 firstinst-saenv ||
echo 'restore of firstinst-saenv failed'
Wc_c="`wc -c < 'firstinst-saenv'`"
test 1976 -eq "$Wc_c" ||
echo 'firstinst-saenv: original size 1976, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= lib/rrun.hosts ==============
if test ! -d 'lib'; then
echo 'x - creating directory lib'
mkdir 'lib'
fi
if test -f 'lib/rrun.hosts' -a X"$1" != X"-c"; then
echo 'x - skipping lib/rrun.hosts (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting lib/rrun.hosts (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'lib/rrun.hosts' &&
X# This is $SALIB/rrun.hosts. It is sourced by $SABIN/rrun.
X#
X# Written by Bob Arnold
X#
X# Put the appropriate hosts in the appropriate lists, create your own
X# new lists, and reclassify as you see fit. rrun and rrun.hosts are
X# provided in case you might be able to it.
X#
X# NOTE - classification is a religious topic, and some people a splitters
X# while others are groupers. Opinions also vary depending upon how many
X# substantially different versions of UNIX you maintain from each of
X# these vendors. Feel free to develop your own classifications.
X
Xamdahlhosts=""
Xatthosts=""
Xauspexhosts=""
Xbosxhosts=""
Xbullhosts=""
Xbsdihosts=""
Xconvexhosts=""
Xdecmipshosts="" # Ultrix MIPS
Xdecvaxhosts="" # Ultrix VAX
Xdecosfhosts=""
Xdechosts="$decmipshosts $decvaxhosts $decosfhosts" # DEC BSD hosts
Xdghosts="" # DG/UX
Xdynixhosts="" # BSD sequents
Xdynixptxhosts="" # SysV sequents
Xencorehosts=""
Xgouldhosts=""
Xhphosts="" # HP-UX
Xmipshosts=""
Xiclhosts=""
Xmotorolahosts=""
Xmtxinuhosts=""
Xncrhosts=""
Xpyramidbsdhosts="" # OSx
Xpyramidsysvhosts="" # DC/OSx
Xpyramidhosts="$pyramidbsdhosts $pyramidsysvhosts"
Xrshosts="" # IBM RS/6000s
Xrthosts="" # IBM RT
Xscohosts=""
Xsgihosts=""
Xsolbournehosts=""
Xstardenthosts=""
Xsun3hosts=""
Xsun3xhosts=""
Xsun4hosts=""
Xsun4chosts=""
Xsun4mhosts=""
Xsun4dhosts=""
Xsunoshosts="$sun3hosts $sun3xhosts $sun4hosts $sun4chosts $sun4mhosts"
Xsunsolarishosts="$sun4dhosts"
Xsolarishosts="$sunsolarishosts"
Xsunhosts="$sunoshosts $solarishosts"
Xtandemhosts=""
Xtihosts=""
Xxenixhosts=""
X
X## build larger lists of machines
X# aixhosts - might want to add $bosxhosts here and delete $rthosts
Xaixhosts="$rshosts $rthosts"
Xsequenthosts="$dynixhosts $dynixptxhosts"
Xbsdhosts="$auspexhosts $bsdihosts $convexhosts $dechosts $dynixhosts $gouldhosts $pyramidbsdhosts $solbournehosts $sunoshosts"
Xsvr4hosts="$dghosts $iclhosts $ncrhosts $pyramidsysvhosts $solarishosts"
Xsysvhosts="$aixhosts $amdahlhosts $atthosts $bosxhosts $bullhosts $dynixptxhosts $encorehosts $hphosts $mipshosts $motorolahosts $sgihosts $stardenthosts $tandemhosts $tihosts $xenixhosts"
Xunixhosts="$bsdhosts $svr4hosts $sysvhosts"
X# where do you maintain alldisks?
Xalldiskshosts=""
SHAR_EOF
chmod 0664 lib/rrun.hosts ||
echo 'restore of lib/rrun.hosts failed'
Wc_c="`wc -c < 'lib/rrun.hosts'`"
test 2176 -eq "$Wc_c" ||
echo 'lib/rrun.hosts: original size 2176, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= saenv.paper.ps ==============
if test -f 'saenv.paper.ps' -a X"$1" != X"-c"; then
echo 'x - skipping saenv.paper.ps (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting saenv.paper.ps (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'saenv.paper.ps' &&
X%!
X%%Creator: troff->tpscript
X%%CreationDate: Fri Aug 16 15:02:51 1991
X%%EndComments
X/inch { 480 mul } bind def
X/Xshowpage { showpage } bind def
X/rotateit { /pgtop 11 inch def /pgwid 8.5 inch def newpath } bind def
X/scaleit { 72 480 div dup scale rotateit 1 setlinecap} def
X/unscaleit { 480 72 div dup scale} def
X/RBKFontDict 9 dict def /NEWDict 10 dict def
XRBKFontDict begin
X/FontType 3 def
X/FontName (RBK specials) cvn def
X/FontMatrix [ 0.001 0 0 0.001 0 0] def
X/FontBBox [ -50 -250 1000 1000 ] def
X/Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for
XEncoding
Xdup 2 /Csq put
Xdup 3 /Cci put
Xdup 4 /Cbx put
Xdup 5 /CSu put
Xdup 15 /Cbu put
Xpop
X/CharProcs 24 dict dup begin
X /setC { 0 -50 -250 1000 1000 setcachedevice} def
X/Cbu { 0 0 moveto
X600 setC
X300 300 moveto 300 300 250 0 360 arc closepath fill } def
X/Csq { 0 0 moveto
X600 setC
X50 50 moveto
X500 0 rlineto 0 500 rlineto -500 0 rlineto closepath fill } def
X/Cbx { 0 0 moveto
X600 setC
X70 setlinewidth
X50 50 moveto 500 0 rlineto 0 500 rlineto -500 0 rlineto closepath stroke } def
X/Cci { 0 0 moveto 600 setC
X70 setlinewidth
X550 300 moveto 300 300 250 0 360 arc closepath stroke } def
X/CSu {
X0 0 moveto
X715 setC
X700 700 scale
X%% Kolstad & Horton/Polk 12/1989; Font: kolstad 6/24/90
X/divsq2 { 1.4142136 div } bind def /mulsq2 { 1.4142136 mul } bind def
X/TW 0.62 def %% top width
X/MG 0.12 def %% MidGap
X/US TW 4 mul MG 6 mul add def %% Uside
X/UL US TW sub MG sub def %% U length
X/OR MG TW add def %% outradius
X/T2 TW divsq2 def
X/U2 UL divsq2 def
X/M2 MG divsq2 def
X/SU { %% sunU
X currentpoint
X T2 dup neg rlineto
X U2 neg dup rlineto
X currentpoint exch M2 add exch M2 sub MG 135 315 arc
X U2 dup rlineto
X T2 dup neg rlineto
X U2 neg dup rlineto
X currentpoint exch OR divsq2 sub exch OR divsq2 add OR 315 135 arcn
X closepath
X moveto
X} def
X/SU2 { SU currentpoint 0 US neg mulsq2 rmoveto 180 rotate SU -180 rotate
X moveto } def
X 1 US mulsq2 2 mul div dup scale
X US divsq2 US mulsq2 US divsq2 add rmoveto
X 4 { M2 2 mul M2 2 mul rmoveto US mulsq2 0 rmoveto 270 rotate SU2 } repeat
X%% 0 setlinewidth stroke
X fill
X} def
Xend def
X
X/BuildChar
X{
X NEWDict begin
X /charcode exch def /fontdict exch def
X fontdict /CharProcs get begin
X fontdict /Encoding get
X charcode get load
X gsave 0 setlinecap 0 setgray newpath exec grestore
X end end
X} def
Xend
X/RBKFont RBKFontDict definefont pop
X%%%%%%%%%%%%%%% End special Font
Xscaleit 0 0 moveto
X/pagebot { showpage restore } def
X/pagetop { save } def
X/lastpage {} def
X/pt { 6.666667 mul } bind def
X/y { neg 0 exch rmoveto } bind def
X/X { U moveto } bind def
X/Y { pgtop exch sub currentpoint pop exch dup /U exch def moveto } bind def
X/s { show } bind def
X/S { dup gsave show grestore
X gsave true charpath 0 setgray stroke grestore } bind def
X/l { neg rlineto currentpoint stroke dup /U exch def moveto } bind def
X/c {
X2 div /rad exch def currentpoint /y0 exch def /x0 exch def
Xnewpath x0 rad add y0 rad 0 360 arc stroke
Xx0 rad add rad add y0 dup /U exch def moveto
X } def
X/a {
X/y2 exch neg def /x2 exch def /y1 exch neg def /x1 exch def
Xx1 y1 rmoveto currentpoint
Xcurrentpoint
Xx2 x2 mul y2 y2 mul add sqrt
Xy1 neg x1 neg atan
Xy2 x2 atan
Xnewpath arc stroke moveto x2 y2 rmoveto currentpoint /U exch def pop
X} def
X/e {
X2 div /yrad exch def 2 div /xrad exch def
Xcurrentpoint /y0 exch def /x0 exch def
Xgsave x0 xrad add y0 translate xrad yrad scale
XLS xrad yrad gt {xrad} {yrad} ifelse div setlinewidth
Xnewpath 0 0 1 0 360 arc stroke grestore
Xx0 xrad add xrad add y0 dup /U exch def moveto
X} def
X/spln {
Xrcurveto currentpoint stroke dup /U exch def moveto
X} def
X
X% stolen from greenbook page 115-116
X/F { findfont exch scalefont setfont } bind def
X/RE { % re-encode
X findfont begin
X currentdict dup length dict begin
X { 1 index /FID ne {def} {pop pop} ifelse } forall
X /FontName exch def dup length 0 ne { % if
X /Encoding Encoding 256 array copy def
X 0 exch
X { % forall
X dup type /nametype eq % if?
X { Encoding 2 index 2 index put pop 1 add }
X { exch pop }
X ifelse
X } forall
X } if
X pop currentdict dup
X end
X end
X /FontName get exch definefont pop
X} bind def
X
X% use make.remap to make new stdencodings:
X/stdencoding [ 1 /multiply /ntilde /eth /otilde /oacute /idieresis
X/Ocircumflex /ograve /onequarter /scaron /uacute /odieresis
X/Ucircumflex /ugrave /yacute /Thorn /zcaron /udieresis /threequarters
X/threesuperior /ydieresis /aring /Ccedilla /twosuperior /acircumflex
X/Atilde /Aacute /Agrave /ecircumflex /Eacute /copyright 127 /Adieresis
X/Egrave /icircumflex /Iacute /onehalf /Edieresis /Igrave /Ntilde /Eth
X/ocircumflex /Otilde /Oacute /Idieresis /mu /Ograve /Scaron
X/ucircumflex /Uacute /Odieresis /Ugrave /Yacute /thorn /degree
X/logicalnot /minus /Zcaron /Udieresis /registered /plusminus /ccedilla
X/Ydieresis /Aring /atilde /aacute 176 /Acircumflex 181 /divide 190
X/brokenbar 192 /agrave 201 /eacute 204 /Ecircumflex 209 /adieresis
X/egrave /onesuperior /trademark /iacute /Icircumflex /edieresis /igrave
X] def
X/specdwidth 0 def /LS 0 def
X/setwidth {/specdwidth 1 def dup /LS exch def setlinewidth} def
X/ft { /fonttype exch def /xsiz exch def /ysiz exch def /sl exch def
X fonttype [ xsiz pt 0 sl sin sl cos div ysiz pt mul ysiz pt 0 0 ]
X makefont setfont
X specdwidth 0 eq {xsiz 4 div dup /LS exch def setlinewidth} if
X setgray } def
X/Z { specdwidth 0 eq {dup 4 div dup /LS exch def setlinewidth} if
X pt scalefont setfont } bind def
X/M { pgtop exch sub moveto } bind def
X/L { pgtop exch sub lineto } bind def
X/cbox { gsave 100 div setgray
Xcurrentpoint /nowy exch def /nowx exch def
X/radius exch def /boxdown exch def /boxover exch def
Xcurrentpoint newpath moveto radius 0 rmoveto
Xnowx boxover add nowy nowx boxover add nowy boxdown sub radius arcto
Xpop pop pop pop
Xnowx boxover add nowy boxdown sub nowx nowy boxdown sub radius arcto
Xpop pop pop pop
Xnowx nowy boxdown sub nowx nowy radius arcto pop pop pop pop
Xnowx nowy nowx boxover add nowy radius arcto pop pop pop pop
Xcurrentgray 1.0 ne { gsave fill grestore } if 0 setgray stroke
Xgrestore } bind def
X/f.Y /RBKFont findfont def
X
X0 Y
Xsave
X%%EndProlog
X
X0 Y
X%%Page: 1 1
Xpagetop
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
X0.00 0.0 10 10 f.R ft
X1181 X
X521 Y
X1305 X
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 22 Z(If)s
X1459 X(You've)s
X1954 X(Seen)s
X2294 X(One)s
X2602 X(UNIX,)s
X1181 X
X667 Y
X1441 X(You've)s
X1936 X(Seen)s
X2276 X(Them)s
X2690 X(All)s
X600 X
X835 Y
X1446 X
Xstdencoding /NTimes-Italic /Times-Italic RE
X/f.I /NTimes-Italic findfont def
Xf.I 12 Z(Bob)s
X1601 X(Arnold)s
X1849 X(\261)s
X1915 X
Xf.R 12 Z(ASK/Ingres)s
X2324 X(Product)s
X2599 X(Division)s
X840 X
X1011 Y
X1912 X
Xf.B 12 Z(ABSTRACT)s
X840 X
X1145 Y
X984 X
Xf.R 10 Z(The)s
X1119 X(title)s
X1257 X(is)s
X1334 X(absurd,)s
X1560 X(of)s
X1647 X(course)s
X1821 X(.)s
X1892 X(One)s
X2035 X(of)s
X2122 X(the)s
X2236 X(major)s
X2424 X(challenges)s
X2739 X(in)s
X2823 X(a)s
X2885 X(very)s
X3035 X(heterogeneous)s
X840 X
X1218 Y
Xf.R 8 Z(UNIX)s
X1007 X
Xf.R 10 Z(environment)s
X1379 X(is)s
X1459 X(to)s
X1546 X(make)s
X1726 X(system)s
X1947 X(administration)s
X2369 X(tools)s
X2534 X(handle)s
X2746 X(differences)s
X3077 X(among)s
X3288 X
Xf.R 8 Z(UNIX)s
X840 X
X1291 Y
Xf.R 10 Z(variants)s
X1088 X(and)s
X1220 X(differing)s
X1489 X(local)s
X1656 X(con\256gurations)s
X2037 X(.)s
X2112 X(In)s
X2203 X(short,)s
X2390 X(how)s
X2541 X(can)s
X2671 X(one)s
X2804 X(write)s
X2979 X(tools)s
X3146 X(that)s
X3284 X(work)s
X840 X
X1364 Y(everywhere?)s
X1237 X(This)s
X1390 X(paper)s
X1572 X(describes)s
X1855 X(an)s
X1952 X(approach)s
X2230 X(to)s
X2316 X(coping)s
X2531 X(with)s
X2684 X(this)s
X2815 X(challenge)s
X3105 X(\(and)s
X3256 X(at)s
X3338 X(the)s
X840 X
X1437 Y(same)s
X1004 X(time)s
X1150 X(making)s
X1376 X(the)s
X1484 X(title)s
X1616 X(seem,)s
X1797 X(well,)s
X1956 X(at)s
X2031 X(least)s
X2181 X(a)s
X2237 X(little)s
X2388 X(bit)s
X2485 X(less)s
X2612 X(ridiculous\))s
X2901 X(.)s
X2966 X(The)s
X3096 X(heart)s
X3256 X(of)s
X3338 X(the)s
X840 X
X1510 Y(technique)s
X1136 X(is)s
X1217 X(to)s
X1305 X(use)s
X1430 X(a)s
X1495 X(Bourne)s
X1725 X(shell)s
X1887 X(script)s
X2071 X(to)s
X2158 X(research)s
X2416 X(a)s
X2481 X(local)s
X2647 X(environment)s
X2984 X(.)s
X3058 X(The)s
X3197 X(research)s
X840 X
X1583 Y(results)s
X1039 X(are)s
X1145 X(written)s
X1359 X(to)s
X1436 X(a)s
X1491 X(con\256guration)s
X1871 X(\256le,)s
X1999 X(which)s
X2187 X(is)s
X2257 X(itself)s
X2417 X(a)s
X2472 X(shell)s
X2624 X(script)s
X2773 X(.)s
X2837 X(It)s
X2903 X(is)s
X2973 X(thus)s
X3109 X(suitable)s
X3343 X(for)s
X840 X
X1656 Y(direct)s
X1025 X(sourcing)s
X1286 X(by)s
X1384 X(any)s
X1512 X
Xf.B 10 Z(sh)s
X1607 X
Xf.R 10 Z(script,)s
X1805 X(and)s
X1933 X(can)s
X2057 X(be)s
X2151 X(easily)s
X2339 X(consulted)s
X2626 X(by)s
X2723 X(other)s
X2891 X(kinds)s
X3066 X(of)s
X3152 X(programs)s
X3403 X(.)s
X840 X
X1729 Y(This)s
X982 X(technique)s
X1265 X(depends)s
X1506 X(a\))s
X1582 X(on)s
X1672 X(the)s
X1778 X(availability)s
X2105 X(of)s
X2184 X(a)s
X2238 X(common)s
X2495 X(tool)s
X2623 X(set,)s
X2739 X(which)s
X2926 X(is)s
X2995 X(available)s
X3262 X(in)s
X3338 X(the)s
X840 X
X1802 Y(Version)s
X1086 X(7)s
X1154 X(utilities,)s
X1409 X(and)s
X1540 X(b\))s
X1630 X(a)s
X1695 X(dynamic)s
X1960 X(tool)s
X2099 X(design)s
X2308 X(approach)s
X2587 X(which)s
X2785 X(understands)s
X3138 X(and)s
X3268 X(copes)s
X840 X
X1875 Y(properly)s
X1087 X(with)s
X1228 X(the)s
X1332 X(differences)s
X1629 X(.)s
X1690 X(Related)s
X1917 X(techniques)s
X2225 X(and)s
X2343 X(experiences)s
X2681 X(are)s
X2785 X(also)s
X2915 X(discussed)s
X3171 X(.)s
X600 X
X2021 Y
X1150 X
Xf.B 10 Z(Introduction)s
X600 X
X2130 Y
X744 X
Xf.R 10 Z(In)s
X826 X(their)s
X976 X(never)s
X1151 X(ending)s
X1359 X(search)s
X1558 X(for)s
X1663 X(better)s
X1844 X(ways)s
X2009 X(of)s
X600 X
X2203 Y(doing)s
X796 X(things,)s
X1021 X(vendors)s
X1276 X(are)s
X1403 X(fond)s
X1569 X(of)s
X1669 X(tailoring)s
X1941 X(their)s
X600 X
X2276 Y(version\(s\))s
X893 X(of)s
X971 X
Xf.R 8 Z(UNIX)s
X1103 X
Xf.R 10 Z(.)s
X1169 X(The)s
X1301 X(sheer)s
X1470 X(variety)s
X1684 X(of)s
X1767 X(differences)s
X600 X
X2349 Y(makes)s
X825 X(life)s
X969 X(dif\256cult)s
X1235 X(for)s
X1366 X(a)s
X1450 X(system)s
X1690 X(administrator)s
X2047 X(.)s
X600 X
X2422 Y(Differences)s
X952 X(among)s
X1169 X
Xf.R 8 Z(UNIX)s
Xf.R 10 Z(s)s
X1368 X(are)s
X1491 X(commonly)s
X1817 X(found)s
X2012 X(in)s
X600 X
X2495 Y(these)s
X760 X(areas:)s
X600 X
X2568 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Procedures)s
X1052 X(for)s
X1151 X(changing)s
X1417 X(con\256guration)s
X1794 X(\256les)s
X600 X
X2641 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Con\256guration)s
X1125 X(\256le)s
X1233 X(location/name)s
X600 X
X2714 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Con\256guration)s
X1125 X(\256le)s
X1233 X(format)s
X600 X
X2787 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Command)s
X1033 X(syntaxes)s
X600 X
X2860 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Program)s
X985 X(availability)s
X600 X
X2933 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Program)s
X985 X(capabilities)s
X1314 X(and)s
X1432 X(behaviors)s
X600 X
X3006 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Program)s
X985 X(outputs)s
X600 X
X3079 Y
X663 X
Xf.Y 10 Z(\017)s
X734 X
Xf.R 10 Z(Program)s
X985 X(location/name)s
X600 X
X3173 Y
X744 X(One)s
X879 X(of)s
X958 X(the)s
X1064 X(keys)s
X1210 X(to)s
X1286 X(administering)s
X1679 X(many)s
X1852 X(systems)s
X600 X
X3246 Y(is)s
X670 X(to)s
X747 X(write)s
X909 X(tools)s
X1063 X(to)s
X1139 X(handle)s
X1341 X(as)s
X1421 X(many)s
X1593 X(common)s
X1850 X(tasks)s
X2008 X(as)s
X600 X
X3319 Y(possible)s
X819 X(.)s
X896 X(This)s
X1054 X(may)s
X1208 X(make)s
X1392 X(it)s
X1469 X(possible)s
X1727 X(to)s
X1818 X(automate)s
X600 X
X3392 Y(common)s
X872 X(tasks,)s
X1062 X(spend)s
X1255 X(less)s
X1394 X(time)s
X1552 X(on)s
X1656 X(them,)s
X1845 X(or)s
X1938 X(even)s
X600 X
X3465 Y(hand)s
X760 X(them)s
X925 X(off)s
X1033 X(to)s
X1116 X(other)s
X1284 X(people)s
X1462 X(.)s
X1532 X(Yet)s
X1660 X(in)s
X1744 X(an)s
X1839 X(environ-)s
X600 X
X3538 Y(ment)s
X759 X(with)s
X903 X(systems)s
X1140 X(from)s
X1294 X(many)s
X1466 X(vendors,)s
X1717 X(writing)s
X1934 X(tools)s
X600 X
X3611 Y(that)s
X723 X(work)s
X881 X(with)s
X1022 X(all)s
X1112 X(systems)s
X1346 X(can)s
X1461 X(be)s
X1546 X(dif\256cult)s
X1758 X(.)s
X600 X
X3738 Y
X1143 X
Xf.B 10 Z(Environment)s
X600 X
X3847 Y
X744 X
Xf.R 10 Z(The)s
X886 X(Data)s
X1051 X(Center)s
X1267 X(at)s
X1354 X(the)s
X1474 X(ASK/Ingres)s
X1831 X(Products)s
X600 X
X3920 Y(Division)s
X873 X(is)s
X961 X(responsible)s
X1308 X(for)s
X1428 X(supporting)s
X1755 X(\(at)s
X1868 X(various)s
X600 X
X3993 Y(levels\))s
X808 X(almost)s
X1016 X(300)s
X1141 X
Xf.R 8 Z(UNIX)s
X1303 X
Xf.R 10 Z(systems)s
X1545 X(from)s
X1704 X(well)s
X1850 X(over)s
X1998 X(20)s
X600 X
X4066 Y(vendors)s
X810 X(.)s
X874 X(Each)s
X1033 X(vendor)s
X1241 X(may)s
X1380 X(be)s
X1467 X(represented)s
X1799 X(by)s
X1889 X(one)s
X2009 X(or)s
X600 X
X4139 Y(more)s
X762 X(operating)s
X1040 X(systems,)s
X1295 X(sometimes)s
X1608 X(running)s
X1840 X(multiple)s
X600 X
X4212 Y(major)s
X797 X(releases)s
X1051 X(on)s
X1158 X(several)s
X1389 X(different)s
X1660 X(CPU)s
X1829 X(architec-)s
X600 X
X4285 Y(tures)s
X730 X(.)s
X803 X(New)s
X963 X(hardware)s
X1245 X(and)s
X1375 X(operating)s
X1661 X(systems)s
X1908 X(arrive)s
X600 X
X4358 Y(frequently,)s
X920 X(and)s
X1045 X(must)s
X1204 X(be)s
X1295 X(integrated)s
X1591 X(into)s
X1723 X(our)s
X1839 X(environ-)s
X600 X
X4431 Y(ment)s
X766 X(quickly)s
X966 X(.)s
X1038 X(This)s
X1190 X(process)s
X1423 X(has)s
X1545 X(been)s
X1704 X(going)s
X1888 X(on)s
X1987 X(for)s
X600 X
X4504 Y(years,)s
X793 X(so)s
X887 X(we)s
X999 X(also)s
X1141 X(have)s
X1301 X(a)s
X1365 X(number)s
X1602 X(of)s
X1691 X(relatively)s
X1979 X(old)s
X600 X
X4577 Y
Xf.R 8 Z(UNIX)s
X754 X
Xf.R 10 Z(platforms)s
X1032 X(to)s
X1106 X(support)s
X1305 X(.)s
X2256 X
X2021 Y
X2766 X
Xf.B 10 Z(Early)s
X2947 X(Attempts)s
X2256 X
X2130 Y
X2400 X
Xf.R 10 Z(Under)s
X2594 X(these)s
X2761 X(circumstances,)s
X3187 X(we)s
X3294 X(need)s
X3449 X(a)s
X3508 X(strategy)s
X2256 X
X2203 Y(for)s
X2370 X(making)s
X2607 X(our)s
X2732 X(tools)s
X2898 X(work)s
X3070 X(on)s
X3172 X(all)s
X3276 X(these)s
X3450 X(machines)s
X3703 X(.)s
X2256 X
X2276 Y(Early)s
X2425 X(attempts)s
X2677 X(at)s
X2751 X(getting)s
X2962 X(tools)s
X3117 X(to)s
X3194 X(work)s
X3355 X("everywhere")s
X2256 X
X2349 Y(included)s
X2520 X(variations)s
X2818 X(on)s
X2918 X(the)s
X3034 X(theme)s
X3232 X(below)s
X3395 X(.)s
X3467 X(Naturally)s
X2256 X
X2422 Y(they)s
X2393 X(broke)s
X2566 X(on)s
X2654 X(various)s
X2872 X(System)s
X3091 X(V)s
X3161 X(/)s
X3202 X(BSD)s
X3353 X(hybrids)s
X3552 X(.)s
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
X2256 X
X2524 Y
X2304 X
Xf.CW 10 Z(if)s
X2424 X(test)s
X2624 X(-f)s
X2744 X(/etc/inittab)s
X3264 X(;)s
X3344 X(then)s
X2256 X
X2597 Y
X2464 X(#)s
X2544 X(make)s
X2744 X(lots)s
X2944 X(of)s
X3064 X(System)s
X3344 X(V)s
X2256 X
X2670 Y
X2464 X(#)s
X2544 X(assumptions)s
X2256 X
X2743 Y
X2304 X(else)s
X2256 X
X2816 Y
X2464 X(#)s
X2544 X(make)s
X2744 X(lots)s
X2944 X(of)s
X3064 X(BSD)s
X2256 X
X2889 Y
X2464 X(#)s
X2544 X(assumptions)s
X2256 X
X2962 Y
X2304 X(fi)s
X2256 X
X3085 Y
X2400 X
Xf.R 10 Z(We)s
X2515 X(found)s
X2691 X(that)s
X2815 X(this)s
X2935 X(kind)s
X3076 X(of)s
X3154 X(research)s
X3400 X(code)s
X3549 X(had)s
X3668 X(to)s
X2256 X
X3158 Y(be)s
X2353 X(repeated)s
X2614 X(in)s
X2700 X(many)s
X2882 X(tools)s
X3012 X(.)s
X3085 X(And)s
X3233 X(it)s
X3305 X(was)s
X3442 X(tedious)s
X3668 X(to)s
X2256 X
X3231 Y(make)s
X2433 X(improvements)s
X2847 X(to)s
X2931 X(the)s
X3046 X(research)s
X3302 X(code)s
X3461 X(when)s
X3638 X(the)s
X2256 X
X3304 Y(same)s
X2416 X(\256xes)s
X2564 X(had)s
X2682 X(to)s
X2756 X(be)s
X2841 X(inserted)s
X3075 X(into)s
X3201 X(many)s
X3371 X(tools)s
X3501 X(.)s
X2256 X
X3398 Y
X2400 X(In)s
X2490 X(a)s
X2556 X(few)s
X2692 X(tools)s
X2858 X(we)s
X2972 X(tried)s
X3131 X(to)s
X3219 X(maintain)s
X3490 X(different)s
X2256 X
X3471 Y(versions)s
X2509 X(for)s
X2616 X(different)s
X2876 X(platforms)s
X3132 X(.)s
X3201 X(This)s
X3350 X(created)s
X3574 X(small)s
X2256 X
X3544 Y(porting)s
X2473 X(problems)s
X2747 X(and)s
X2869 X(large)s
X3029 X(source)s
X3229 X(code)s
X3381 X(maintenance)s
X2256 X
X3617 Y(nightmares)s
X2553 X(.)s
X2256 X
X3744 Y
X2514 X
Xf.B 10 Z(Con\256guration)s
X2935 X(Research)s
X3221 X(Strategy)s
X2256 X
X3853 Y
X2400 X
Xf.R 10 Z(Eventually,)s
X2747 X(all)s
X2855 X(of)s
X2950 X(this)s
X3087 X(became)s
X3332 X(ridiculous)s
X3599 X(.)s
X3679 X(It)s
X2256 X
X3926 Y(was)s
X2392 X(decided)s
X2632 X(that)s
X2765 X(we)s
X2875 X(would)s
X3073 X(try)s
X3179 X(to)s
X3263 X(dynamically)s
X3626 X(test)s
X2256 X
X3999 Y(for)s
X2366 X(everything)s
X2684 X(we)s
X2795 X(cared)s
X2973 X(about,)s
X3171 X(from)s
X3334 X(where)s
X3531 X(to)s
X3617 X(\256nd)s
X2256 X
X4072 Y
Xf.B 10 Z(csh)s
X2385 X
Xf.R 10 Z(to)s
X2473 X
Xf.B 10 Z(echo)s
Xf.R 10 Z('s)s
X2687 X(no)s
X2753 X(-newline)s
X3023 X(syntax)s
X3197 X(.)s
X3272 X(We)s
X3400 X(could)s
X3583 X(build)s
X2256 X
X4145 Y(one)s
X2395 X(script)s
X2587 X(to)s
X2682 X(do)s
X2791 X(all)s
X2902 X(the)s
X3028 X(research)s
X3295 X(and)s
X3435 X(report)s
X3638 X(the)s
X2256 X
X4218 Y(results)s
X2469 X(in)s
X2559 X(a)s
X2627 X(\257at)s
X2751 X(\256le)s
X2875 X(which)s
X3076 X(could)s
X3261 X(be)s
X3361 X(consulted)s
X3654 X(by)s
X2256 X
X4291 Y(other)s
X2417 X(tools)s
X2547 X(.)s
X2610 X(As)s
X2708 X(it)s
X2770 X(happens,)s
X3030 X(all)s
X3123 X(our)s
X3236 X(tools)s
X3391 X(that)s
X3517 X(have)s
X3668 X(to)s
X2256 X
X4364 Y(run)s
X2398 X(everywhere)s
X2762 X(are)s
X2897 X(Bourne)s
X3145 X(shell)s
X3325 X(scripts,)s
X3570 X(so)s
X3682 X(it)s
X2256 X
X4437 Y(quickly)s
X2487 X(became)s
X2723 X(obvious)s
X2965 X(that)s
X3098 X(the)s
X3212 X(\257at)s
X3330 X(\256le)s
X3448 X(should)s
X3657 X(be)s
X2256 X
X4510 Y(written)s
X2479 X(as)s
X2568 X(a)s
X2631 X(Bourne)s
X2859 X(shell)s
X3018 X(script)s
X3199 X(too)s
X3284 X(.)s
X3355 X(Thus)s
X3520 X(the)s
X3634 X(\257at)s
X2256 X
X4583 Y(\256le)s
X2384 X(could)s
X2574 X(be)s
X2679 X(directly)s
X2926 X(sourced)s
X3175 X(by)s
X3283 X
Xf.B 10 Z(sh)s
X3389 X
Xf.R 10 Z(scripts,)s
X3624 X(and)s
X2256 X
X4656 Y(without)s
X2488 X(too)s
X2601 X(much)s
X2777 X(work)s
X2941 X(could)s
X3117 X(be)s
X3207 X(consulted)s
X3490 X(by)s
X3583 X(other)s
X2256 X
X4729 Y(kinds)s
X2422 X(of)s
X2499 X(programs)s
X2750 X(.)s
X600 X
X4967 Y
Xf.B 10 Z(LISA)s
X777 X(V)s
X847 X(\261)s
X902 X(Sep)s
X1006 X(.)s
X1045 X(30)s
X1111 X(-Oct)s
X1237 X(.)s
X1276 X(3,)s
X1348 X(1991)s
X1502 X(\261)s
X1557 X(San)s
X1686 X(Diego,)s
X1888 X(CA)s
X3654 X(11)s
X5280 Y
Xpagebot
X
X%%Page: 12 2
Xpagetop
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 10 Z
X360 X
X448 Y
X504 X
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
Xf.R 10 Z(We)s
X628 X(decided)s
X867 X(to)s
X951 X(maintain)s
X1218 X(only)s
X1368 X(one)s
X1496 X(current)s
X1717 X(ver-)s
X360 X
X521 Y(sion)s
X501 X(of)s
X586 X(each)s
X739 X(tool)s
X843 X(.)s
X912 X(If)s
X986 X(a)s
X1046 X(tool)s
X1180 X(had)s
X1306 X(to)s
X1388 X(run)s
X1505 X(on)s
X1600 X(multiple)s
X360 X
X594 Y(platforms,)s
X672 X(then)s
X826 X(it)s
X903 X(had)s
X1038 X(to)s
X1129 X(be)s
X1231 X(coded)s
X1429 X(to)s
X1521 X(handle)s
X1739 X(OS)s
X360 X
X667 Y(differences)s
X657 X(.)s
X721 X(In)s
X800 X(other)s
X961 X(words,)s
X1164 X(such)s
X1310 X(a)s
X1364 X(tool)s
X1492 X(had)s
X1612 X(to)s
X1688 X(work)s
X360 X
X740 Y(as)s
X460 X(written,)s
X712 X(without)s
X961 X(porting)s
X1153 X(.)s
X1237 X(Tools)s
X1434 X(learned)s
X1676 X(about)s
X360 X
X813 Y(their)s
X505 X(environment)s
X864 X(from)s
X1015 X(the)s
X1119 X(research)s
X1364 X(tool's)s
X1538 X(report)s
X1697 X(.)s
X360 X
X4005 Y
X3120 0 l
X360 X
X4093 Y
X408 X
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
Xf.CW 10 Z(drwxr)s
X608 X(-xr)s
X728 X(-x)s
X848 X(3)s
X928 X(root)s
X1128 X(/etc/dist)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(for)s
X2202 X(\256les)s
X2336 X(we)s
X2436 X(distribute)s
X360 X
X4173 Y
X408 X
Xf.CW 10 Z(drwxr)s
X608 X(-xr)s
X728 X(-x)s
X848 X(2)s
X928 X(root)s
X1128 X(/etc/dist/bin)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(distributed)s
X2411 X(tools)s
X2563 X(go)s
X2651 X(here)s
X360 X
X4253 Y
X408 X
Xf.CW 10 Z(-rwxr)s
X608 X(-xr)s
X728 X(-x)s
X848 X(1)s
X928 X(root)s
X1128 X(/etc/dist/bin/r)s
X1728 X(ealdir)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(used)s
X2247 X(by)s
X2335 X
Xf.B 10 Z(saenv)s
X2494 X(.setup)s
X360 X
X4333 Y
X408 X
Xf.CW 10 Z(-rwxr)s
X608 X(-xr)s
X728 X(-x)s
X848 X(1)s
X928 X(root)s
X1128 X(/etc/dist/bin/u)s
X1728 X(pd)s
X1808 X(-dist)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(distribution)s
X2433 X(tool)s
X2559 X(run)s
X2669 X(nightly)s
X2880 X(by)s
X2968 X
Xf.B 10 Z(cron)s
X360 X
X4413 Y
X408 X
Xf.CW 10 Z(-r)s
X488 X(-)s
X528 X(-r)s
X608 X(-)s
X648 X(-r)s
X728 X(-)s
X768 X(-)s
X848 X(1)s
X928 X(root)s
X1128 X(/etc/dist/saenv)s
X1728 X(.setup)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(research)s
X2348 X(tool)s
X2474 X(which)s
X2659 X(creates)s
X2868 X
Xf.B 10 Z(saenv)s
X360 X
X4493 Y
X408 X
Xf.CW 10 Z(-r)s
X488 X(-)s
X528 X(-r)s
X608 X(-)s
X648 X(-r)s
X728 X(-)s
X768 X(-)s
X848 X(1)s
X928 X(root)s
X1128 X(/etc/dist/sahea)s
X1728 X(d)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(sourced)s
X2332 X(by)s
X2420 X(every)s
X2590 X(tool,)s
X2733 X(sources)s
X2955 X
Xf.B 10 Z(saenv)s
X360 X
X4573 Y
X408 X
Xf.CW 10 Z(-r)s
X488 X(-)s
X528 X(-r)s
X608 X(-)s
X648 X(-r)s
X728 X(-)s
X768 X(-)s
X848 X(1)s
X928 X(root)s
X1128 X(/etc/saenv)s
X2048 X
Xf.R 10 Z(#)s
X2103 X(host)s
X2214 X(-speci\256c)s
X2463 X(sysadmin)s
X2737 X(environment)s
X360 X
X4685 Y
X1171 X(Figure)s
X1367 X(1:)s
X1463 X(Setup)s
X1637 X(of)s
X1714 X(system)s
X1922 X(administration)s
X2331 X(environment)s
X360 X
X940 Y
X863 X
Xf.B 10 Z(Implementation)s
X360 X
X1049 Y
X504 X
Xf.R 10 Z(Implementation)s
X955 X(began)s
X1141 X(by)s
X1235 X(creating)s
X1479 X
Xf.B 10 Z(saenv)s
X1638 X(.setup)s
Xf.R 10 Z(,)s
X360 X
X1122 Y(the)s
X502 X(con\256guration)s
X917 X(research)s
X1200 X(tool)s
X1304 X(.)s
X1403 X(\(The)s
X1589 X(accepted)s
X360 X
X1195 Y(pronunciation)s
X782 X(is)s
X880 X(unfortunately)s
X1292 X(awkward:)s
X1608 X("ess)s
X1717 X(-ay)s
X1802 X(-)s
X360 X
X1268 Y(env)s
X456 X(-dot)s
X563 X(-setup")s
X753 X(.\))s
X856 X(This)s
X1017 X(script)s
X1208 X(investigates)s
X1567 X(topics)s
X1769 X(of)s
X360 X
X1341 Y(interest)s
X584 X(to)s
X662 X(our)s
X776 X(toolset)s
X955 X(.)s
X1020 X(The)s
X1150 X(report)s
X1335 X(it)s
X1400 X(writes)s
X1591 X(is)s
X1663 X(called)s
X360 X
X1414 Y
Xf.B 10 Z(saenv)s
X548 X
Xf.R 10 Z(\(said)s
X707 X("ess)s
X816 X(-ay)s
X901 X(-env")s
X1075 X(or)s
X1158 X("ess)s
X1267 X(-ay)s
X1352 X(-ee)s
X1434 X(-en)s
X1519 X(-vee"\),)s
X1728 X(and)s
X360 X
X1487 Y(it)s
X425 X(describes)s
X701 X(the)s
X811 X(local)s
X970 X(system)s
X1184 X(administration)s
X1599 X(environ-)s
X360 X
X1560 Y(ment)s
X494 X(.)s
X557 X(Any)s
X695 X
Xf.B 10 Z(sh)s
X782 X
Xf.R 10 Z(script)s
X955 X(can)s
X1072 X(source)s
X1269 X(it)s
X1330 X(directly,)s
X1575 X(using)s
X1742 X(the)s
X360 X
X1633 Y(Bourne)s
X577 X(shell)s
X726 X(")s
X753 X
Xf.CW 10 Z(.)s
Xf.R 10 Z(")s
X842 X(command)s
X1105 X(.)s
X360 X
X1727 Y
X504 X(When)s
X694 X(a)s
X755 X(new)s
X897 X(master)s
X1107 X(version)s
X1334 X(of)s
X1420 X
Xf.B 10 Z(saenv)s
X1579 X(.setup)s
X1779 X
Xf.R 10 Z(is)s
X360 X
X1800 Y(created,)s
X598 X(it)s
X663 X(is)s
X735 X(distributed)s
X1048 X(to)s
X1127 X(each)s
X1277 X(host)s
X1415 X(and)s
X1537 X(run)s
X1625 X(.)s
X1690 X(Each)s
X360 X
X1873 Y(host)s
X498 X(thus)s
X636 X(has)s
X752 X(its)s
X843 X(own)s
X985 X(version)s
X1209 X(of)s
X1292 X
Xf.B 10 Z(saenv)s
X1451 X
Xf.R 10 Z(.)s
X1518 X(This)s
X1665 X(\256le)s
X1779 X(is)s
X360 X
X1946 Y(static,)s
X562 X(until)s
X727 X(a)s
X799 X(new)s
X951 X(version)s
X1188 X(of)s
X1284 X
Xf.B 10 Z(saenv)s
X1443 X(.setup)s
X1653 X
Xf.R 10 Z(comes)s
X360 X
X2019 Y(along)s
X508 X(.)s
X360 X
X2113 Y
X504 X(To)s
X613 X(make)s
X793 X(use)s
X918 X(of)s
X1009 X
Xf.B 10 Z(saenv)s
Xf.R 10 Z(,)s
X1221 X(we)s
X1335 X(distribute)s
X1624 X(another)s
X360 X
X2186 Y(\256le,)s
X496 X
Xf.B 10 Z(sahead)s
X724 X
Xf.R 10 Z(\("ess)s
X855 X(-ay)s
X940 X(-head"\))s
X1137 X(.)s
X1208 X(This)s
X1359 X(script)s
X1540 X(is)s
X1617 X(sourced)s
X360 X
X2259 Y(by)s
X469 X(every)s
X660 X(tool;)s
X826 X(in)s
X921 X(fact)s
X1065 X(most)s
X1238 X(tools)s
X1411 X(source)s
X1628 X
Xf.B 10 Z(sahead)s
X360 X
X2332 Y
Xf.R 10 Z(before)s
X568 X(doing)s
X757 X(anything)s
X1028 X(else)s
X1133 X(.)s
X1210 X
Xf.B 10 Z(sahead)s
X1444 X
Xf.R 10 Z(\(and)s
X1600 X(the)s
X1720 X(tool)s
X360 X
X2405 Y(using)s
X527 X(it\))s
X610 X(exits)s
X760 X(with)s
X902 X(an)s
X989 X(appropriate)s
X1317 X(error)s
X1470 X(message)s
X1721 X(if)s
X1786 X(it)s
X360 X
X2478 Y(\256nds)s
X517 X(any)s
X641 X(problems)s
X917 X(with)s
X1064 X
Xf.B 10 Z(saenv)s
Xf.R 10 Z(;)s
X1270 X(otherwise)s
X1558 X(it)s
X1624 X(sources)s
X360 X
X2551 Y
Xf.B 10 Z(saenv)s
X545 X
Xf.R 10 Z(in)s
X624 X(turn)s
X731 X(.)s
X797 X
Xf.B 10 Z(sahead)s
X1020 X
Xf.R 10 Z(also)s
X1155 X(sets)s
X1283 X(variables)s
X1552 X(which)s
X1742 X(are)s
X360 X
X2624 Y(constant)s
X623 X(throughout)s
X954 X(our)s
X1082 X(environment)s
X1419 X(.)s
X1498 X(\(It)s
X1600 X(has)s
X1728 X(one)s
X360 X
X2697 Y(last)s
X478 X(duty,)s
X637 X(which)s
X824 X(is)s
X893 X(to)s
X969 X(\256gure)s
X1149 X(out)s
X1259 X(the)s
X1366 X(name)s
X1536 X(of)s
X1616 X(the)s
X1723 X(cal-)s
X360 X
X2770 Y(ling)s
X486 X(script)s
X635 X(.\))s
X360 X
X2864 Y
X504 X(In)s
X588 X(this)s
X714 X(way,)s
X872 X(each)s
X1025 X(tool)s
X1159 X(quickly)s
X1389 X(sets)s
X1520 X(many)s
X1698 X(vari-)s
X360 X
X2937 Y(ables)s
X530 X(that)s
X663 X(it)s
X733 X(needs)s
X885 X(.)s
X955 X(From)s
X1130 X
Xf.B 10 Z(sahead)s
Xf.R 10 Z(,)s
X1374 X(it)s
X1443 X(gets)s
X1582 X(variables)s
X360 X
X3010 Y(which)s
X545 X(are)s
X649 X(global)s
X838 X(to)s
X912 X(our)s
X1022 X(environment)s
X1359 X(.)s
X1420 X(From)s
X1587 X
Xf.B 10 Z(saenv)s
Xf.R 10 Z(,)s
X1786 X(it)s
X360 X
X3083 Y(gets)s
X495 X(variables)s
X764 X(which)s
X953 X(are)s
X1061 X(local)s
X1218 X(to)s
X1296 X(the)s
X1404 X(host)s
X1541 X(the)s
X1649 X(tool)s
X1779 X(is)s
X360 X
X3156 Y(running)s
X588 X(on)s
X654 X(.)s
X360 X
X3250 Y
X504 X(Each)s
X664 X(host)s
X801 X(administered)s
X1174 X(by)s
X1267 X(the)s
X1376 X(Data)s
X1530 X(Center)s
X1735 X(has)s
X360 X
X3323 Y(a)s
X421 X(setup)s
X593 X(that)s
X725 X(looks)s
X900 X(like)s
X1032 X(Figure)s
X1237 X(1)s
X1270 X(.)s
X1340 X(A)s
X1419 X(few)s
X1549 X(comments)s
X360 X
X3396 Y(are)s
X471 X(in)s
X552 X(order)s
X692 X(.)s
X760 X(First,)s
X929 X
Xf.B 10 Z(/etc/dist)s
X1182 X
Xf.R 10 Z(is)s
X1256 X(our)s
X1374 X(target)s
X1557 X(for)s
X1664 X(distri-)s
X360 X
X3469 Y(buted)s
X537 X(con\256guration)s
X921 X(\256les)s
X1062 X(like)s
X1192 X
Xf.B 10 Z(/etc/hosts)s
X1456 X
Xf.R 10 Z(.)s
X1523 X(Distributed)s
X360 X
X3542 Y(system)s
X597 X(administration)s
X1035 X(tools)s
X1216 X(live)s
X1368 X(in)s
X1471 X
Xf.B 10 Z(/etc/dist/bin)s
Xf.R 10 Z(,)s
X360 X
X3615 Y(including)s
X654 X(the)s
X778 X(distribution)s
X1128 X(script)s
X1319 X
Xf.B 10 Z(upd)s
X1430 X(-dist)s
X1597 X
Xf.R 10 Z(\("update)s
X360 X
X3688 Y(distribution"\))s
X747 X(itself,)s
X929 X(and)s
X1056 X
Xf.B 10 Z(realdir)s
X1254 X
Xf.R 10 Z(.)s
X1324 X(This)s
X1474 X(last)s
X1599 X(script)s
X1779 X(is)s
X360 X
X3761 Y(used)s
X515 X(by)s
X614 X
Xf.B 10 Z(saenv)s
X773 X(.setup)s
X975 X
Xf.R 10 Z(to)s
X1060 X(determine)s
X1361 X(the)s
X1475 X(real)s
X1608 X(location)s
X360 X
X3834 Y(for)s
X464 X(certain)s
X674 X(\256les)s
X813 X(\320)s
X907 X(for)s
X1011 X(example,)s
X1282 X(does)s
X1431 X
Xf.B 10 Z(aliases)s
X1644 X
Xf.R 10 Z(live)s
X1772 X(in)s
X360 X
X3907 Y
Xf.B 10 Z(/etc)s
X483 X
Xf.R 10 Z(or)s
X560 X
Xf.B 10 Z(/usr/lib)s
Xf.R 10 Z(?)s
X2016 X
X448 Y
X2160 X(Although)s
X2452 X(they)s
X2608 X(are)s
X2732 X(shell)s
X2901 X(scripts,)s
X3135 X
Xf.B 10 Z(saenv)s
X3294 X(.setup)s
Xf.R 10 Z(,)s
X2016 X
X521 Y
Xf.B 10 Z(sahead)s
Xf.R 10 Z(,)s
X2273 X(and)s
X2413 X
Xf.B 10 Z(saenv)s
X2616 X
Xf.R 10 Z(have)s
X2786 X(no)s
X2896 X(execute)s
X3144 X(permissions)s
X3463 X(.)s
X2016 X
X594 Y(The)s
X2145 X(last)s
X2264 X(two)s
X2389 X(are)s
X2496 X(intended)s
X2751 X(only)s
X2894 X(for)s
X2996 X(sourcing)s
X3251 X(by)s
X3343 X(other)s
X2016 X
X667 Y(tools)s
X2146 X(.)s
X2219 X(The)s
X2357 X(preferred)s
X2635 X(way)s
X2780 X(to)s
X2866 X(run)s
X2988 X
Xf.B 10 Z(saenv)s
X3147 X(.setup)s
X3350 X
Xf.R 10 Z(is)s
X3428 X(to)s
X2016 X
X740 Y(explicitly)s
X2295 X(use)s
X2409 X
Xf.B 10 Z(sh)s
Xf.R 10 Z(,)s
X2514 X(because)s
X2752 X(we)s
X2856 X(want)s
X3012 X(to)s
X3090 X(make)s
X3261 X(sure)s
X3398 X(the)s
X2016 X
X813 Y(script)s
X2206 X(isn't)s
X2365 X(run)s
X2493 X(by)s
X2599 X(some)s
X2780 X(other)s
X2957 X(interpreter)s
X3276 X(\(this)s
X3435 X(is)s
X2016 X
X886 Y(probably)s
X2274 X(overkill,)s
X2521 X(but)s
X2628 X(no)s
X2716 X(harm)s
X2875 X(done\))s
X3026 X(.)s
X2016 X
X988 Y
X2064 X
Xf.CW 10 Z(sh)s
X2184 X(/etc/dist/saenv)s
X2784 X(.setup)s
X2016 X
X1111 Y
Xf.R 10 Z(This)s
X2163 X(is)s
X2236 X(how)s
X2378 X
Xf.B 10 Z(upd)s
X2489 X(-dist)s
X2643 X
Xf.R 10 Z(does)s
X2793 X(it)s
X2859 X(whenever)s
X3147 X(it)s
X3214 X(uploads)s
X3450 X(a)s
X2016 X
X1184 Y(new)s
X2149 X(version)s
X2367 X(of)s
X2444 X
Xf.B 10 Z(saenv)s
X2603 X(.setup)s
X2772 X
Xf.R 10 Z(.)s
X2016 X
X1278 Y
X2160 X(Similarly,)s
X2458 X(because)s
X2701 X(they)s
X2847 X(are)s
X2960 X(distributed)s
X3278 X(but)s
X3395 X(not)s
X2016 X
X1351 Y(executable,)s
X2369 X
Xf.B 10 Z(saenv)s
X2528 X(.setup)s
X2746 X
Xf.R 10 Z(and)s
X2891 X
Xf.B 10 Z(sahead)s
X3135 X
Xf.R 10 Z(are)s
X3265 X(kept)s
X3428 X(in)s
X2016 X
X1424 Y
Xf.B 10 Z(/etc/dist)s
X2240 X
Xf.R 10 Z(.)s
X2302 X(Since)s
X2474 X
Xf.B 10 Z(saenv)s
X2656 X
Xf.R 10 Z(is)s
X2724 X(not)s
X2832 X(distributed,)s
X3158 X(we)s
X3259 X(put)s
X3367 X(it)s
X3428 X(in)s
X2016 X
X1497 Y
Xf.B 10 Z(/etc)s
X2117 X
Xf.R 10 Z(.)s
X2016 X
X1624 Y
X2609 X
Xf.B 10 Z(Examples)s
X2016 X
X1733 Y
X2160 X
Xf.R 10 Z(After)s
X2343 X(some)s
X2526 X(initialization,)s
X2927 X(the)s
X3052 X(\256rst)s
X3199 X(thing)s
X3379 X(that)s
X2016 X
X1806 Y
Xf.B 10 Z(saenv)s
X2175 X(.setup)s
X2369 X
Xf.R 10 Z(does)s
X2516 X(is)s
X2586 X(to)s
X2663 X(determine)s
X2956 X(a)s
X3011 X(valid)s
X3188 X
Xf.CW 10 Z(PATH)s
X3372 X
Xf.R 10 Z(\(see)s
X2016 X
X1879 Y(Figure)s
X2213 X(2\))s
X2268 X(.)s
X2330 X(It)s
X2394 X(tests)s
X2538 X(a)s
X2592 X(list)s
X2699 X(of)s
X2778 X(desirable)s
X3044 X(directory)s
X3309 X(names)s
X2016 X
X1952 Y(to)s
X2095 X(see)s
X2208 X(if)s
X2275 X(they)s
X2416 X(exist,)s
X2586 X(adding)s
X2793 X(each)s
X2942 X(directory)s
X3209 X(it)s
X3273 X(\256nds)s
X3428 X(to)s
X2016 X
X2025 Y(a)s
X2097 X(variable)s
X2382 X
Xf.CW 10 Z($path)s
X2582 X
Xf.R 10 Z(.)s
X2672 X(When)s
X2882 X(the)s
X3015 X(search)s
X3237 X(is)s
X3334 X(done,)s
X2016 X
X2098 Y
Xf.B 10 Z(saenv)s
X2175 X(.setup)s
X2366 X
Xf.R 10 Z(does)s
X2016 X
X2200 Y
X2064 X
Xf.CW 10 Z(PATH=$path)s
X2504 X(;)s
X2584 X(export)s
X2864 X(PATH)s
X2016 X
X2323 Y
Xf.R 10 Z(for)s
X2122 X(itself)s
X2257 X(.)s
X2325 X(It)s
X2396 X(also)s
X2534 X(puts)s
X2675 X(the)s
X2787 X(same)s
X2955 X(code)s
X3111 X(into)s
X3245 X(the)s
X3357 X(tem-)s
X2016 X
X2396 Y(porary)s
X2213 X(version)s
X2433 X(of)s
X2511 X
Xf.B 10 Z(saenv)s
X2693 X
Xf.R 10 Z(\(see)s
X2824 X(Figures)s
X3047 X(2)s
X3103 X(and)s
X3222 X(5\))s
X3277 X(.)s
X3339 X(After)s
X2016 X
X2469 Y(initial)s
X2201 X(comments,)s
X2520 X(setting)s
X2726 X(the)s
X2854 X
Xf.CW 10 Z(PATH)s
X3042 X
Xf.R 10 Z(will)s
X3175 X(be)s
X3266 X(the)s
X3376 X(\256rst)s
X2016 X
X2542 Y(thing)s
X2191 X(that)s
X2329 X
Xf.B 10 Z(saenv)s
X2525 X
Xf.R 10 Z(does)s
X2684 X(for)s
X2798 X(any)s
X2931 X(calling)s
X3151 X(script)s
X3300 X(.)s
X3376 X(The)s
X2016 X
X2615 Y
Xf.B 10 Z(saenv)s
X2175 X(.setup)s
X2376 X
Xf.R 10 Z(script)s
X2557 X(installs)s
X2780 X(the)s
X2894 X(temporary)s
X3200 X(version)s
X3428 X(in)s
X2016 X
X2688 Y
Xf.B 10 Z(/etc)s
X2143 X
Xf.R 10 Z(if)s
X2210 X(all)s
X2303 X(goes)s
X2450 X(well)s
X2566 X(.)s
X2630 X(Note)s
X2785 X(that)s
X2911 X
Xf.B 10 Z(saenv)s
X3095 X
Xf.R 10 Z(contains)s
X3343 X(com-)s
X2016 X
X2761 Y(ments)s
X2198 X(about)s
X2368 X(the)s
X2472 X(purpose)s
X2704 X(of)s
X2781 X(each)s
X2926 X(variable)s
X3142 X(.)s
X2016 X
X2855 Y
X2160 X(The)s
X2307 X(list)s
X2433 X(of)s
X2531 X(desirable)s
X2816 X(directories)s
X3142 X(is)s
X3231 X(compiled)s
X2016 X
X2928 Y(based)s
X2193 X(on)s
X2284 X(our)s
X2397 X(experience)s
X2711 X(with)s
X2854 X(different)s
X3104 X
Xf.R 8 Z(UNIX)s
Xf.R 10 Z(s)s
X3262 X(.)s
X3325 X(Many)s
X2016 X
X3001 Y(of)s
X2102 X(them)s
X2267 X(are)s
X2380 X(common)s
X2644 X(to)s
X2727 X(System)s
X2955 X(V,)s
X3051 X(BSD,)s
X3229 X(and)s
X3357 X(their)s
X2016 X
X3074 Y(derivitives)s
X2299 X(.)s
X2360 X(Others)s
X2560 X(are)s
X2664 X(vendor)s
X2870 X(speci\256c)s
X3075 X(.)s
X2016 X
X3168 Y
X2160 X(The)s
X2294 X
Xf.B 10 Z(cron)s
X2455 X
Xf.R 10 Z(setup)s
X2627 X(is)s
X2703 X(a)s
X2764 X(good)s
X2927 X(place)s
X3100 X(to)s
X3183 X(illustrate)s
X3450 X(a)s
X2016 X
X3241 Y(dynamic)s
X2279 X(testing)s
X2490 X(approach)s
X2734 X(.)s
X2805 X(We)s
X2930 X(can)s
X3055 X(show)s
X3227 X(examples)s
X2016 X
X3314 Y(of)s
X2093 X(several)s
X2305 X(of)s
X2382 X(the)s
X2486 X(items)s
X2654 X(listed)s
X2822 X(in)s
X2896 X(the)s
X3000 X(introduction:)s
X2016 X
X3387 Y
X2079 X
Xf.Y 10 Z(\017)s
X2150 X
Xf.R 10 Z(Procedures)s
X2468 X(for)s
X2567 X(changing)s
X2833 X(con\256guration)s
X3210 X(\256les)s
X3344 X(\(do)s
X2016 X
X3460 Y
X2150 X(we)s
X2274 X(have)s
X2446 X(to)s
X2544 X(run)s
X2678 X(the)s
X2805 X
Xf.B 10 Z(crontab)s
X3072 X
Xf.R 10 Z(command)s
X3380 X(to)s
X2016 X
X3533 Y
X2150 X(install)s
X2337 X(a)s
X2389 X(new)s
X2522 X
Xf.B 10 Z(crontab)s
X2766 X
Xf.R 10 Z(\256le\))s
X2016 X
X3606 Y
X2079 X
Xf.Y 10 Z(\017)s
X2150 X
Xf.R 10 Z(Con\256guration)s
X2583 X(\256le)s
X2733 X(location/name)s
X3177 X(\(the)s
X3346 X(\256le)s
X2016 X
X3679 Y
X2150 X
Xf.B 10 Z(/usr/lib/cront)s
X2527 X(ab)s
X2654 X
Xf.R 10 Z(vs)s
X2713 X(.)s
X2809 X(an)s
X2928 X(alternate)s
X3216 X(location)s
X2016 X
X3752 Y
X2150 X
Xf.B 10 Z(/usr/spool/cro)s
X2541 X(n/crontabs/root)s
X2982 X
Xf.R 10 Z(\))s
X2016 X
X3825 Y
X2079 X
Xf.Y 10 Z(\017)s
X2150 X
Xf.R 10 Z(Con\256guration)s
X2547 X(\256le)s
X2661 X(format)s
X2867 X(\(4)s
X2922 X(.3BSD)s
X3129 X(and)s
X3254 X(derivi-)s
X2016 X
X3898 Y
X2150 X(tives)s
X2299 X(vs)s
X2358 X(.)s
X2397 X(everybody)s
X2699 X(else\))s
X360 X
X4967 Y
Xf.B 10 Z(12)s
X2096 X(LISA)s
X2273 X(V)s
X2343 X(\261)s
X2398 X(Sep)s
X2502 X(.)s
X2541 X(30)s
X2607 X(-Oct)s
X2733 X(.)s
X2772 X(3,)s
X2844 X(1991)s
X2998 X(\261)s
X3053 X(San)s
X3182 X(Diego,)s
X3384 X(CA)s
X5280 Y
Xpagebot
X
X%%Page: 13 3
Xpagetop
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 10 Z
X600 X
X493 Y
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
Xf.R 10 Z
X3120 0 l
X600 X
X661 Y
X648 X
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
Xf.CW 10 Z(##)s
X768 X(This)s
X968 X(is)s
X1088 X(saenv)s
X1288 X(.setup)s
X1568 X(which)s
X1808 X(should)s
X2088 X(be)s
X2208 X(444)s
X2368 X(root)s
X2528 X(.)s
X2648 X([rest)s
X2888 X(of)s
X3008 X(header)s
X3288 X(deleted])s
X600 X
X821 Y
X648 X(##)s
X768 X(set)s
X928 X(PATH)s
X1128 X(environment)s
X1608 X(variable)s
X1928 X(.)s
X600 X
X901 Y
X648 X(#)s
X728 X(1\))s
X848 X(We)s
X968 X(always)s
X1248 X(want)s
X1448 X(the)s
X1608 X(stuff)s
X1848 X(in)s
X1968 X($local,)s
X2288 X(need)s
X2488 X(to)s
X2608 X(test)s
X2808 X(the)s
X2968 X(rest)s
X3128 X(.)s
X600 X
X981 Y
X648 X(#)s
X728 X(2\))s
X848 X(Want)s
X1048 X(BSD)s
X1208 X(dirs)s
X1408 X(before)s
X1688 X(SysV)s
X1888 X(dirs,)s
X2128 X(so)s
X2248 X(/usr/ucb)s
X2608 X(before)s
X2888 X({/usr,}/bin)s
X3328 X(.)s
X600 X
X1061 Y
X648 X(#)s
X728 X(3\))s
X848 X(Put)s
X1008 X(OS)s
X1128 X(bin)s
X1288 X(directories,)s
X1808 X(then)s
X2008 X(vendor)s
X2288 X(stuff,)s
X2568 X(and)s
X2728 X(local)s
X2968 X(stuff)s
X3208 X(last)s
X3368 X(.)s
X600 X
X1141 Y
X648 X(guesscommon="/u)s
X1248 X(sr/ucb)s
X1528 X(/usr/bin)s
X1888 X(/bin)s
X2088 X(/etc)s
X2288 X(/usr/etc")s
X600 X
X1221 Y
X648 X(guessvendor="/u)s
X1248 X(sr/sbin)s
X1568 X(/usr/amdahl/bin)s
X2208 X(/usr/lbin)s
X2608 X(/sbin")s
X600 X
X1301 Y
X648 X(for)s
X808 X(dir)s
X968 X(in)s
X1088 X($guesscommon)s
X1608 X($guessvendor)s
X2128 X(;)s
X2208 X(do)s
X600 X
X1381 Y
X968 X(if)s
X1088 X(test)s
X1288 X(-d)s
X1408 X($dir)s
X1608 X(;)s
X1688 X(then)s
X600 X
X1461 Y
X1288 X(path=$path:$di)s
X1848 X(r)s
X600 X
X1541 Y
X968 X(fi)s
X600 X
X1621 Y
X648 X(done)s
X600 X
X1701 Y
X648 X(path=`echo)s
X1088 X($path)s
X1328 X(|)s
X1408 X(sed)s
X1568 X(-e)s
X1688 X('s/^://'`)s
X2248 X(#)s
X2328 X(strip)s
X2568 X(leading)s
X2888 X(colon)s
X600 X
X1781 Y
X648 X(path="$path:$DT)s
X1248 X(GTBIN:/usr/loca)s
X1848 X(l/bin")s
X2248 X(#)s
X2328 X(add)s
X2488 X(local)s
X2728 X(directories)s
X600 X
X1861 Y
X648 X(PATH="$path")s
X1168 X(;)s
X1248 X(export)s
X1528 X(PATH)s
X2248 X(#)s
X2328 X(PATH)s
X2528 X(now)s
X2688 X(set)s
X2848 X(for)s
X3008 X(saenv)s
X3208 X(.setup)s
X600 X
X1981 Y
X648 X(##)s
X768 X(initial)s
X1088 X(setup)s
X1328 X(of)s
X1448 X(temporary)s
X1848 X(saenv)s
X600 X
X2061 Y
X648 X(tsaenv=/tmp/sae)s
X1248 X(nvt$$)s
X1608 X(#)s
X1688 X(temporary)s
X2088 X(sysadmin)s
X2448 X(environment)s
X2928 X(file)s
X600 X
X2141 Y
X648 X(echo)s
X848 X("$HEADER")s
X1248 X(>)s
X1328 X($tsaenv)s
X1928 X(#)s
X2008 X(create)s
X2288 X($tsaenv)s
X600 X
X2221 Y
X648 X(echo)s
X848 X("PATH=$PATH)s
X1608 X(#)s
X1688 X(exportable)s
X2128 X(PATH")s
X2368 X(>>)s
X2488 X($tsaenv)s
X600 X
X2301 Y
X648 X(echo)s
X848 X("export)s
X1168 X(PATH")s
X1408 X(>>)s
X1528 X($tsaenv)s
X600 X
X2413 Y
X1453 X
Xf.R 10 Z(Figure)s
X1649 X(2:)s
X1745 X(Sample)s
X1968 X(code)s
X2116 X(from)s
X2267 X
Xf.B 10 Z(saenv)s
X2426 X(.setup)s
X2617 X
Xf.R 10 Z(\320)s
X2706 X
Xf.CW 10 Z(PATH)s
X600 X
X2461 Y
Xf.R 10 Z
X3120 0 l
X600 X
X2573 Y
X648 X
Xf.CW 10 Z(##)s
X768 X(CRONCMD_B)s
X1168 X(-)s
X1248 X(do)s
X1368 X(we)s
X1488 X(use)s
X1648 X(the)s
X1808 X(crontab)s
X2128 X(command?)s
X600 X
X2733 Y
X648 X(bool=false)s
X600 X
X2813 Y
X648 X(if)s
X768 X(\()s
X848 X(crontab)s
X1168 X(-l)s
X1288 X(\))s
X1368 X(>)s
X1448 X(/dev/null)s
X1848 X(2>&1)s
X2048 X(;)s
X2128 X(then)s
X600 X
X2893 Y
X968 X(bool=true)s
X600 X
X2973 Y
X648 X(fi)s
X600 X
X3053 Y
X648 X(echo)s
X848 X("CRONCMD_B=$boo)s
X1448 X(l)s
X1608 X(#)s
X1688 X(do)s
X1808 X(we)s
X1928 X(use)s
X2088 X(the)s
X2248 X(crontab)s
X2568 X(command?")s
X2968 X(>>)s
X3088 X($tsaenv)s
X600 X
X3173 Y
X648 X(##)s
X768 X(CRON_P)s
X1048 X(-)s
X1128 X(Where)s
X1368 X(does)s
X1568 X(the)s
X1728 X(\(root\))s
X2008 X(crontab)s
X2328 X(file)s
X2528 X(really)s
X2808 X(live)s
X600 X
X3253 Y
X648 X(x=`/etc/dist/bi)s
X1248 X(n/realdir)s
X1648 X(crontab)s
X1968 X(/usr/etc)s
X2328 X(/etc)s
X2528 X(/usr/lib)s
X2888 X(/private)s
X3208 X(.MC68020/usr/li)s
X3808 X(b`)s
X600 X
X3333 Y
X648 X(if)s
X768 X(test)s
X968 X(-z)s
X1088 X("$x")s
X1288 X(;)s
X1368 X(then)s
X600 X
X3413 Y
X968 X(if)s
X1088 X([)s
X1168 X(-d)s
X1288 X(/usr/spool/cron)s
X1888 X(/crontabs)s
X2288 X(])s
X2368 X(;)s
X2448 X(then)s
X600 X
X3493 Y
X1288 X(cpath=/usr/spo)s
X1848 X(ol/cron/crontab)s
X2448 X(s/root)s
X600 X
X3573 Y
X968 X(fi)s
X600 X
X3653 Y
X648 X(else)s
X600 X
X3733 Y
X968 X(cpath=$x/cront)s
X1528 X(ab)s
X600 X
X3813 Y
X648 X(fi)s
X600 X
X3893 Y
X648 X(echo)s
X848 X("CRON_P=$cpath)s
X1608 X(#)s
X1688 X(path)s
X1888 X(to)s
X2008 X(real)s
X2208 X(crontab)s
X2528 X(file")s
X2768 X(>>)s
X2888 X($tsaenv)s
X600 X
X4013 Y
X648 X(##)s
X768 X(CRON43_B)s
X1128 X(-)s
X1208 X(Are)s
X1368 X(we)s
X1488 X(a)s
X1568 X(4)s
X1608 X(.3)s
X1728 X(crontab)s
X2048 X(host?)s
X600 X
X4093 Y
X648 X(#)s
X728 X(count)s
X968 X(lines)s
X1208 X(which)s
X1448 X(aren't)s
X1728 X(comments)s
X2088 X(and)s
X2248 X(have)s
X2448 X("root")s
X2728 X(as)s
X2848 X(the)s
X3008 X(sixth)s
X3248 X(field)s
X600 X
X4173 Y
X648 X(x=`awk)s
X928 X('$1)s
X1088 X(!~)s
X1208 X(/^#/)s
X1408 X(&&)s
X1528 X($6)s
X1648 X(==)s
X1768 X("root")s
X2048 X({print}')s
X2408 X($CRON_P)s
X2728 X(|)s
X2808 X(wc)s
X2928 X(-l`)s
X600 X
X4253 Y
X648 X(bool=false)s
X600 X
X4333 Y
X648 X(if)s
X768 X(test)s
X968 X($x)s
X1088 X(-gt)s
X1248 X(0)s
X1328 X(;)s
X1408 X(then)s
X600 X
X4413 Y
X968 X(bool=true)s
X600 X
X4493 Y
X648 X(fi)s
X600 X
X4573 Y
X648 X(echo)s
X848 X("CRON43_B=$bool)s
X1608 X(#)s
X1688 X(is)s
X1808 X(the)s
X1968 X(crontab)s
X2288 X(file)s
X2488 X(in)s
X2608 X(4)s
X2648 X(.3BSD)s
X2888 X(format?")s
X3248 X(>>)s
X3368 X($tsaenv)s
X600 X
X4685 Y
X1336 X
Xf.R 10 Z(Figure)s
X1532 X(3:)s
X1628 X(Sample)s
X1851 X(code)s
X1999 X(from)s
X2150 X
Xf.B 10 Z(saenv)s
X2309 X(.setup)s
X2500 X
Xf.R 10 Z(\320)s
X2589 X
Xf.B 10 Z(cron)s
X2741 X
Xf.R 10 Z(variables)s
X600 X
X4967 Y
Xf.B 10 Z(LISA)s
X777 X(V)s
X847 X(\261)s
X902 X(Sep)s
X1006 X(.)s
X1045 X(30)s
X1111 X(-Oct)s
X1237 X(.)s
X1276 X(3,)s
X1348 X(1991)s
X1502 X(\261)s
X1557 X(San)s
X1686 X(Diego,)s
X1888 X(CA)s
X3654 X(13)s
X5280 Y
Xpagebot
X
X%%Page: 14 4
Xpagetop
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 10 Z
X360 X
X448 Y
X504 X
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
Xf.R 10 Z(The)s
X640 X(code)s
X798 X(to)s
X882 X(research)s
X1138 X(these)s
X1309 X(items)s
X1488 X(is)s
X1566 X(shown)s
X1772 X(in)s
X360 X
X521 Y(Figure)s
X568 X(3,)s
X652 X(and)s
X782 X(the)s
X898 X(results)s
X1107 X(can)s
X1234 X(be)s
X1330 X(seen)s
X1482 X(in)s
X1567 X(Figure)s
X1774 X(5)s
X1807 X(.)s
X360 X
X594 Y(Since)s
X548 X
Xf.B 10 Z(saenv)s
X707 X(.setup)s
X915 X
Xf.R 10 Z(has)s
X1043 X(already)s
X1279 X(determined)s
X1620 X(a)s
X1690 X(valid)s
X360 X
X667 Y
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
Xf.CW 10 Z(PATH)s
Xf.R 10 Z(,)s
X565 X(the)s
X675 X(simplest)s
X927 X(way)s
X1066 X(to)s
X1146 X(see)s
X1260 X(if)s
X1329 X(the)s
X1438 X
Xf.B 10 Z(crontab)s
X1687 X
Xf.R 10 Z(com-)s
X360 X
X740 Y(mand)s
X530 X(is)s
X597 X(on)s
X686 X(this)s
X806 X(system)s
X1015 X(is)s
X1083 X(to)s
X1158 X(run)s
X1269 X(a)s
X1322 X(benign)s
X1544 X
Xf.CW 10 Z(crontab)s
X360 X
X813 Y
X360 X(-l)s
X466 X
Xf.R 10 Z(command)s
X729 X(.)s
X794 X(This)s
X939 X(is)s
X1010 X(done)s
X1165 X(in)s
X1243 X(a)s
X1299 X(subshell)s
X1544 X(so)s
X1628 X(we)s
X1731 X(can)s
X360 X
X886 Y(throw)s
X556 X(away)s
X738 X(any)s
X893 X
Xf.CW 10 Z(crontab:)s
X1273 X(not)s
X1453 X(found)s
X1695 X
Xf.R 10 Z(error)s
X360 X
X959 Y(messages)s
X651 X(from)s
X818 X
Xf.B 10 Z(sh)s
X919 X
Xf.R 10 Z(\(if)s
X1020 X(it)s
X1096 X(is)s
X1179 X(not)s
X1302 X(on)s
X1405 X(the)s
X1524 X(system\))s
X1769 X(or)s
X360 X
X1032 Y
Xf.B 10 Z(crontab)s
X623 X
Xf.R 10 Z(output)s
X834 X(\(if)s
X938 X(it)s
X1017 X(is\))s
X1084 X(.)s
X1164 X(The)s
X1309 X(exit)s
X1451 X(status)s
X1645 X(of)s
X1742 X(the)s
X360 X
X1105 Y
Xf.B 10 Z(crontab)s
X605 X
Xf.R 10 Z(subshell)s
X847 X(tells)s
X983 X(us)s
X1065 X(what)s
X1218 X(we)s
X1319 X(need)s
X1468 X(to)s
X1542 X(know,)s
X1728 X(and)s
X360 X
X1178 Y(we)s
X460 X(set)s
X575 X
Xf.CW 10 Z(CRONCMD_B)s
X957 X
Xf.R 10 Z(accordingly)s
X1272 X(.)s
X360 X
X2373 Y
X3120 0 l
X360 X
X2461 Y
X408 X
Xf.CW 10 Z(##)s
X528 X(DUMP_P)s
X808 X(-)s
X888 X(Find)s
X1088 X(path)s
X1288 X(to)s
X1408 X(BSD)s
X1568 X(dump)s
X1768 X(backup)s
X2048 X(program)s
X2368 X(-)s
X2448 X(avoid)s
X2688 X(SysV)s
X2888 X(dump)s
X360 X
X2541 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X2621 Y
X408 X(for)s
X568 X(guess)s
X808 X(in)s
X928 X(/usr/etc/dump)s
X1488 X(/bin/dump)s
X1888 X(/etc/dump)s
X2288 X(/etc/bsddump)s
X2808 X(\\)s
X360 X
X2701 Y
X408 X(/etc/fdump)s
X848 X(/etc/dumpfs)s
X1328 X(/etc/fsdump)s
X1808 X(;)s
X1888 X(do)s
X360 X
X2781 Y
X728 X(if)s
X848 X(ls)s
X968 X(-dF)s
X1128 X($guess)s
X1408 X(2>&1)s
X1608 X(|)s
X1688 X(grep)s
X1888 X('\\*)s
X2048 X(*$')s
X2208 X(>)s
X2288 X(/dev/null)s
X2688 X(;)s
X2768 X(then)s
X360 X
X2861 Y
X1048 X(if)s
X1168 X(test)s
X1368 X(-n)s
X1488 X("`$guess)s
X1848 X(W)s
X1928 X(2>)s
X2048 X(/dev/null`")s
X2528 X(;)s
X2608 X(then)s
X360 X
X2941 Y
X1368 X(dump=$guess)s
X2008 X(#)s
X2088 X(found)s
X2328 X(it)s
X360 X
X3021 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X3101 Y
X408 X(echo)s
X608 X("DUMP_P=$dump)s
X1368 X(#)s
X1448 X(BSD)s
X1608 X(dump)s
X1808 X(path:)s
X2048 X(many)s
X2248 X(variations")s
X2728 X(>>)s
X2848 X($tsaenv)s
X360 X
X3213 Y
X1134 X
Xf.R 10 Z(Figure)s
X1330 X(4:)s
X1426 X(Sample)s
X1649 X(code)s
X1797 X(from)s
X1948 X
Xf.B 10 Z(saenv)s
X2107 X(.setup)s
X2298 X
Xf.R 10 Z(\320)s
X2387 X(BSD)s
X2538 X
Xf.B 10 Z(dump)s
X360 X
X3261 Y
Xf.R 10 Z
X3120 0 l
X360 X
X3373 Y
X408 X
Xf.CW 10 Z(:)s
X360 X
X3453 Y
X408 X(#)s
X488 X(This)s
X688 X(is)s
X808 X(/etc/saenv)s
X1248 X(which)s
X1488 X(should)s
X1768 X(be)s
X1888 X(444)s
X2048 X(root)s
X2208 X(.)s
X2328 X([)s
X2408 X(rest)s
X2608 X(of)s
X2728 X(header)s
X3008 X(deleted)s
X3328 X(])s
X360 X
X3533 Y
X408 X(PATH=/usr/ucb:/)s
X1008 X(usr/bin:/bin:/e)s
X1608 X(tc:/usr/etc)s
X2328 X(#)s
X2408 X(exportable)s
X2848 X(PATH)s
X360 X
X3613 Y
X408 X(export)s
X688 X(PATH)s
X360 X
X3693 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X3773 Y
X408 X(CRONCMD_B=false)s
X1368 X(#)s
X1448 X(do)s
X1568 X(we)s
X1688 X(use)s
X1848 X(the)s
X2008 X(crontab)s
X2328 X(command?)s
X360 X
X3853 Y
X408 X(CRON_P=/etc/cro)s
X1008 X(ntab)s
X1368 X(#)s
X1448 X(path)s
X1648 X(to)s
X1768 X(real)s
X1968 X(crontab)s
X2288 X(file)s
X360 X
X3933 Y
X408 X(CRON43_B=false)s
X1368 X(#)s
X1448 X(is)s
X1568 X(the)s
X1728 X(crontab)s
X2048 X(file)s
X2248 X(in)s
X2368 X(4)s
X2408 X(.3BSD)s
X2648 X(format?)s
X360 X
X4013 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X4093 Y
X408 X(DUMP_P=/bin/dum)s
X1008 X(p)s
X1368 X(#)s
X1448 X(BSD)s
X1608 X(dump)s
X1808 X(path:)s
X2048 X(many)s
X2248 X(variations)s
X360 X
X4173 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X4253 Y
X408 X(HOST=howdy)s
X1368 X(#)s
X1448 X(the)s
X1608 X(name)s
X1808 X(of)s
X1928 X(this)s
X2128 X(host)s
X360 X
X4333 Y
X408 X(CSH_P=/usr/bin/)s
X1008 X(csh)s
X1368 X(#)s
X1448 X(path)s
X1648 X(to)s
X1768 X(csh)s
X360 X
X4413 Y
X408 X(ECHOPRE=')s
X768 X(-n')s
X1368 X(#)s
X1448 X(echo's)s
X1728 X(no)s
X1808 X(-newline)s
X2168 X(prefix:)s
X2488 X(')s
X2528 X(-n')s
X2688 X(\(BSD\),)s
X2968 X('')s
X3168 X(\(SysV\))s
X360 X
X4493 Y
X408 X(ECHOSUF='')s
X1368 X(#)s
X1448 X(echo's)s
X1728 X(no)s
X1808 X(-newline)s
X2168 X(suffix:)s
X2488 X('')s
X2688 X(\(BSD\),)s
X2968 X('\\c')s
X3168 X(\(SysV\))s
X360 X
X4573 Y
X408 X(PSALL_K=ax)s
X1368 X(#)s
X1448 X(ps)s
X1568 X(key)s
X1728 X(to)s
X1848 X(get)s
X2008 X(all)s
X2168 X(processes:)s
X2608 X('ax')s
X2808 X(\(BSD\),)s
X3088 X(')s
X3128 X(-e')s
X3288 X(\(SysV\))s
X360 X
X4685 Y
X781 X
Xf.R 10 Z(Figure)s
X977 X(5:)s
X1073 X(Sample)s
X1296 X(code)s
X1444 X(from)s
X1595 X
Xf.B 10 Z(saenv)s
X1776 X
Xf.R 10 Z(\(including)s
X2072 X(code)s
X2220 X(written)s
X2432 X(by)s
X2520 X(Figures)s
X2742 X(2,)s
X2814 X(3,)s
X2886 X(and)s
X3004 X(4\))s
X360 X
X1272 Y
X504 X(The)s
X634 X(full)s
X754 X(path)s
X896 X(to)s
X975 X(the)s
X1084 X
Xf.B 10 Z(crontab)s
X1333 X
Xf.R 10 Z(\256le,)s
X1463 X(including)s
X1742 X(the)s
X360 X
X1345 Y(directory)s
X646 X(it)s
X729 X(really)s
X927 X(lives)s
X1099 X(in,)s
X1213 X(is)s
X1303 X(established)s
X1646 X(in)s
X1742 X(the)s
X360 X
X1418 Y
Xf.CW 10 Z(CRON_P)s
X627 X
Xf.R 10 Z(paragraph)s
X893 X(.)s
X959 X(\(Our)s
X1111 X(tools)s
X1268 X(do)s
X1361 X(not)s
X1473 X(need)s
X1626 X(to)s
X1706 X(han-)s
X360 X
X1491 Y(dle)s
X477 X
Xf.B 10 Z(crontab)s
X734 X
Xf.R 10 Z(\256les)s
X881 X(for)s
X993 X(non)s
X1092 X(-root)s
X1256 X(users)s
X1393 X(.\))s
X1488 X(The)s
X1626 X
Xf.B 10 Z(realdir)s
X360 X
X1564 Y
Xf.R 10 Z(script)s
X539 X(is)s
X614 X(given)s
X792 X(a)s
X852 X(\256lename)s
X1113 X(to)s
X1195 X(look)s
X1343 X(for,)s
X1467 X(and)s
X1594 X(a)s
X1655 X(list)s
X1769 X(of)s
X360 X
X1637 Y(guesses)s
X587 X(about)s
X758 X(where)s
X944 X(to)s
X1019 X(\256nd)s
X1145 X(it)s
X1183 X(.)s
X1245 X(The)s
X1371 X(list)s
X1476 X(of)s
X1553 X(guesses)s
X1779 X(is)s
X360 X
X1710 Y(again)s
X545 X(based)s
X737 X(on)s
X843 X(our)s
X971 X(experience)s
X1261 X(.)s
X1341 X(The)s
X1504 X
Xf.CW 10 Z(CRON43_B)s
X360 X
X1783 Y
Xf.R 10 Z(paragraph)s
X651 X(assumes)s
X899 X(that)s
X1025 X(if)s
X1091 X(we)s
X1194 X(\256nd)s
X1321 X(the)s
X1427 X(word)s
X1587 X("root")s
X1772 X(in)s
X360 X
X1856 Y(the)s
X484 X(sixth)s
X656 X(\256eld)s
X817 X(in)s
X911 X(the)s
X1035 X
Xf.B 10 Z(crontab)s
X1299 X
Xf.R 10 Z(\256le,)s
X1445 X(then)s
X1603 X(it)s
X1684 X(is)s
X1772 X(in)s
X360 X
X1929 Y(4)s
X393 X(.3BSD)s
X594 X(format)s
X772 X(.)s
X360 X
X2023 Y
X504 X(This)s
X645 X(brings)s
X833 X(up)s
X921 X(the)s
X1025 X(problem)s
X1269 X(of)s
X1346 X(robustness)s
X1627 X(.)s
X1689 X(As)s
X1786 X(it)s
X360 X
X2096 Y(is)s
X442 X(currently)s
X720 X(written,)s
X964 X(the)s
X1083 X(test)s
X1214 X(for)s
X1328 X(whether)s
X1580 X(or)s
X1672 X(not)s
X1794 X(a)s
X360 X
X2169 Y(system's)s
X616 X
Xf.B 10 Z(crontab)s
X860 X
Xf.R 10 Z(\256le)s
X968 X(is)s
X1035 X(in)s
X1110 X(4)s
X1143 X(.3BSD)s
X1345 X(format)s
X1546 X(could)s
X1717 X(fail)s
X1807 X(.)s
X360 X
X2242 Y(When)s
X547 X(we)s
X653 X(install)s
X845 X(a)s
X902 X(master)s
X1108 X
Xf.B 10 Z(crontab)s
X1357 X
Xf.R 10 Z(\256le,)s
X1487 X(local)s
X1645 X(entries)s
X360 X
X2315 Y(at)s
X444 X(the)s
X561 X(beginning)s
X862 X(of)s
X953 X(the)s
X1071 X(\256le)s
X1193 X(are)s
X1311 X(preserved)s
X1570 X(.)s
X1645 X(In)s
X1736 X(our)s
X2016 X
X448 Y(environment,)s
X2405 X(the)s
X2522 X(primary)s
X2768 X(users)s
X2940 X(of)s
X3029 X(a)s
X3093 X(machine)s
X3354 X(have)s
X2016 X
X521 Y(root)s
X2158 X(access)s
X2365 X(to)s
X2452 X(that)s
X2589 X(machine)s
X2816 X(.)s
X2891 X(Although)s
X3178 X(unlikely,)s
X3450 X(a)s
X2016 X
X594 Y(superuser)s
X2320 X(of)s
X2423 X(a)s
X2501 X(non)s
X2600 X(-4)s
X2655 X(.3BSD)s
X2882 X(host)s
X3041 X(could)s
X3237 X(install)s
X3450 X(a)s
X2016 X
X667 Y
Xf.CW 10 Z(root)s
X2219 X
Xf.R 10 Z(command)s
X2526 X(as)s
X2626 X(a)s
X2700 X(local)s
X2875 X
Xf.B 10 Z(crontab)s
X3141 X
Xf.R 10 Z(entry)s
X3278 X(.)s
X3361 X(This)s
X2016 X
X740 Y(would)s
X2214 X(cause)s
X2395 X(the)s
X2509 X(test)s
X2635 X(to)s
X2719 X(give)s
X2866 X(a)s
X2928 X(wrong)s
X3128 X(answer)s
X3317 X(.)s
X3387 X(We)s
X2016 X
X813 Y(would)s
X2214 X(need)s
X2372 X(to)s
X2456 X(ask)s
X2577 X(the)s
X2691 X(user)s
X2834 X(to)s
X2918 X(change)s
X3140 X(the)s
X3255 X(program)s
X2016 X
X886 Y(name,)s
X2200 X(or)s
X2277 X(develop)s
X2510 X(a)s
X2562 X(more)s
X2721 X(robust)s
X2909 X(test)s
X3003 X(.)s
X2016 X
X980 Y
X2160 X(Like)s
X2338 X(system)s
X2579 X(administrators)s
X3018 X(everywhere,)s
X3402 X(we)s
X2016 X
X1053 Y(always)s
X2225 X(have)s
X2374 X(too)s
X2482 X(much)s
X2652 X(work)s
X2810 X(to)s
X2884 X(do)s
X2950 X(.)s
X3011 X(So,)s
X3120 X(we)s
X3220 X(get)s
X3324 X(a)s
X3376 X(tool)s
X2016 X
X1126 Y(working)s
X2268 X(and)s
X2395 X(leave)s
X2568 X(it)s
X2638 X(alone)s
X2783 X(.)s
X2854 X(If)s
X2930 X(it)s
X3000 X(breaks)s
X3206 X(frequently)s
X2016 X
X1199 Y(enough)s
X2236 X(or)s
X2316 X(in)s
X2393 X(a)s
X2448 X(really)s
X2626 X(ugly)s
X2769 X(fashion,)s
X3007 X(we)s
X3110 X(make)s
X3280 X(it)s
X3343 X(more)s
X2016 X
X1272 Y(robust)s
X2204 X(and)s
X2322 X(repeat)s
X2508 X(the)s
X2612 X(cycle)s
X2754 X(.)s
X2016 X
X1366 Y
X2160 X(When)s
X2364 X(creating)s
X2625 X(these)s
X2808 X(tests,)s
X2990 X(you)s
X3134 X(can)s
X3272 X(end)s
X3414 X(up)s
X2016 X
X1439 Y(learning)s
X2262 X(obscure)s
X2496 X(details)s
X2699 X(of)s
X2781 X(a)s
X2838 X(program's)s
X3138 X(behavior)s
X3371 X(.)s
X3436 X(If)s
X2016 X
X1512 Y(you)s
X2138 X(are)s
X2244 X(looking)s
X2471 X(for)s
X2572 X(the)s
X2678 X(BSD)s
X2831 X
Xf.B 10 Z(dump)s
X3022 X
Xf.R 10 Z(backup)s
X3238 X(program,)s
X2016 X
X1585 Y(you)s
X2142 X(have)s
X2295 X(to)s
X2373 X(make)s
X2544 X(sure)s
X2681 X(you)s
X2806 X(don't)s
X2972 X(\256nd)s
X3101 X(the)s
X3209 X(System)s
X3432 X(V)s
X2016 X
X1658 Y
Xf.B 10 Z(dump)s
X2218 X
Xf.R 10 Z(\256lesystem)s
X2525 X(description)s
X2857 X(tool)s
X2961 X(.)s
X3035 X(One)s
X3181 X(way)s
X3327 X(to)s
X3414 X(do)s
X2016 X
X1731 Y(this)s
X2143 X(is)s
X2218 X(to)s
X2300 X(test)s
X2424 X(known)s
X2634 X(paths)s
X2804 X(to)s
X2885 X(BSD)s
X3061 X
Xf.CW 10 Z(dump)s
X3250 X
Xf.R 10 Z(with)s
X3398 X(the)s
X2016 X
X1804 Y
Xf.CW 10 Z(W)s
X2085 X
Xf.R 10 Z(\257ag)s
X2185 X(.)s
X2253 X(The)s
X2386 X(heart)s
X2549 X(of)s
X2633 X(the)s
X2744 X(research)s
X2996 X(code)s
X3151 X(is)s
X3225 X(shown)s
X3428 X(in)s
X2016 X
X1877 Y(Figure)s
X2212 X(4,)s
X2284 X(and)s
X2402 X(the)s
X2506 X(results)s
X2703 X(are)s
X2807 X(in)s
X2881 X(Figure)s
X3077 X(5)s
X3110 X(.)s
X2016 X
X1971 Y
X2160 X(The)s
X2286 X(\256rst)s
X2430 X
Xf.CW 10 Z(if)s
X2550 X(ls)s
X2670 X(.)s
X2710 X(.)s
X2750 X(.)s
X2813 X
Xf.R 10 Z(is)s
X2881 X(an)s
X2967 X(attempt)s
X3192 X(to)s
X3267 X(emulate)s
X2016 X
X2044 Y
Xf.CW 10 Z(if)s
X2137 X(test)s
X2338 X(-x)s
X2459 X(.)s
X2499 X(.)s
X2539 X(.)s
X2602 X
Xf.R 10 Z(;)s
X2644 X(the)s
X2749 X(<space><star>)s
X3170 X(in)s
X3245 X(the)s
X3350 X
Xf.B 10 Z(grep)s
X2016 X
X2117 Y
Xf.R 10 Z(regular)s
X2229 X(expression)s
X2538 X(is)s
X2607 X(required)s
X2853 X(to)s
X2929 X(handle)s
X3131 X(a)s
X3185 X(bug)s
X3308 X(in)s
X3384 X(one)s
X2016 X
X2190 Y(vendor's)s
X2295 X
Xf.CW 10 Z(ls)s
X2422 X(-dF)s
X2570 X
Xf.R 10 Z(which)s
X2761 X(puts)s
X2900 X(a)s
X2958 X(trailing)s
X3180 X(space)s
X3357 X(after)s
X2016 X
X2263 Y(the)s
X2133 X(asterisk)s
X2338 X(.)s
X2412 X(The)s
X2551 X(second)s
X2789 X
Xf.CW 10 Z(if)s
X2904 X
Xf.R 10 Z(is)s
X2984 X(the)s
X3101 X(main)s
X3270 X(test)s
X3364 X(.)s
X3439 X(It)s
X2016 X
X2336 Y(relies)s
X2209 X(on)s
X2322 X(two)s
X2469 X(conditions)s
X2747 X(.)s
X2833 X(First,)s
X3020 X(it)s
X3104 X(expects)s
X3351 X(BSD)s
X360 X
X4967 Y
Xf.B 10 Z(14)s
X2096 X(LISA)s
X2273 X(V)s
X2343 X(\261)s
X2398 X(Sep)s
X2502 X(.)s
X2541 X(30)s
X2607 X(-Oct)s
X2733 X(.)s
X2772 X(3,)s
X2844 X(1991)s
X2998 X(\261)s
X3053 X(San)s
X3182 X(Diego,)s
X3384 X(CA)s
X5280 Y
Xpagebot
X
X%%Page: 15 5
Xpagetop
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 10 Z
X600 X
X448 Y
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
Xf.CW 10 Z(dump)s
X807 X(W)s
X876 X
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
Xf.R 10 Z(to)s
X957 X(put)s
X1071 X(something)s
X1379 X(on)s
X1475 X(standard)s
X1731 X(out)s
X1816 X(.)s
X1885 X(It)s
X1956 X(also)s
X600 X
X521 Y(expects)s
X824 X(System)s
X1044 X(V)s
X1133 X
Xf.CW 10 Z(dump)s
X1316 X
Xf.R 10 Z(to)s
X1391 X(choke)s
X1573 X(on)s
X1662 X(the)s
X1784 X
Xf.CW 10 Z(W)s
X1846 X
Xf.R 10 Z(\257ag)s
X1968 X(and)s
X600 X
X594 Y(produce)s
X836 X(no)s
X924 X(standard)s
X1172 X(output)s
X1342 X(.)s
X600 X
X1197 Y
X3120 0 l
X600 X
X1285 Y
X648 X
Xf.CW 10 Z(:)s
X600 X
X1365 Y
X648 X(#)s
X728 X(sahead)s
X1008 X(-)s
X1088 X(header)s
X1368 X(for)s
X1528 X(Data)s
X1728 X(Center)s
X2008 X(System)s
X2288 X(Administration)s
X2888 X(bourne)s
X3128 X(-shell)s
X3408 X(tools)s
X600 X
X1445 Y
X648 X(#)s
X728 X(written)s
X1048 X(by)s
X1168 X(rca)s
X600 X
X1525 Y
X648 X(#)s
X600 X
X1605 Y
X648 X(#)s
X728 X(This)s
X928 X(file)s
X1128 X(should)s
X1408 X(444)s
X1568 X(root,)s
X1808 X(and)s
X1968 X(should)s
X2248 X(be)s
X2368 X(sourced)s
X2688 X(via)s
X2848 X(")s
X2888 X(.)s
X2968 X(/etc/dist/sahea)s
X3568 X(d")s
X3648 X(.)s
X600 X
X1685 Y
X648 X(#)s
X728 X(It)s
X848 X(is)s
X968 X(distributed)s
X1448 X(automatically)s
X1968 X(.)s
X600 X
X1765 Y
X648 X(#)s
X600 X
X1845 Y
X648 X(#)s
X728 X(The)s
X888 X(code)s
X1088 X(includes)s
X1448 X(lots)s
X1648 X(of)s
X1768 X(variable)s
X2128 X(definitions)s
X2608 X(for)s
X2768 X(our)s
X600 X
X1925 Y
X648 X(#)s
X728 X(System)s
X1008 X(Administration)s
X1608 X(scripts)s
X1888 X(.)s
X600 X
X2045 Y
X648 X(#)s
X728 X(untested)s
X1088 X(PATH,)s
X1328 X(/etc/saenv)s
X1768 X(will)s
X1968 X(fix)s
X2128 X(later)s
X600 X
X2125 Y
X648 X(PATH=/bin:/etc:)s
X1248 X(/usr/bin:/usr/e)s
X1848 X(tc:/usr/ucb:/us)s
X2448 X(r/amdahl/bin:/u)s
X3048 X(sr/lbin:/sbin)s
X600 X
X2205 Y
X648 X(export)s
X928 X(PATH)s
X600 X
X2325 Y
X648 X(#)s
X728 X(The)s
X888 X(variable)s
X1248 X(names)s
X1488 X(in)s
X1608 X(all)s
X1768 X(these)s
X2008 X(scripts)s
X2328 X(often)s
X2568 X(use)s
X2728 X(the)s
X2888 X(following)s
X3288 X(conventions:)s
X600 X
X2405 Y
X648 X(#)s
X600 X
X2485 Y
X648 X(#)s
X728 X(abbr)s
X968 X(meaning)s
X2248 X(example\(s\))s
X600 X
X2565 Y
X648 X(#)s
X728 X(XX_F)s
X968 X(name)s
X1168 X(of)s
X1288 X(XX)s
X1408 X(file)s
X2248 X(CRON_F=root)s
X600 X
X2645 Y
X648 X(#)s
X728 X(XX_D)s
X968 X(directory)s
X1368 X(where)s
X1608 X(file)s
X1808 X(XX)s
X1928 X(lives)s
X2248 X(CRON_D=/usr/sp)s
X2808 X(ool/cron/cronta)s
X3408 X(bs)s
X600 X
X2725 Y
X648 X(#)s
X728 X(XX_P)s
X968 X(full)s
X1168 X(path)s
X1368 X(to)s
X1488 X(file)s
X1688 X(XX)s
X2248 X(CRON_P=/usr/sp)s
X2808 X(ool/cron/cronta)s
X3408 X(bs/root)s
X600 X
X2805 Y
X648 X(#)s
X728 X(XX_P)s
X968 X(XX_P=$XX_D/$XX)s
X1528 X(_F)s
X1648 X(by)s
X1768 X(definition)s
X2248 X(CRON_P=$CRON_D)s
X2808 X(/$CRON_F)s
X600 X
X2885 Y
X648 X(#)s
X728 X(XX_N)s
X968 X(number)s
X2248 X(ALIASRO_N=5)s
X2728 X(\(rotations)s
X3168 X(on)s
X3288 X("aliases"\))s
X600 X
X2965 Y
X648 X(#)s
X728 X(XX_K)s
X968 X(key)s
X2248 X(PSALL_K=ax)s
X2688 X(\(BSD\),)s
X2968 X(PSALL_K=)s
X3288 X(-e)s
X3408 X(\(SysV\))s
X600 X
X3045 Y
X648 X(#)s
X728 X(XX_B)s
X968 X(boolean)s
X2248 X(CRONCMD_B=true)s
X2848 X(if)s
X2968 X(crontab)s
X3288 X(command)s
X3608 X(exists)s
X600 X
X3125 Y
X648 X(#)s
X728 X(XX_C)s
X968 X(command)s
X2248 X(RSH_C=rsh)s
X2648 X(\(how)s
X2848 X(do)s
X2968 X(_you_)s
X3208 X(spell)s
X3448 X('rsh'?\))s
X600 X
X3205 Y
X648 X(#)s
X600 X
X3285 Y
X648 X(#)s
X728 X(Remember)s
X1088 X(-)s
X1168 X(only)s
X1368 X(the)s
X1528 X(first)s
X1768 X(8)s
X1848 X(characters)s
X2288 X(of)s
X2408 X(a)s
X2488 X(variable)s
X2848 X(name)s
X3048 X(are)s
X3208 X(significant)s
X3648 X(.)s
X600 X
X3365 Y
X648 X(#)s
X728 X(When)s
X928 X(choosing)s
X1288 X(variable)s
X1648 X(names)s
X1888 X(we)s
X2008 X(have)s
X2208 X(try)s
X2368 X(to)s
X2488 X(preserve)s
X2848 X(the)s
X3008 X("_X")s
X3208 X(part)s
X3368 X(.)s
X600 X
X3445 Y
X648 X(#)s
X600 X
X3525 Y
X648 X(#)s
X728 X(Many)s
X928 X(variables)s
X1328 X(are)s
X1488 X(set)s
X1648 X(to)s
X1768 X(null)s
X1968 X(if)s
X2088 X(they)s
X2288 X(do)s
X2408 X(not)s
X2568 X(exist)s
X2808 X(or)s
X2928 X(not)s
X3088 X(supported)s
X600 X
X3605 Y
X648 X(#)s
X728 X(on)s
X848 X(the)s
X1008 X(box)s
X1128 X(.)s
X1248 X(For)s
X1408 X(example,)s
X1768 X(/etc/saenv)s
X2208 X(would)s
X2448 X(say)s
X2608 X("CSH_P=")s
X2968 X(on)s
X3088 X(System)s
X3368 X(V)s
X600 X
X3685 Y
X648 X(#)s
X728 X(machines)s
X1088 X(because)s
X1408 X(they)s
X1608 X(do)s
X1728 X(not)s
X1888 X(support)s
X2208 X(csh)s
X2328 X(.)s
X600 X
X3805 Y
X648 X(##)s
X768 X(actual)s
X1048 X(variable)s
X1408 X(definitions)s
X600 X
X3885 Y
X648 X(DTGT=/etc/dist)s
X1608 X(#)s
X1688 X(distribution)s
X2208 X(target,)s
X2528 X(contains)s
X2888 X([links)s
X3168 X(to])s
X3328 X(config)s
X3608 X(files)s
X600 X
X3965 Y
X648 X(DTGTBIN=$DTGT/b)s
X1248 X(in)s
X1608 X(#)s
X1688 X(distributed)s
X2168 X(tools)s
X2408 X(live)s
X2608 X(here)s
X600 X
X4069 Y
X648 X(.)s
X688 X(.)s
X728 X(.)s
X768 X(.)s
X808 X(.)s
X600 X
X4173 Y
X648 X(if)s
X768 X(there)s
X1008 X(is)s
X1128 X(a)s
X1208 X(problem)s
X1528 X(with)s
X1728 X(/etc/saenv)s
X2168 X(;)s
X2248 X(then)s
X2568 X(#)s
X2648 X(pseudo)s
X2928 X(code)s
X600 X
X4253 Y
X968 X(echo)s
X1168 X("some)s
X1408 X(appropriate)s
X1888 X(error)s
X2128 X(message)s
X2448 X(about)s
X2688 X(/etc/saenv")s
X600 X
X4333 Y
X968 X(exit)s
X1168 X(1)s
X600 X
X4413 Y
X648 X(else)s
X600 X
X4493 Y
X968 X
X968 X(.)s
X1048 X(/etc/saenv)s
X1528 X(#)s
X1608 X(we're)s
X1848 X(fine)s
X2048 X(so)s
X2168 X(get)s
X2328 X(local)s
X2568 X(sysadmin)s
X2928 X(environment)s
X600 X
X4573 Y
X648 X(fi)s
X600 X
X4685 Y
X1646 X
Xf.R 10 Z(Figure)s
X1842 X(6:)s
X1938 X(Sample)s
X2161 X(code)s
X2309 X(from)s
X2460 X
Xf.B 10 Z(sahead)s
X2656 X
Xf.R 10 Z(.)s
X600 X
X688 Y
X744 X(It)s
X823 X(turns)s
X994 X(out,)s
X1134 X(however,)s
X1418 X(that)s
X1558 X(this)s
X1694 X(isn't)s
X1852 X(enough)s
X2047 X(.)s
X600 X
X761 Y(Other)s
X793 X(code)s
X960 X(\(not)s
X1107 X(shown\))s
X1342 X(has)s
X1471 X(to)s
X1563 X(deal)s
X1715 X(with)s
X1874 X(several)s
X600 X
X834 Y(situations)s
X857 X(.)s
X930 X(One)s
X1076 X(vendor)s
X1295 X(supplies)s
X1549 X(a)s
X1614 X(version)s
X1845 X(of)s
X1935 X(BSD)s
X600 X
X907 Y
Xf.B 10 Z(dump)s
X830 X
Xf.R 10 Z(which)s
X1056 X(gives)s
X1260 X(a)s
X1353 X("Segmentation)s
X1811 X(fault")s
X2023 X(if)s
X600 X
X980 Y
Xf.B 10 Z(/etc/dumpdates)s
X1061 X
Xf.R 10 Z(doesn't)s
X1284 X(exist,)s
X1455 X(so)s
X1541 X
Xf.B 10 Z(saenv)s
X1700 X(.setup)s
X1896 X
Xf.R 10 Z(has)s
X2012 X(to)s
X600 X
X1053 Y(create)s
X798 X(one)s
X931 X(temporarily)s
X1279 X(if)s
X1356 X(necessary)s
X1652 X(before)s
X1858 X(running)s
X600 X
X1126 Y(the)s
X716 X(above)s
X909 X(test)s
X1003 X(.)s
X1077 X(Another)s
X1330 X(vendor)s
X1549 X(supplies)s
X1803 X(a)s
X1868 X(version)s
X2256 X
X448 Y(which)s
X2446 X(requires)s
X2688 X(a)s
X2744 X(hyphen)s
X2965 X(as)s
X3047 X(the)s
X3155 X(\256rst)s
X3285 X(character)s
X3557 X(of)s
X3638 X(the)s
X2256 X
X521 Y(dump)s
X2431 X(key,)s
X2568 X(and)s
X2688 X(even)s
X2838 X(when)s
X3006 X(fed)s
X3116 X(a)s
X3189 X
Xf.CW 10 Z(-W)s
X3294 X
Xf.R 10 Z(key)s
X3415 X(only)s
X3558 X(works)s
X2256 X
X594 Y(if)s
X2339 X
Xf.CW 10 Z(TERM)s
X2523 X
Xf.R 10 Z(is)s
X2592 X(already)s
X2813 X(set)s
X2912 X(to)s
X2988 X(a)s
X3042 X(known)s
X3246 X(terminal)s
X3494 X(type)s
X3609 X(.)s
X3672 X(A)s
X2256 X
X667 Y(third)s
X2430 X(vendor)s
X2662 X(supplies)s
X2929 X(a)s
X3007 X(special)s
X3242 X(version)s
X3487 X(of)s
X3591 X(BSD)s
X2256 X
X740 Y
Xf.B 10 Z(dump)s
X2451 X
Xf.R 10 Z(which)s
X2642 X(is)s
X2715 X(meant)s
X2906 X(to)s
X2985 X(work)s
X3148 X(with)s
X3294 X(Exabyte)s
X3540 X(drives,)s
X2256 X
X813 Y(in)s
X2350 X(addition)s
X2611 X(to)s
X2705 X(the)s
X2829 X(normal)s
X3060 X(BSD)s
X3231 X
Xf.B 10 Z(dump)s
X3398 X
Xf.R 10 Z(.)s
X3479 X(Tracking)s
X2256 X
X886 Y(down)s
X2434 X(anomalies)s
X2737 X(like)s
X2869 X(these)s
X3037 X(can)s
X3160 X(make)s
X3335 X(for)s
X3442 X(frustrating)s
X2256 X
X959 Y(coding)s
X2437 X(.)s
X600 X
X4967 Y
Xf.B 10 Z(LISA)s
X777 X(V)s
X847 X(\261)s
X902 X(Sep)s
X1006 X(.)s
X1045 X(30)s
X1111 X(-Oct)s
X1237 X(.)s
X1276 X(3,)s
X1348 X(1991)s
X1502 X(\261)s
X1557 X(San)s
X1686 X(Diego,)s
X1888 X(CA)s
X3654 X(15)s
X5280 Y
Xpagebot
X
X%%Page: 16 6
Xpagetop
Xstdencoding /NTimes-Bold /Times-Bold RE
X/f.B /NTimes-Bold findfont def
Xf.B 10 Z
X360 X
X448 Y
X801 X(Using)s
X986 X(The)s
X1119 X(Research)s
X360 X
X557 Y
X504 X
Xstdencoding /NTimes-Roman /Times-Roman RE
X/f.R /NTimes-Roman findfont def
Xf.R 10 Z(For)s
X630 X(an)s
X727 X(example)s
X988 X(of)s
X1077 X(how)s
X1225 X(a)s
X1289 X(tool)s
X1427 X(might)s
X1618 X(use)s
X1742 X(the)s
X360 X
X630 Y(results)s
X558 X(of)s
X636 X(this)s
X756 X(research,)s
X1019 X(see)s
X1128 X(the)s
X1232 X
Xf.B 10 Z(upd)s
X1343 X(-dist)s
X1491 X
Xf.R 10 Z(code)s
X1639 X(in)s
X1713 X(Fig-)s
X360 X
X703 Y(ure)s
X467 X(7)s
X500 X(.)s
X561 X(When)s
X742 X(a)s
X794 X(host)s
X927 X(runs)s
X1063 X
Xf.B 10 Z(upd)s
X1174 X(-dist)s
Xf.R 10 Z(,)s
X1339 X(it)s
X1399 X(may)s
X1537 X(get)s
X1642 X(a)s
X1695 X(copy)s
X360 X
X776 Y(of)s
X441 X(a)s
X497 X(new)s
X634 X(master)s
X839 X
Xf.B 10 Z(crontab)s
X1087 X
Xf.R 10 Z(\256le)s
X1173 X(.)s
X1237 X(The)s
X1366 X(master)s
X1570 X(is)s
X1640 X(in)s
X1717 X(pre)s
X1802 X(-)s
X360 X
X849 Y(4)s
X393 X(.3BSD)s
X599 X(format)s
X777 X(.)s
X843 X(By)s
X948 X(sourcing)s
X1205 X
Xf.B 10 Z(sahead)s
Xf.R 10 Z(,)s
X1446 X(which)s
X1637 X(in)s
X1717 X(turn)s
X360 X
X922 Y(sources)s
X607 X
Xf.B 10 Z(saenv)s
X813 X
Xf.R 10 Z(\(see)s
X967 X(Figure)s
X1187 X(6\),)s
X1305 X
Xf.B 10 Z(upd)s
X1416 X(-dist)s
X1588 X
Xf.R 10 Z(gets)s
X1742 X(the)s
X360 X
X995 Y(information)s
X715 X(it)s
X793 X(needs)s
X985 X(to)s
X1078 X(determine)s
X1387 X(how)s
X1542 X(to)s
X1635 X(do)s
X1742 X(the)s
X360 X
X1068 Y(local)s
X520 X(installation)s
X819 X(.)s
X887 X(The)s
X1038 X
Xstdencoding /NCourier /Courier RE
X/f.CW /NCourier findfont def
Xf.CW 10 Z($CRONCMD_B)s
X1467 X
Xf.R 10 Z(variable)s
X1711 X(tells)s
X360 X
X1141 Y
Xf.B 10 Z(upd)s
X471 X(-dist)s
X626 X
Xf.R 10 Z(whether)s
X870 X(the)s
X982 X
Xf.B 10 Z(crontab)s
X1234 X
Xf.R 10 Z(command)s
X1527 X(is)s
X1602 X(required)s
X360 X
X1214 Y(to)s
X437 X(install)s
X627 X(a)s
X682 X(new)s
X818 X
Xf.B 10 Z(crontab)s
X1065 X
Xf.R 10 Z(\256le)s
X1151 X(.)s
X1251 X
Xf.CW 10 Z($CRON_P)s
X1556 X
Xf.R 10 Z(is)s
X1625 X(the)s
X1731 X(full)s
X360 X
X1287 Y(path)s
X499 X(to)s
X575 X(the)s
X681 X
Xf.B 10 Z(crontab)s
X927 X
Xf.R 10 Z(\256le)s
X1013 X(.)s
X1076 X(The)s
X1223 X
Xf.CW 10 Z($CRON43_B)s
X1608 X
Xf.R 10 Z(variable)s
X360 X
X1360 Y(says)s
X530 X(whether)s
X799 X(to)s
X905 X(massage)s
X1186 X(the)s
X1322 X(new)s
X1487 X(master)s
X1720 X(into)s
X360 X
X1433 Y(4)s
X393 X(.3BSD)s
X594 X(format)s
X794 X(before)s
X986 X(installing)s
X1258 X(it)s
X1296 X(.)s
X360 X
X2005 Y
X3120 0 l
X360 X
X2093 Y
X408 X
Xf.CW 10 Z(:)s
X360 X
X2173 Y
X408 X(#)s
X488 X(this)s
X688 X(is)s
X808 X(upd)s
X928 X(-dist)s
X1168 X(-)s
X1248 X(originally)s
X1688 X(written)s
X2008 X(by)s
X2128 X(Diane)s
X2368 X(Alter)s
X360 X
X2253 Y
X408 X(.)s
X488 X(/etc/dist/sahea)s
X1088 X(d)s
X1288 X(#)s
X1368 X(to)s
X1488 X(get)s
X1648 X($DTGT)s
X1888 X(and)s
X2048 X(source)s
X2328 X(/etc/saenv)s
X360 X
X2333 Y
X408 X(.)s
X448 X(.)s
X488 X(.)s
X528 X(.)s
X568 X(.)s
X360 X
X2413 Y
X408 X(#)s
X488 X(if)s
X608 X(we)s
X728 X(got)s
X888 X(a)s
X968 X(new)s
X1128 X(crontab)s
X1448 X(file,)s
X1688 X(install)s
X2008 X(it)s
X360 X
X2493 Y
X408 X(if)s
X528 X(test)s
X728 X(-n)s
X848 X("`find)s
X1128 X($DTGT/crontab)s
X1648 X(.dist)s
X1888 X(-mtime)s
X2168 X(-1)s
X2288 X(-print)s
X2568 X(2>)s
X2688 X(/dev/null`")s
X3168 X(;)s
X3248 X(then)s
X360 X
X2573 Y
X728 X(current=/tmp/c)s
X1288 X(rontab)s
X1528 X(.cur)s
X360 X
X2653 Y
X728 X(new=/tmp/cront)s
X1288 X(ab)s
X1368 X(.new)s
X360 X
X2733 Y
X728 X(#)s
X808 X(get)s
X968 X(current)s
X1288 X(version)s
X360 X
X2813 Y
X728 X(if)s
X848 X(test)s
X1048 X("$CRONCMD_B")s
X1568 X(=)s
X1648 X(true)s
X1848 X(;)s
X1928 X(then)s
X360 X
X2893 Y
X1048 X(crontab)s
X1368 X(-l)s
X1488 X(>)s
X1568 X($current)s
X360 X
X2973 Y
X728 X(else)s
X360 X
X3053 Y
X1048 X(cp)s
X1168 X($CRON_P)s
X1488 X($current)s
X360 X
X3133 Y
X728 X(fi)s
X360 X
X3213 Y
X728 X(#)s
X808 X(get)s
X968 X(new)s
X1128 X(version,)s
X1488 X(converting)s
X1928 X(to)s
X2048 X(4)s
X2088 X(.3BSD)s
X2328 X(format)s
X2608 X(if)s
X2728 X(necessary)s
X360 X
X3293 Y
X728 X(if)s
X848 X(test)s
X1048 X("$CRON43_B")s
X1528 X(=)s
X1608 X("true")s
X1888 X(;)s
X1968 X(then)s
X360 X
X3373 Y
X1048 X($DTGTBIN/cront)s
X1608 X(ab)s
X1688 X(.conv43)s
X2008 X($DTGT/crontab)s
X2528 X(.dist)s
X2768 X(>)s
X2848 X($new)s
X360 X
X3453 Y
X728 X(else)s
X360 X
X3533 Y
X1048 X(cp)s
X1168 X($DTGT/crontab)s
X1688 X(.dist)s
X1928 X($new)s
X360 X
X3613 Y
X728 X(fi)s
X360 X
X3693 Y
X728 X(#)s
X808 X(merge)s
X1048 X(new)s
X1208 X(and)s
X1368 X(current)s
X1688 X(version,)s
X2048 X(preserving)s
X2488 X(local)s
X2728 X(entries)s
X360 X
X3773 Y
X728 X($DTGTBIN/cut)s
X1208 X(-paste)s
X1488 X($new)s
X1688 X($current)s
X360 X
X3853 Y
X728 X(#)s
X808 X(install)s
X1128 X(merged)s
X1408 X(version)s
X360 X
X3933 Y
X728 X(if)s
X848 X([)s
X928 X($CRONCMD_B)s
X1368 X(=)s
X1448 X(true)s
X1648 X(])s
X1728 X(;)s
X1808 X(then)s
X360 X
X4013 Y
X1048 X(crontab)s
X1368 X(-r)s
X360 X
X4093 Y
X1048 X(crontab)s
X1368 X($current)s
X360 X
X4173 Y
X728 X(else)s
X360 X
X4253 Y
X1048 X(cp)s
X1168 X($current)s
X1528 X($CRON_P)s
X360 X
X4333 Y
X728 X(fi)s
X360 X
X4413 Y
X728 X(#)s
X808 X(cleanup)s
X360 X
X4493 Y
X728 X(/bin/rm)s
X1048 X(-f)s
X1168 X($current)s
X1528 X($new)s
X360 X
X4573 Y
X408 X(fi)s
X360 X
X4685 Y
X1386 X
Xf.R 10 Z(Figure)s
X1582 X(7:)s
X1678 X(Sample)s
X1901 X(code)s
X2049 X(from)s
X2200 X
Xf.B 10 Z(upd)s
X2311 X(-dist)s
X2437 X
Xf.R 10 Z(.)s
X360 X
X1560 Y
X807 X
Xf.B 10 Z(Common)s
X1092 X(Tool)s
X1243 X(Base)s
X360 X
X1669 Y
X504 X
Xf.R 10 Z(It)s
SHAR_EOF
true || echo 'restore of saenv.paper.ps failed'
fi
echo 'End of saenv_alld part 2'
echo 'File saenv.paper.ps is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
--
__ _ _ Bob Arnold Ingres, An ASK Group company
|/ \ / \ / \| 1080 Marina Village Parkway
| / / | Alameda, CA, 94501
| \__/ \__/| rca@ingres.com 510/748-2819