macos: use pkgbuild to build the package on 10.10/10.11
[openafs.git] / src / afsd / afs.rc.darwin
index d82d4ef..6457ac7 100644 (file)
@@ -5,20 +5,31 @@
 # This software has been released under the terms of the IBM Public
 # License.  For details, see the LICENSE file in the top-level source
 # directory or online at http://www.openafs.org/dl/license10.html
+#
+# Portions Copyright (c) 2003 Apple Computer, Inc.
+#
+# Updated to match standard service scripts
+# Phil Holland <hollandp@umich.edu> 6/11/04
 
-. /etc/rc.common
+PRECACHE="$AFS_PRECACHE"
 
-CheckForNetwork 
+. /etc/rc.common
 
-if [ "${NETWORKUP}" = "-NO-" ]; then exit; fi
+#
+# Variable Definition Section
+#
+CheckForNetwork
 
+VICEETC=/usr/vice/etc
+AFSD=$VICEETC/afsd
 if [ -r /var/db/openafs ]; then
-   VICEETC=/var/db/openafs/etc
-   AFSD=/usr/sbin/afsd
-else
-   VICEETC=/usr/vice/etc
-   AFSD=$VICEETC/afsd
+    VICEETC=/var/db/openafs/etc
+    AFSD=/usr/sbin/afsd
+    if [ -x /opt/openafs/sbin/afsd ] ; then
+       AFSD=/opt/openafs/sbin/afsd
+    fi
 fi
+
 CONFIG=$VICEETC/config
 AFSDOPT=$CONFIG/afsd.options
 PACKAGE=$CONFIG/package.options
@@ -27,97 +38,179 @@ LARGE="-stat 2800 -dcache 2400 -daemons 5 -volumes 128"
 MEDIUM="-stat 2000 -dcache 800 -daemons 3 -volumes 70"
 SMALL="-stat 300 -dcache 100 -daemons 2 -volumes 50"
 
+if [ -x /usr/sbin/kextstat ]; then KMODSTAT=/usr/sbin/kextstat; fi
+if [ -x /usr/sbin/kmodstat ]; then KMODSTAT=/usr/sbin/kmodstat; fi
+
+if [ -f $CONFIG/afs.conf ]; then
+    . $CONFIG/afs.conf
+fi
+
+# Check this file second so that if users have altered the file, it will
+# override the default options
 if [ -f $AFSDOPT ]; then
     OPTIONS=`cat $AFSDOPT`
-else
-    OPTIONS=$MEDIUM
 fi
 
