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