summaryrefslogtreecommitdiff
path: root/meta/packages/nfs-utils/files/nfsserver
blob: 9d02e85848c73d1be1bb0b1fd2aecc1a85788e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/bin/sh
### BEGIN INIT INFO
# Provides:          nfs-kernel-server
# Required-Start:    $remote_fs $portmap hwclock
# Required-Stop:     $remote_fs $portmap hwclock
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Kernel NFS server support
# Description:       NFS is a popular protocol for file sharing across
#                    TCP/IP networks. This service provides NFS server
#                    functionality, which is configured via the
#                    /etc/exports file.
### END INIT INFO
#
# Startup script for nfs-utils
#
#
# The environment variable NFS_SERVERS may be set in /etc/default/nfsd
# Other control variables may be overridden here too
test -r /etc/default/nfsd && . /etc/default/nfsd
#
# Location of executables:
test -x "$NFS_MOUNTD" || NFS_MOUNTD=/usr/sbin/mountd
test -x "$NFS_NFSD" || NFS_NFSD=/usr/sbin/nfsd
test -x "$NFS_STATD" || NFS_STATD=/usr/sbin/statd
#
# The user mode program must also exist (it just starts the kernel
# threads using the kernel module code).
test -x "$NFS_MOUNTD" || exit 0
test -x "$NFS_NFSD" || exit 0
#
# Default is 8 threads, value is settable between 1 and the truely
# ridiculous 99
test "$NFS_SERVERS" -gt 0 && test "$NFS_SERVERS" -lt 100 || NFS_SERVERS=8
#
# 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 sm sm.bak
		test -w sm/state || {
			rm -f sm/state
			:>sm/state
		}
		umask 022
		for file in xtab etab smtab rmtab
		do
			test -w "$file" || {
				rm -f "$file"
				:>"$file"
			}
		done
	)
	echo done
}
#mountd
start_mountd(){
	echo -n 'starting mountd: '
	start-stop-daemon --start --exec "$NFS_MOUNTD" -- "-f /etc/exports $@"
	echo done
}
stop_mountd(){
	echo -n 'stopping mountd: '
	start-stop-daemon --stop --quiet --exec "$NFS_MOUNTD"
	echo done
}
#
#nfsd
start_nfsd(){
	echo -n "starting $1 nfsd kernel threads: "
	start-stop-daemon --start --exec "$NFS_NFSD" -- "$@"
	echo done
}
delay_nfsd(){
	for delay in 0 1 2 3 4 5 6 7 8 9 
	do
		if pidof nfsd >/dev/null
		then
			echo -n .
			sleep 1
		else
			return 0
		fi
	done
	return 1
}
stop_nfsd(){
	# WARNING: this kills any process with the executable
	# name 'nfsd'.
	echo -n 'stopping nfsd: '
	start-stop-daemon --stop --quiet --signal 1 --name nfsd
	if delay_nfsd || {
		echo failed
		echo ' using signal 9: '
		start-stop-daemon --stop --quiet --signal 9 --name nfsd
		delay_nfsd
	}
	then
		echo done
		# This will remove, recursively, dependencies
		echo -n 'removing nfsd kernel module: '
		if modprobe -r nfsd
		then
			echo done
		else
			echo failed
		fi
	else
		echo failed
	fi
}

#statd
start_statd(){
	echo -n "starting statd: "
	start-stop-daemon --start --exec "$NFS_STATD"
	echo done
}
stop_statd(){
	# WARNING: this kills any process with the executable
	# name 'statd'.
	echo -n 'stopping statd: '
	start-stop-daemon --stop --quiet --signal 1 --name statd
	echo done
}
#----------------------------------------------------------------------
#
# supported options:
#  start
#  stop
#  reload: reloads the exports file
#  restart: stops and starts mountd
#FIXME: need to create the /var/lib/nfs/... directories
case "$1" in
start)	create_directories
	start_nfsd "$NFS_SERVERS"
	start_mountd
	start_statd
	test -r /etc/exports && exportfs -a;;
stop)	exportfs -ua
	stop_statd
	stop_mountd
	stop_nfsd;;
reload)	test -r /etc/exports && exportfs -r;;
restart)exportfs -ua
	stop_mountd
	stop_statd
	# restart does not restart the kernel threads,
	# only the user mode processes
	start_mountd
	start_statd
	test -r /etc/exports && exportfs -a;;
esac