+StartService()
+{
+    echo "Starting OpenAFS"
+
+    if [ -z "$OPTIONS" ] || [ "$OPTIONS" = "AUTOMATIC" ] ; then
+       AFSD_OPTIONS="$VERBOSE"
+    else
+       AFSD_OPTIONS="$OPTIONS $VERBOSE"
+    fi
+
+    if [ "${NETWORKUP}" = "-NO-" ]; then
+        echo $AFSD_OPTIONS | grep -e '-dynroot' || exit
+    fi
+
 # Need the commands ps, awk, kill, sleep
-PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin
-if kmodstat | grep -q openafs ; then
-:
-else
-if [ -d $VICEETC/afs.kext ]; then
+    PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin
+
+    if [ -d $VICEETC/afs.kext ]; then
        echo "Loading AFS kernel extensions"
        kextload $VICEETC/afs.kext
-else
+    else
        echo "$VICEETC/afs.kext does not exist. Skipping AFS startup."
        exit 1
-fi
-fi
-if kmodstat | grep -q openafs ; then
-:
-else
-       echo "AFS kernel extensions failed to initialize. Skipping AFS startup."
-fi
+    fi
+
+    if $KMODSTAT | perl -e 'exit not grep /openafs/, <>' ; then
+       :
+    else
+       echo  "AFS kernel extensions failed to initialize. Skipping AFS startup."
+       exit 1
+    fi
 
 #
 # Start the AFS server processes if a bosserver exists
 #
 
-if [ -x /usr/afs/bin/bosserver ]; then
+    if [ -x /usr/afs/bin/bosserver -a -f /usr/afs/local/BosConfig ]; then
        echo "Starting AFS Server processes"
        /usr/afs/bin/bosserver
-       OPTIONS="$OPTIONS -nosettime"
+       AFSD_OPTIONS="$AFSD_OPTIONS -nosettime"
        sleep 30
-fi
+    fi
 
 #
 # Check that all of the client configuration files exist
 #
 
-for file in $AFSD $VICEETC/cacheinfo \
-           $VICEETC/ThisCell $VICEETC/CellServDB
-do
-       if [ ! -f ${file} ]; then
-               echo "${file} does not exist. Not starting AFS client."
-               exit 1
-       fi
-done
+    for file in $AFSD $VICEETC/cacheinfo \
+       $VICEETC/ThisCell $VICEETC/CellServDB
+      do
+      if [ ! -f ${file} ]; then
+         echo "${file} does not exist. Not starting AFS client."
+         exit 1
+      fi
+    done
 
 #
 # Check that the root directory for AFS (/afs) 
 # and the cache directory (/usr/vice/cache) both exist
 #
 
-for dir in `awk -F: '{print $1, $2}' $VICEETC/cacheinfo`
-do
-       if [ ! -d ${dir} ]; then
-               echo "${dir} does not exist. Not starting AFS client."
-               exit 2
-       fi
-done
+    for dir in `awk -F: '{print $1, $2}' $VICEETC/cacheinfo`
+      do
+      if [ ! -d ${dir} ]; then
+         echo "${dir} does not exist. Not starting AFS client."
+         exit 2
+      fi
+    done
 
-echo "Starting afsd"
-$AFSD $OPTIONS
+    echo "Starting afsd"
+    $AFSD $AFSD_OPTIONS
+
+#
+# From /var/db/openafs/etc/config/afs.conf, call a post-init function or
+# command if it's been defined
+#
+    $AFS_POST_INIT
+
+#
+# Call afssettings (if it exists) to set customizable parameters
+#
+    if [ -x $CONFIG/afssettings ]; then
+       sleep 2
+       $CONFIG/afssettings
+    fi
+
+#
+# From /var/db/openafs/etc/config/afs.conf, set a sysname list if one was
+# configured.
+#
+    if [ -n "$AFS_SYSNAME" ] ; then
+       fs sysname $AFS_SYSNAME
+    fi
+
+    if [ ! -z "$PRECACHE" ] ; then
+       fs precache $AFS_PRECACHE
+    fi
 
 #
 # Run package to update the disk
 #
-if [ -f /usr/afsws/etc/package -a -f $PACKAGE ]; then
+    if [ -f /usr/afsws/etc/package -a -f $PACKAGE ]; then
        /usr/afsws/etc/package -v -o `cat $PACKAGE` > /dev/console 2>&1
-case $? in
-0)
-       (echo "Package completed successfully") > /dev/console 2>&1
-       date > /dev/console 2>&1
-       ;;
-4)
-       (echo "Rebooting to restart system") > /dev/console 2>&1
-       sync
-       /sbin/reboot
-       ;;
-*)
-       (echo "Package update failed; continuing") > /dev/console 2>&1
-       ;;
-esac
-
-fi
+       case $? in
+           0)
+                (echo "Package completed successfully") > /dev/console 2>&1
+                date > /dev/console 2>&1
+           ;;
+           4)
+               (echo "Rebooting to restart system") > /dev/console 2>&1
+               sync
+               /sbin/reboot
+           ;;
+           *)
+               (echo "Package update failed; continuing") > /dev/console 2>&1
+           ;;
+       esac
+     fi
 
 #
 # Start AFS inetd services
 # (See the AFS Command Ref. for notes on the proper configuration of inetd.afs)
 #
-if [ -f /usr/sbin/inetd.afs -a -f /etc/inetd.conf.afs ]; then
-       /usr/sbin/inetd.afs /etc/inetd.conf.afs
-fi
+     if [ -f /usr/sbin/inetd.afs -a -f /etc/inetd.conf.afs ]; then
+        /usr/sbin/inetd.afs /etc/inetd.conf.afs
+     fi
+}
+
+StopService()
+{
+    echo "Stopping AFS"
+
+#
+# If a pre-shutdown function was defined in /var/db/openafs/etc/config/afs.conf
+# was defined, then run it
+#
+    $AFS_PRE_SHUTDOWN
+
+    if $KMODSTAT | perl -e 'exit not grep /openafs/, <>' ; then
+       echo "Unmounting /afs"
+       umount -f /afs 2>&1 > /dev/console
+
+       echo "Shutting down afsd processes"
+       $AFSD -shutdown 2>&1 > /dev/console
+
+       echo "Unloading AFS kernel extensions"
+       kextunload $VICEETC/afs.kext 2>&1 > /dev/console
+    fi
+
+    if [ -x /usr/afs/bin/bosserver -a -f /usr/afs/local/BosConfig ]; then
+       echo "Stopping AFS Server processes"
+       /usr/afs/bin/bos shutdown localhost -local
+       killall bosserver
+    fi
+}
+
+RestartService()
+{
+    StopService
+    StartService
+}
+
+RunService "${1:-start}"