NFS   [plain text]


#!/bin/sh

##
# Network File System
##

. /etc/rc.common

AUTOMOUNTDIR=/private/var/automount

StartService ()
{
    CheckForNetwork 
    if [ "${NETWORKUP}" = "-NO-" ]; then exit; fi
    lockfile -r 0 /var/run/NFS.StartupItem || exit 0

    ##
    # Set up NFS client.
    ##
    echo "Starting network file system"

	if [ -d ${AUTOMOUNTDIR} ]; then
		chflags -R nouchg ${AUTOMOUNTDIR}
		rm -rf ${AUTOMOUNTDIR}
	fi

    # nsfiod is the NFS asynchronous block I/O daemon, which implements
    # NFS read-ahead and write-behind caching on NFS clients.
    nfsiod -n 4 

    ##
    # The rpc.lockd/rpc.statd daemons are needed on both the client and
    # the server in order to support file locking over NFS.
    #
    # If NFSLOCKS = -AUTOMATIC-, we start the daemons if we are a server
    # but if we are only a client, we start the daemons once we know we
    # need them.
    ##

    ##
    # gather list of NFS exports
    ##
    exports_ni=$(niutil -list . /exports 2> /dev/null | wc -w)
    # Look for exports in /etc/exports, ignoring comments and blank lines.
    exports_etc=$(grep -v '^[[:space:]]*\(#\|$\)' /etc/exports 2> /dev/null | wc -l)
    exports=$(($exports_ni + $exports_etc))

    # if we are an NFS server, turn on NFS locking by default:
    if [ "${exports}" -gt 0 ]; then
	if [ "${NFSLOCKS:=-AUTOMATIC-}" = "-AUTOMATIC-" ]; then
	    NFSLOCKS=-YES-;
	fi
    fi

    if [ "${NFSLOCKS:=-AUTOMATIC-}" = "-YES-" ]; then
	# we definitely want locks on, so turn them on now
	rpc.statd
	rpc.lockd
    fi
    if [ "${NFSLOCKS:=-AUTOMATIC-}" = "-AUTOMATIC-" ]; then
	# delay starting daemons until we know we need them

	# invoke rpc.statd to send any SM_NOTIFY messages and quit.
	rpc.statd -n

	# -w says to wait for signal from kernel, then start daemons
	rpc.lockd -w
    fi

    ##
    # Set up NFS server.
    ##

    # If exportfs finds something to export (either using /etc/exports or the
    # exports NetInfo directory), then start the NFS daemons (which service
    # NFS requests) and the mount server (which services NFS mount requests).

    # Clear the table of exported filesystems.
    rm -f /var/db/mountdtab

    if [ "${exports}" -gt 0 ]; then
	echo "Starting Network File System server"
	mountd

	# If the NetInfo config/nfsd directory contains startup args for nfsd, use those.
	arguments=`niutil -readprop . /config/nfsd arguments`
	if [ "${arguments}" = "" ]; then
		arguments="-t -u -n 6"
	fi
	nfsd ${arguments}
    fi

    ##
    # Start the automounter
    ##

    if [ "${AUTOMOUNT:=-YES-}" = "-YES-" ]; then
	automount -m /Network -nsl -mnt ${AUTOMOUNTDIR}
	ln -s /automount/Library /Network/Library
	automount -m /automount/Servers -fstab -mnt /private/Network/Servers \
		-m /automount/static -static -mnt ${AUTOMOUNTDIR}
	ln -s /automount/Servers /Network/Servers
	
	#
	# Hint that the name /Network should be localized:
	#
	ln -s . /Network/.localized
    fi
	
	#
	# Leave a mark upon completion of the automounter startup:
	#
	touch /var/run/automount.initialized
}

StopService ()
{
    return 0
}

RestartService ()
{
    return 0
}

RunService "$1"