#!/sbin/sh # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # #pragma ident "%Z%%M% %I% %E% SMI" # Start/stop processes required for server NFS . /lib/svc/share/smf_include.sh zone=`smf_zonename` case "$1" in 'start') # The NFS server is not supported in a local zone if smf_is_nonglobalzone; then /usr/sbin/svcadm disable -t svc:/network/nfs/server echo "The NFS server is not supported in a local zone" sleep 5 & exit $SMF_EXIT_OK fi # Share all file systems enabled for sharing. sharemgr understands # regular shares and ZFS shares and will handle both. Technically, # the shares would have been started long before getting here since # nfsd has a dependency on them. startnfsd=0 # restart stopped shares from the repository /usr/sbin/sharemgr start -P nfs -a # Start up mountd and nfsd if anything is exported. if /usr/bin/grep -s nfs /etc/dfs/sharetab >/dev/null; then startnfsd=1 fi # If auto-enable behavior is disabled, always start nfsd if [ `svcprop -p application/auto_enable nfs/server` = "false" ]; then startnfsd=1 fi # Options for nfsd are now set in /etc/default/nfs if [ $startnfsd -ne 0 ]; then /usr/lib/nfs/mountd rc=$? if [ $rc != 0 ]; then /usr/sbin/svcadm mark -t maintenance svc:/network/nfs/server echo "$0: mountd failed with $rc" sleep 5 & exit $SMF_EXIT_ERR_FATAL fi /usr/lib/nfs/nfsd rc=$? if [ $rc != 0 ]; then /usr/sbin/svcadm mark -t maintenance svc:/network/nfs/server echo "$0: nfsd failed with $rc" sleep 5 & exit $SMF_EXIT_ERR_FATAL fi else /usr/sbin/svcadm disable -t svc:/network/nfs/server echo "No NFS filesystems are shared" sleep 5 & fi ;; 'refresh') /usr/sbin/sharemgr start -P nfs -a ;; 'stop') /usr/bin/pkill -x -u 0,1 -z $zone '(nfsd|mountd)' # Unshare all shared file systems using NFS /usr/sbin/sharemgr stop -P nfs -a # # Wait up to 10 seconds for nfslogd to gracefully handle SIGHUP # /usr/bin/pkill -HUP -x -u 0 -z $zone nfslogd wtime=10 while [ $wtime -gt 0 ]; do /usr/bin/pgrep -x -u 0 -z $zone nfslogd >/dev/null || break wtime=`expr $wtime - 1` sleep 1 done # # Kill nfslogd more forcefully if it did not shutdown during # the grace period # if [ $wtime -eq 0 ]; then /usr/bin/pkill -TERM -x -u 0 -z $zone nfslogd fi # Kill any processes left in service contract smf_kill_contract $2 TERM 1 [ $? -ne 0 ] && exit 1 ;; *) echo "Usage: $0 { start | stop | refresh }" exit 1 ;; esac exit $SMF_EXIT_OK