3cd12006bb
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
148 lines
3.2 KiB
Bash
148 lines
3.2 KiB
Bash
#!/bin/sh
|
|
### BEGIN INIT INFO
|
|
# Provides: nfs-common
|
|
# Required-Start: $portmap hwclock
|
|
# Required-Stop: $portmap hwclock
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: NFS support for both client and server
|
|
# Description: NFS is a popular protocol for file sharing across
|
|
# TCP/IP networks. This service provides various
|
|
# support functions for NFS mounts.
|
|
### END INIT INFO
|
|
#
|
|
# Startup script for nfs-utils
|
|
#
|
|
#
|
|
# Location of executables:
|
|
|
|
# Source function library.
|
|
. /etc/init.d/functions
|
|
|
|
test -x "$NFS_STATD" || NFS_STATD=/usr/sbin/rpc.statd
|
|
test -x "$NFS_IDMAPD" || NFS_IDMAPD=/usr/sbin/rpc.idmapd
|
|
test -z "$STATD_PID" && STATD_PID=/var/run/rpc.statd.pid
|
|
#
|
|
# The default state directory is /var/lib/nfs
|
|
test -n "$NFS_STATEDIR" || NFS_STATEDIR=/var/lib/nfs
|
|
#
|
|
#
|
|
#----------------------------------------------------------------------
|
|
# Startup and shutdown functions.
|
|
# Actual startup/shutdown is at the end of this file.
|
|
#directories
|
|
create_directories(){
|
|
echo -n 'creating NFS state directory: '
|
|
mkdir -p "$NFS_STATEDIR"
|
|
( cd "$NFS_STATEDIR"
|
|
umask 077
|
|
mkdir -p rpc_pipefs
|
|
mkdir -p sm sm.bak statd
|
|
chown rpcuser:rpcuser sm sm.bak statd
|
|
test -w statd/state || {
|
|
rm -f statd/state
|
|
:>statd/state
|
|
}
|
|
umask 022
|
|
for file in xtab etab smtab rmtab
|
|
do
|
|
test -w "$file" || {
|
|
rm -f "$file"
|
|
:>"$file"
|
|
}
|
|
done
|
|
)
|
|
chown rpcuser:rpcuser "$NFS_STATEDIR"
|
|
echo done
|
|
}
|
|
|
|
# Parse the fstab and exports file, determine if we need idmapd.
|
|
#
|
|
NEED_IDMAPD=no
|
|
|
|
if [ -f /etc/fstab ]; then
|
|
exec 9<&0 </etc/fstab
|
|
|
|
while read DEV MTPT FSTYPE OPTS REST
|
|
do
|
|
case $DEV in
|
|
''|\#*)
|
|
continue
|
|
;;
|
|
esac
|
|
# FSTYPE "nfs" can be NFSv4 now
|
|
if [ "$FSTYPE" = "nfs4" ] || [ "$FSTYPE" = "nfs" ]; then
|
|
NEED_IDMAPD=yes
|
|
fi
|
|
done
|
|
|
|
exec 0<&9 9<&-
|
|
fi
|
|
|
|
if [ -f /etc/exports ] && grep -q '^[[:space:]]*[^#]*/' /etc/exports; then
|
|
NEED_IDMAPD=yes
|
|
fi
|
|
#
|
|
#idmapd
|
|
start_idmapd(){
|
|
if [ "$NEED_IDMAPD" = no ]; then
|
|
return
|
|
fi
|
|
mount -t rpc_pipefs rpc_pipefs $NFS_STATEDIR/rpc_pipefs
|
|
echo -n "starting idmapd: "
|
|
start-stop-daemon --start --exec "$NFS_IDMAPD"
|
|
echo done
|
|
}
|
|
stop_idmapd(){
|
|
if [ "$NEED_IDMAPD" = no ]; then
|
|
return
|
|
fi
|
|
echo -n 'stopping idmapd: '
|
|
start-stop-daemon --stop --quiet --name rpc.idmapd
|
|
umount $NFS_STATEDIR/rpc_pipefs 2>/dev/null
|
|
echo done
|
|
}
|
|
#statd
|
|
start_statd(){
|
|
echo -n "starting statd: "
|
|
start-stop-daemon --start --exec "$NFS_STATD" --pidfile "$STATD_PID"
|
|
echo done
|
|
}
|
|
stop_statd(){
|
|
echo -n 'stopping statd: '
|
|
start-stop-daemon --stop --quiet --signal 1 --pidfile "$STATD_PID"
|
|
echo done
|
|
}
|
|
|
|
#----------------------------------------------------------------------
|
|
#
|
|
# supported options:
|
|
# start
|
|
# stop
|
|
# restart: stops and starts mountd
|
|
#FIXME: need to create the /var/lib/nfs/... directories
|
|
case "$1" in
|
|
start)
|
|
create_directories
|
|
start_statd
|
|
start_idmapd;;
|
|
stop) stop_idmapd
|
|
stop_statd;;
|
|
status)
|
|
status $NFS_STATD;
|
|
RETVAL=$?
|
|
if [ "$NEED_IDMAPD" = yes ]
|
|
then
|
|
status $NFS_IDMAPD
|
|
rval=$?
|
|
[ $rval -ne 0 ] && exit $rval
|
|
fi
|
|
exit $RETVAL;;
|
|
restart)
|
|
$0 stop
|
|
$0 start;;
|
|
*)
|
|
echo "Usage: /etc/init.d/nfscommon {start|stop|status|restart}"
|
|
exit 1;;
|
|
esac
|