Mercurial > illumos > onarm
diff usr/src/cmd/fs.d/nfs/svc/nfs-server @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/cmd/fs.d/nfs/svc/nfs-server Tue Jun 02 18:56:50 2009 +0900 @@ -0,0 +1,118 @@ +#!/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 2007 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# +#pragma ident "@(#)nfs-server 1.15 07/04/02 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 + /usr/lib/nfs/nfsd + 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