Change wiki ref to wiki.openafs.org from stanford.edu
[openafs.git] / src / afsd / afs.rc.solaris.2.7
1 #!/bin/sh
2 #
3 # Copyright 2000, International Business Machines Corporation and others.
4 # All Rights Reserved.
5
6 # This software has been released under the terms of the IBM Public
7 # License.  For details, see the LICENSE file in the top-level source
8 # directory or online at http://www.openafs.org/dl/license10.html
9 #
10 # afs.rc: rc script for AFS on Solaris 2.x platforms
11 #
12 # Install this script as /etc/init.d/afs.rc
13 # then make links like this:
14 # ln -s ../init.d/afs.rc /etc/rc0.d/K66afs
15 # ln -s ../init.d/afs.rc /etc/rc3.d/S99afs 
16 #
17 CONFIG=/usr/vice/etc/config
18 AFSDOPT=$CONFIG/afsd.options
19 PACKAGE=$CONFIG/package.options
20
21 # EXTRAOPTS can be used to enable/disable AFSDB support (-afsdb)
22 # and Dynroot (dynamically-generated /afs) support (-dynroot).
23 EXTRAOPTS="-afsdb"
24
25 LARGE="-stat 2800 -dcache 2400 -daemons 5 -volumes 128"
26 MEDIUM="-stat 2000 -dcache 800 -daemons 3 -volumes 70"
27 SMALL="-stat 300 -dcache 100 -daemons 2 -volumes 50"
28
29 if [ -f $AFSDOPT ]; then
30     OPTIONS=`cat $AFSDOPT`
31 else
32     OPTIONS="$MEDIUM $EXTRAOPTS"
33 fi
34
35 # Need the commands ps, awk, kill, sleep
36 PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin
37
38 killproc() {            # kill the named process(es)
39         awkfield2='$2'
40         pid=`ps -ef | awk "/$1/ && ! /awk/ {print $awkfield2}"`
41         [ "$pid" != "" ] && kill -KILL $pid
42 }
43
44 case $1 in
45 'start')
46
47 #
48 # Make sure afs exists in /etc/name_to_sysnum
49 #
50 if grep -s "afs" /etc/name_to_sysnum > /dev/null; then
51     echo "Entry for afs already exists in /etc/name_to_sysnum"
52 else
53     echo "Creating entry for afs in /etc/name_to_sysnum"
54     cp /etc/name_to_sysnum /etc/name_to_sysnum.orig
55     sed '/nfs/i\
56 afs                     73' /etc/name_to_sysnum > /tmp/name_to_sysnum
57     mv /tmp/name_to_sysnum /etc/name_to_sysnum
58     echo "Rebooting now for new /etc/name_to_sysnum to take effect"
59     reboot
60 fi
61
62 ## Check to see that /bin/isalist exists and is executable
63 if [ ! -x /bin/isalist ] ;then
64         echo "/bin/isalist not executable"
65         exit 1;
66 fi
67
68 ## Determine if we are running the 64 bit OS
69 ## If sparcv9 then the location of the afs and nfs extensions differ
70
71 case `/bin/isalist` in
72     *sparcv9* )
73                 nfssrv=/kernel/misc/sparcv9/nfssrv
74                 afs=/kernel/fs/sparcv9/afs ;;
75             * )
76                 nfssrv=/kernel/misc/nfssrv
77                 afs=/kernel/fs/afs ;;
78 esac
79
80
81 #
82 # Load kernel extensions
83 #
84 # nfssrv has to be loaded first
85
86
87 if [ -f $nfssrv ]; then
88         echo "Loading NFS server kernel extensions"
89         modload $nfssrv
90 else
91         echo "$nfssrv does not exist. Skipping AFS startup."
92         exit 1
93 fi
94
95 ## Load AFS kernel extensions
96
97 if [ -f $afs ]; then
98         echo "Loading AFS kernel extensions"
99         modload $afs
100 else
101         echo "$afs does not exist. Skipping AFS startup."
102         exit 1
103 fi
104
105 #
106 # Start the AFS server processes if a bosserver exists
107 #
108
109 if [ -x /usr/afs/bin/bosserver ]; then
110         echo "Starting AFS Server processes"
111         /usr/afs/bin/bosserver &
112         OPTIONS="$OPTIONS -nosettime"
113         sleep 30
114 fi
115
116 #
117 # Check that all of the client configuration files exist
118 #
119
120 for file in /usr/vice/etc/afsd /usr/vice/etc/cacheinfo \
121             /usr/vice/etc/ThisCell /usr/vice/etc/CellServDB
122 do
123         if [ ! -f ${file} ]; then
124                 echo "${file} does not exist. Not starting AFS client."
125                 exit 1
126         fi
127 done
128
129 #
130 # Check that the root directory for AFS (/afs) 
131 # and the cache directory (/usr/vice/cache) both exist
132 #
133
134 for dir in `awk -F: '{print $1, $2}' /usr/vice/etc/cacheinfo`
135 do
136         if [ ! -d ${dir} ]; then
137                 echo "${dir} does not exist. Not starting AFS client."
138                 exit 2
139         fi
140 done
141
142 echo "Starting afsd"
143 /usr/vice/etc/afsd $OPTIONS
144
145 #
146 # Run package to update the disk
147 #
148 if [ -f /usr/afsws/etc/package -a -f $PACKAGE ]; then
149         /usr/afsws/etc/package -v -o `cat $PACKAGE` > /dev/console 2>&1
150 case $? in
151 0)
152         (echo "Package completed successfully") > /dev/console 2>&1
153         date > /dev/console 2>&1
154         ;;
155 4)
156         (echo "Rebooting to restart system") > /dev/console 2>&1
157         sync
158         /etc/reboot
159         ;;
160 *)
161         (echo "Package update failed; continuing") > /dev/console 2>&1
162         ;;
163 esac
164
165 fi
166
167 #
168 # Start AFS inetd services
169 # (See the AFS Command Ref. for notes on the proper configuration of inetd.afs)
170 #
171 if [ -f /usr/sbin/inetd.afs -a -f /etc/inetd.conf.afs ]; then
172         /usr/sbin/inetd.afs /etc/inetd.conf.afs
173 fi
174
175 echo ;;
176
177 'stop')
178
179 #
180 # Stop the AFS inetd and server processes
181 # Note that the afsd processes cannot be killed
182 #
183
184 echo "Killing inetd.afs"
185 killproc inetd.afs
186
187 bosrunning=`ps -ef | awk '/bosserver/ && ! /awk/'`
188 if [ "${bosrunning}" != "" ]; then
189         echo "Shutting down AFS server processes"
190         /usr/afs/bin/bos shutdown localhost -localauth -wait
191         echo "Killing AFS bosserver"
192         killproc bosserver
193 fi
194
195 echo ;;
196
197 *)      echo "Invalid option supplied to $0"
198         exit 1;;
199 esac