mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
300 lines
6 KiB
Text
300 lines
6 KiB
Text
|
#!/bin/bash
|
||
|
|
||
|
daemon_name=nfs-server
|
||
|
|
||
|
NFSD_COUNT=
|
||
|
NFSD_OPTS=
|
||
|
NEED_SVCGSSD=
|
||
|
SVCGSSD_OPTS=
|
||
|
MOUNTD_OPTS=
|
||
|
PROCNFSD_MOUNTPOINT=
|
||
|
PROCNFSD_MOUNTOPTS=
|
||
|
|
||
|
# rpc.nfsd daemon & binary location
|
||
|
NFSD_PROCESS_NAME=nfsd
|
||
|
NFSD_DAEMON_NAME=rpc.nfsd
|
||
|
NFSD="/usr/sbin/rpc.nfsd"
|
||
|
|
||
|
# rpc.svcgssd daemon & binary location
|
||
|
SVCGSSD_DAEMON_NAME=rpc.svcgssd
|
||
|
SVCGSSD="/usr/sbin/rpc.svcgssd"
|
||
|
|
||
|
# rpc.idmapd daemon & binary location
|
||
|
IDMAPD_DAEMON_NAME=rpc.idmapd
|
||
|
IDMAPD="/usr/sbin/rpc.idmapd"
|
||
|
|
||
|
# rpc.mountd daemon & binary location
|
||
|
MOUNTD_DAEMON_NAME=rpc.mountd
|
||
|
MOUNTD="/usr/sbin/rpc.mountd"
|
||
|
|
||
|
# exortfs binary location
|
||
|
EXPORTFS="/usr/sbin/exportfs"
|
||
|
|
||
|
. /etc/rc.conf
|
||
|
. /etc/rc.d/functions
|
||
|
. /etc/conf.d/$daemon_name.conf
|
||
|
|
||
|
# Default number of nfsd servers
|
||
|
[ -z "$NFSD_COUNT" ] && NFSD_COUNT=8
|
||
|
|
||
|
# Default mountpoint and options for nfsd filesystem
|
||
|
[ -z "$PROCNFSD_MOUNTPOINT" ] && PROCNFSD_MOUNTPOINT="/proc/fs/nfsd"
|
||
|
[ -z "$PROCNFSD_MOUNTOPTS" ] && PROCNFSD_MOUNTOPTS="rw,nodev,noexec,nosuid"
|
||
|
|
||
|
case "$NEED_SVCGSSD" in
|
||
|
yes|no)
|
||
|
;;
|
||
|
*)
|
||
|
NEED_SVCGSSD=no
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
do_modprobe() {
|
||
|
if [ -x /sbin/modprobe -a -f /proc/modules ]; then
|
||
|
modprobe -q "$1" || true
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
do_mount() {
|
||
|
if ! grep -E "$1\$" /proc/filesystems &> /dev/null ; then
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
if grep -vw "$1" /proc/mounts &> /dev/null ; then
|
||
|
if ! mountpoint -q "$2" ; then
|
||
|
mount -t "$1" "$1" "$2" -o "$3"
|
||
|
return
|
||
|
fi
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
do_umount() {
|
||
|
if mountpoint -q "$1" ; then
|
||
|
umount "$1"
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
get_pid() {
|
||
|
pidof -o %PPID "$1"
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
start)
|
||
|
ck_daemon nfs-common && { echo -n "Start nfs-common first." >&2; stat_die; }
|
||
|
rc=0
|
||
|
stat_busy "Mounting nfsd filesystem"
|
||
|
do_modprobe nfsd
|
||
|
do_mount nfsd "$PROCNFSD_MOUNTPOINT" "$PROCNFSD_MOUNTOPTS"
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
stat_busy "Exporting all directories"
|
||
|
$EXPORTFS -r
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
stat_busy "Starting $NFSD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $NFSD_PROCESS_NAME)
|
||
|
if [ -z "$PID" ]; then
|
||
|
[ -f /var/run/$NFSD_DAEMON_NAME.pid ] && rm -f /var/run/$NFSD_DAEMON_NAME.pid
|
||
|
# RUN
|
||
|
$NFSD $NFSD_OPTS $NFSD_COUNT
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
echo $(get_pid $NFSD_PROCESS_NAME) > /var/run/$NFSD_DAEMON_NAME.pid
|
||
|
stat_done
|
||
|
fi
|
||
|
else
|
||
|
stat_fail
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ "$NEED_SVCGSSD" = yes ]; then
|
||
|
do_modprobe rpcsec_gss_krb5
|
||
|
stat_busy "Starting $SVCGSSD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $SVCGSSD)
|
||
|
if [ -z "$PID" ]; then
|
||
|
[ -f /var/run/$SVCGSSD_DAEMON_NAME.pid ] && rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid
|
||
|
# RUN
|
||
|
$SVCGSSD $SVCGSSD_OPTS
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
echo $(get_pid $SVCGSSD) > /var/run/$SVCGSSD_DAEMON_NAME.pid
|
||
|
stat_done
|
||
|
fi
|
||
|
else
|
||
|
stat_fail
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
PID=$(get_pid $IDMAPD)
|
||
|
[ ! -z "$PID" ] && kill -SIGHUP $IDMAPD_DAEMON_NAME &> /dev/null
|
||
|
|
||
|
stat_busy "Starting $MOUNTD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $MOUNTD)
|
||
|
if [ -z "$PID" ]; then
|
||
|
[ -f /var/run/$MOUNTD_DAEMON_NAME.pid ] && rm -f /var/run/$MOUNTD_DAEMON_NAME.pid
|
||
|
# RUN
|
||
|
$MOUNTD $MOUNTD_OPTS
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
echo $(get_pid $MOUNTD) > /var/run/$MOUNTD_DAEMON_NAME.pid
|
||
|
stat_done
|
||
|
fi
|
||
|
else
|
||
|
stat_fail
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
add_daemon $daemon_name
|
||
|
;;
|
||
|
|
||
|
stop)
|
||
|
rc=0
|
||
|
stat_busy "Stopping $MOUNTD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $MOUNTD)
|
||
|
# KILL
|
||
|
[ ! -z "$PID" ] && kill $PID &> /dev/null
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
rm -f /var/run/$MOUNTD_DAEMON_NAME.pid &> /dev/null
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
if [ "$NEED_SVCGSSD" = yes ]; then
|
||
|
stat_busy "Stopping $SVCGSSD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $SVCGSSD)
|
||
|
# KILL
|
||
|
[ ! -z "$PID" ] && kill $PID &> /dev/null
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid &> /dev/null
|
||
|
stat_done
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
stat_busy "Stopping $NFSD_DAEMON_NAME daemon"
|
||
|
PID=$(get_pid $NFSD_PROCESS_NAME)
|
||
|
# KILL (SIGINT)
|
||
|
[ ! -z "$PID" ] && kill -2 $PID &> /dev/null
|
||
|
#
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
sleep 1
|
||
|
PID=$(get_pid $NFSD_PROCESS_NAME)
|
||
|
# KILL (KILL) - just to be sure
|
||
|
[ ! -z "$PID" ] && kill -9 $PID &> /dev/null
|
||
|
#
|
||
|
rm -f /var/run/$NFSD_DAEMON_NAME.pid &> /dev/null
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
stat_busy "Unexporting all directories"
|
||
|
$EXPORTFS -au
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
# flush everything out of the kernels export table
|
||
|
if mountpoint -q "$PROCNFSD_MOUNTPOINT" ; then
|
||
|
$EXPORTFS -f
|
||
|
fi
|
||
|
do_umount "$PROCNFSD_MOUNTPOINT" 2>/dev/null || true
|
||
|
rm_daemon $daemon_name
|
||
|
;;
|
||
|
|
||
|
status)
|
||
|
stat_busy "Checking $daemon_name status";
|
||
|
ck_status $daemon_name
|
||
|
|
||
|
stat_busy "Daemon $NFSD_DAEMON_NAME running"
|
||
|
PID=$(get_pid $NFSD_PROCESS_NAME)
|
||
|
if [ -z "$PID" ]; then
|
||
|
stat_fail
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
stat_busy "Daemon $MOUNTD_DAEMON_NAME running"
|
||
|
PID=$(get_pid $MOUNTD)
|
||
|
if [ -z "$PID" ]; then
|
||
|
stat_fail
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
|
||
|
if [ "$NEED_SVCGSSD" = yes ]; then
|
||
|
stat_busy "Daemon $SVCGSSD_DAEMON_NAME running"
|
||
|
PID=$(get_pid $SVCGSSD)
|
||
|
if [ -z "$PID" ]; then
|
||
|
stat_fail
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
fi
|
||
|
echo
|
||
|
;;
|
||
|
|
||
|
reload)
|
||
|
rc=0
|
||
|
stat_busy "Re-exporting all directories"
|
||
|
$EXPORTFS -r
|
||
|
rc=$(($rc+$?))
|
||
|
if [ $rc -gt 0 ]; then
|
||
|
stat_fail
|
||
|
exit $rc
|
||
|
else
|
||
|
stat_done
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
restart)
|
||
|
$0 stop
|
||
|
sleep 3
|
||
|
$0 start
|
||
|
;;
|
||
|
*)
|
||
|
echo "usage: $0 {start|stop|status|reload|restart}"
|
||
|
esac
|
||
|
exit 0
|