HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
File: //usr/syno/etc/rc.sysv/S83nfsd.sh
#!/bin/sh
# Copyright (c) 2000-2008 Synology Inc. All rights reserved.

. /etc.defaults/rc.subr

LinuxVersionCode=$(KernelVersionCode $(KernelVersion))
ProcName="nfsd"
PidFile="/var/run/${ProcName}.pid"
RM="/bin/rm"
TOUCH="/bin/touch"
SZF_NFS_KRB5_KEY="/etc/nfs/krb5.keytab"
Krb5Principal=`/bin/get_key_value /etc/nfs/syno_nfs_conf kerberos_principal`


# rpcsec_gss_krb5 module is built-in in kernel 2.6.32
if [ $LinuxVersionCode -ne $(KernelVersionCode "2.6.32") ]; then
	KERNELMODULEV4="rpcsec_gss_krb5"
fi
KERNELMODULE="${KERNELMODULEV4} exportfs nfsd"


waitServDead()
{
	local serv="$1"
	local retryCount=0

	while [ $retryCount -le 10 ]
	do
		if ! pidof ${serv}; then
			return
		fi &> /dev/null
		sleep 1
		retryCount=`expr $retryCount + 1`
	done

	killall -9 ${serv}
}

stopNFSServ()
{
	killall statd
	killall mountd
	/bin/rm -rf /var/lib/nfs/sm
	nfsd 0
	killall idmapd
	killall svcgssd
	killall rpcbind

	waitServDead "mountd"
	waitServDead "statd"
	waitServDead "nfsd"
	waitServDead "rpcbind"
	waitServDead "idmapd"
	waitServDead "svcgssd"

	/usr/sbin/exportfs -au >/dev/null 2>&1
	/usr/sbin/exportfs -f >/dev/null 2>&1
}

case $1 in
	start)

		$0 status
		if [ 0 -eq $? ]; then
			exit 0;
		fi

		EnableVersion4=`/bin/get_key_value /etc/nfs/syno_nfs_conf nfsv4_enable`
		EnableCustomPort=`/bin/get_key_value /etc/nfs/syno_nfs_conf nfs_custom_port_enable`

		echo "Starting NFS server..."

		N=`cat /proc/meminfo | grep MemTotal: | awk '{ m = ($2 / 1024 / 32) ; print int(m) +1;}'`
		N=$((N > 128 ? 128 : N))
		if [ x$EnableCustomPort == xyes ] ; then
			NlmPort=`/bin/get_key_value /etc/nfs/syno_nfs_conf nlm_port`
			echo $NlmPort > /proc/sys/fs/nfs/nlm_tcpport
			echo $NlmPort > /proc/sys/fs/nfs/nlm_udpport
		else
			echo 0 > /proc/sys/fs/nfs/nlm_tcpport
			echo 0 > /proc/sys/fs/nfs/nlm_udpport
		fi
		SYNOLoadModules $KERNELMODULE
		/bin/mount -t nfsd none /proc/fs/nfsd
		/usr/sbin/exportfs -r >/dev/null 2>&1
		/sbin/rpcbind
		/usr/sbin/mountd -p 892
		/bin/mkdir -p /var/lib/nfs/v4recovery
		if [ $LinuxVersionCode -ge $(KernelVersionCode "4.4") ]; then
			echo "-4.2" > /proc/fs/nfsd/versions
		fi
		if [ x$EnableVersion4 == xyes ] ; then
			if [ $LinuxVersionCode -ge $(KernelVersionCode "3.10") ]; then
				/usr/sbin/nfsd --nfs-version 4.1 $N
			else
				/usr/sbin/nfsd --no-nfs-version 4.1 $N
			fi
		else
			/usr/sbin/nfsd --no-nfs-version 4 $N
		fi
		/bin/mkdir -p /var/lib/nfs/sm
		/bin/mkdir -p /var/lib/nfs/rpc_pipefs/nfs
		/usr/sbin/idmapd
		if [ $LinuxVersionCode -ge $(KernelVersionCode "3.2") ] && [ -f "$SZF_NFS_KRB5_KEY" ] && [ "x$Krb5Principal" != x ]; then
			/usr/sbin/svcgssd -p $Krb5Principal
		fi

		StatdPort=`/bin/get_key_value /etc/nfs/syno_nfs_conf statd_port`
		if [ x$EnableCustomPort == xyes ] && [ x$StatdPort != x ] ; then
			/usr/sbin/statd -p $StatdPort
		else
			/usr/sbin/statd
		fi
		if [ -f $PidFile ]; then
			$RM $PidFile
		fi

		$TOUCH $PidFile
		echo `pidof $ProcName | awk '{print $NF}'` > $PidFile
	;;
	stop)
		stopNFSServ

		/bin/rm -rf /var/lib/nfs/v4recovery
		/bin/rm -rf /var/lib/nfs/rpc_pipefs/nfs
		/bin/umount /proc/fs/nfsd
		SYNOUnloadModules $KERNELMODULE

		$RM $PidFile
		echo `date +'%s'` > /proc/net/rpc/auth.rpcsec.context/flush
	;;
	status)
		svcgssdErr=0;
		if [ $LinuxVersionCode -ge $(KernelVersionCode "3.2") ] && [ -f "$SZF_NFS_KRB5_KEY" ] && [ "x$Krb5Principal" != x ] && ! pidof svcgssd; then
			svcgssdErr=1;
		fi  &> /dev/null

		if pidof mountd && pidof statd && pidof rpcbind && pidof nfsd && pidof idmapd && [ 0 == $svcgssdErr ] ; then
			if [ -f $PidFile ]; then
				pid=`cat $PidFile`
				if [ 0 != `ps aux | grep $ProcName | grep $pid | wc -l` ]; then
					exit $LSB_STAT_RUNNING
				else
					exit $LSB_STAT_DEAD_FPID
				fi
			fi
			exit $LSB_STAT_RUNNING
		else
			if [ -f $PidFile ]; then
				exit $LSB_STAT_DEAD_FPID
			else
				exit $LSB_STAT_NOT_RUNNING
			fi
		fi &> /dev/null
	;;
	restart)
		$0 stop
		sleep 1
		$0 start
	;;
	reload)
		/usr/syno/sbin/synoservice --is-enabled nfsd
		# skip reload if nfsd is stop
		if [ 1 -eq $? ]; then
			/usr/sbin/exportfs -ar
			exit $?
		fi
		exit 0
	;;
	reloadidmap)
		killall -9 svcgssd
		killall -9 idmapd
		sleep 1
		echo `date +'%s'` > /proc/net/rpc/auth.rpcsec.context/flush
		if [ $LinuxVersionCode -ge $(KernelVersionCode "3.2") ] && [ -f "$SZF_NFS_KRB5_KEY" ] && [ "x$Krb5Principal" != x ]; then
			/usr/sbin/svcgssd -p $Krb5Principal
		fi
		/usr/sbin/idmapd
	;;
	*)
	echo "Usages: $0 [start|stop|restart|status|reload|reloadidmap]"
	;;
esac