Date: Thu, 28 May 2009 16:47:09 -0400 (EDT) From: Rick Macklem <rick@snowhite.cis.uoguelph.ca> To: rc@freebsd.org Cc: rwatson@freebsd.org, kib@freebsd.org Subject: rc scripts for the new experimental nfs subsystem Message-ID: <200905282047.QAA12312@snowhite.cis.uoguelph.ca>
next in thread | raw e-mail | index | archive | help
Hi,
I've just put the sources and man pages for an experimental alternative
to the regular NFS subsystem in FreeBSD-CURRENT. I have some rc scripts
that I use to run it, but I'm not much of a shell programmer, so I
wondered if someone might be able to review them?
Thanks in advance for any help, rick
Essentially, if nfsv4_serversupport_enable is yes, the "-e" argument must
be added to the argument list for nfsd and mountd, so that they run the
experimental server. (The current versions of these functions are the only
ones that know "-e" and they also know to load the correct modules, so I
don't think the business of running "nfsserver" to get the module loaded
is necessary for this case.) It also forces the startup of nfsuserd.
nfsuserd is used by both client and server and nfscbd is optionally used
by the client, for callback handling. They know to load the correct modules,
as required.
I've added the following variables to /etc/defaults/rc.conf:
nfsv4_serversupport_enable="NO" # Enable support for NFSv4
nfsv4_cbd_enable="NO" # NFSv4 client side callback daemon
nfsv4_cbd_flags="" # Flags for nfscbd
nfsv4_userd_enable="NO" # NFSv4 user/group name mapping daemon
nfsv4_userd_flags="" # Flags for nfsuserd
and then there are 2 modified scripts for /etc/rc.d and two new ones.
A modified nfsd:
#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/nfsd,v 1.16 2008/11/03 10:38:00 dfr Exp $
#
# PROVIDE: nfsd
# REQUIRE: mountd hostname gssd
# KEYWORD: nojail shutdown
. /etc/rc.subr
name="nfsd"
rcvar=`set_rcvar nfs_server`
command="/usr/sbin/${name}"
load_rc_config $name
start_precmd="nfsd_precmd"
sig_stop="USR1"
nfsd_precmd()
{
# If nfsv4_serversupport_enable is yes, force use of the experimental
# server
#
if checkyesno nfsv4_serversupport_enable; then
rc_flags="-e ${nfs_server_flags}"
else
rc_flags="${nfs_server_flags}"
fi
if checkyesno nfsv4_serversupport_enable; then
if ! checkyesno nfsv4_userd_enable && \
! /etc/rc.d/nfsuserd forcestatus 1>/dev/null 2>&1
then
force_depend nfsuserd || return 1
fi
elif ! sysctl vfs.nfsrv >/dev/null 2>&1; then
force_depend nfsserver || return 1
fi
if ! checkyesno rpcbind_enable && \
! /etc/rc.d/rpcbind forcestatus 1>/dev/null 2>&1
then
force_depend rpcbind || return 1
fi
if ! checkyesno mountd_enable && \
! /etc/rc.d/mountd forcestatus 1>/dev/null 2>&1
then
force_depend mountd || return 1
fi
if ! checkyesno nfsv4_serversupport_enable && \
checkyesno nfs_reserved_port_only; then
echo 'NFS on reserved port only=YES'
sysctl vfs.nfsrv.nfs_privport=1 > /dev/null
fi
return 0
}
run_rc_command "$1"
A modified mountd:
#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/mountd,v 1.21 2008/07/16 19:50:29 dougb Exp $
#
# PROVIDE: mountd
# REQUIRE: NETWORKING nfsserver rpcbind quota
# KEYWORD: nojail shutdown
. /etc/rc.subr
name="mountd"
rcvar=`set_rcvar`
command="/usr/sbin/${name}"
pidfile="/var/run/${name}.pid"
required_files="/etc/exports"
start_precmd="mountd_precmd"
extra_commands="reload"
mountd_precmd()
{
if ! checkyesno rpcbind_enable && \
! /etc/rc.d/rpcbind forcestatus 1>/dev/null 2>&1
then
force_depend rpcbind || return 1
fi
# mountd flags will differ depending on rc.conf settings
#
if checkyesno nfs_server_enable ; then
if checkyesno weak_mountd_authentication; then
rc_flags="${mountd_flags} -n"
fi
else
if checkyesno mountd_enable; then
checkyesno weak_mountd_authentication && rc_flags="-n"
fi
fi
# If nfsv4_serversupport_enable is yes, force use of the experimental
# server
#
if checkyesno nfsv4_serversupport_enable; then
rc_flags="-e ${rc_flags}"
fi
if checkyesno zfs_enable; then
rc_flags="${rc_flags} /etc/exports /etc/zfs/exports"
fi
rm -f /var/db/mountdtab
( umask 022 ; > /var/db/mountdtab )
return 0
}
load_rc_config $name
run_rc_command "$1"
A new script for the nfsuserd:
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: nfsuserd
# KEYWORD: nojail
. /etc/rc.subr
name="nfsuserd"
rcvar="nfsv4_userd_enable"
command="/usr/sbin/${name}"
load_rc_config $name
command_args="${nfsv4_userd_flags}"
sig_stop="USR1"
run_rc_command "$1"
and a new script for the nfscbd:
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: nfscbd
# KEYWORD: nojail
. /etc/rc.subr
name="nfscbd"
rcvar="nfsv4_cbd_enable"
command="/usr/sbin/${name}"
load_rc_config $name
command_args="${nfsv4_cbd_flags}"
sig_stop="USR1"
run_rc_command "$1"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905282047.QAA12312>
