/rc6.d/K80nfs-kernel-server

http://github.com/brinkman83/bashrc · Shell · 215 lines · 167 code · 29 blank · 19 comment · 38 complexity · 68d22ac7f9e2d0c75e7a8fc143fa3a0a MD5 · raw file

  1. #!/bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: nfs-kernel-server
  4. # Required-Start: $remote_fs nfs-common $portmap $time
  5. # Required-Stop: $remote_fs nfs-common $portmap $time
  6. # Default-Start: 2 3 4 5
  7. # Default-Stop: 0 1 6
  8. # Short-Description: Kernel NFS server support
  9. # Description: NFS is a popular protocol for file sharing across
  10. # TCP/IP networks. This service provides NFS server
  11. # functionality, which is configured via the
  12. # /etc/exports file.
  13. ### END INIT INFO
  14. # What is this?
  15. DESC="NFS kernel daemon"
  16. PREFIX=/usr
  17. # Exit if required binaries are missing.
  18. [ -x $PREFIX/sbin/rpc.nfsd ] || exit 0
  19. [ -x $PREFIX/sbin/rpc.mountd ] || exit 0
  20. [ -x $PREFIX/sbin/exportfs ] || exit 0
  21. # Read config
  22. DEFAULTFILE=/etc/default/nfs-kernel-server
  23. RPCNFSDCOUNT=8
  24. RPCNFSDPRIORITY=0
  25. RPCMOUNTDOPTS=
  26. NEED_SVCGSSD=no
  27. RPCSVCGSSDOPTS=
  28. PROCNFSD_MOUNTPOINT=/proc/fs/nfsd
  29. if [ -f $DEFAULTFILE ]; then
  30. . $DEFAULTFILE
  31. fi
  32. . /lib/lsb/init-functions
  33. do_modprobe() {
  34. if [ -x /sbin/modprobe -a -f /proc/modules ]
  35. then
  36. modprobe -q "$1" || true
  37. fi
  38. }
  39. do_mount() {
  40. if ! grep -E -qs "$1\$" /proc/filesystems
  41. then
  42. return 1
  43. fi
  44. if ! mountpoint -q "$2"
  45. then
  46. mount -t "$1" "$1" "$2"
  47. return
  48. fi
  49. return 0
  50. }
  51. # See how we were called.
  52. case "$1" in
  53. start)
  54. if [ -f /etc/exports ]
  55. then
  56. do_modprobe nfsd
  57. # See if our running kernel supports the NFS kernel server
  58. if [ -f /proc/kallsyms ] && ! grep -qE ' nfsd_serv ' /proc/kallsyms; then
  59. log_warning_msg "Not starting $DESC: no support in current kernel."
  60. exit 0
  61. fi
  62. do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
  63. log_begin_msg "Exporting directories for $DESC..."
  64. $PREFIX/sbin/exportfs -r
  65. RET=$?
  66. if [ $RET != 0 ]; then
  67. log_end_msg $RET
  68. exit $RET
  69. fi
  70. log_end_msg 0
  71. log_daemon_msg "Starting $DESC"
  72. log_progress_msg "nfsd"
  73. start-stop-daemon --start --oknodo --quiet \
  74. --nicelevel $RPCNFSDPRIORITY \
  75. --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
  76. RET=$?
  77. if [ $RET != 0 ]; then
  78. log_end_msg $RET
  79. exit $RET
  80. fi
  81. # make sure 127.0.0.1 is a valid source for requests
  82. ClearAddr=
  83. if [ -f /proc/net/rpc/auth.unix.ip/channel ]
  84. then
  85. fgrep -qs 127.0.0.1 /proc/net/rpc/auth.unix.ip/content || {
  86. echo "nfsd 127.0.0.1 2147483647 localhost" >/proc/net/rpc/auth.unix.ip/channel
  87. ClearAddr=yes
  88. }
  89. fi
  90. $PREFIX/bin/rpcinfo -u localhost nfs 3 >/dev/null 2>&1 ||
  91. RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3"
  92. [ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
  93. if [ "$NEED_SVCGSSD" = "yes" ]; then
  94. do_modprobe rpcsec_gss_krb5
  95. log_progress_msg "svcgssd"
  96. start-stop-daemon --start --oknodo --quiet \
  97. --exec $PREFIX/sbin/rpc.svcgssd -- $RPCSVCGSSDOPTS
  98. RET=$?
  99. if [ $RET != 0 ]; then
  100. log_end_msg $RET
  101. exit $RET
  102. fi
  103. fi
  104. log_progress_msg "mountd"
  105. start-stop-daemon --start --oknodo --quiet \
  106. --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
  107. RET=$?
  108. if [ $RET != 0 ]; then
  109. log_end_msg $RET
  110. exit $RET
  111. fi
  112. log_end_msg 0
  113. else
  114. log_warning_msg "Not starting $DESC: no exports."
  115. fi
  116. ;;
  117. stop)
  118. log_daemon_msg "Stopping $DESC"
  119. log_progress_msg "mountd"
  120. start-stop-daemon --stop --oknodo --quiet \
  121. --name rpc.mountd --user 0
  122. RET=$?
  123. if [ $RET != 0 ]; then
  124. log_end_msg $RET
  125. exit $RET
  126. fi
  127. if [ "$NEED_SVCGSSD" = "yes" ]; then
  128. log_progress_msg "svcgssd"
  129. start-stop-daemon --stop --oknodo --quiet \
  130. --name rpc.svcgssd --user 0
  131. RET=$?
  132. if [ $RET != 0 ]; then
  133. log_end_msg $RET
  134. exit $RET
  135. fi
  136. fi
  137. log_progress_msg "nfsd"
  138. start-stop-daemon --stop --oknodo --quiet \
  139. --name nfsd --user 0 --signal 2
  140. RET=$?
  141. if [ $RET != 0 ]; then
  142. log_end_msg $RET
  143. exit $RET
  144. fi
  145. log_end_msg 0
  146. log_begin_msg "Unexporting directories for $DESC..."
  147. $PREFIX/sbin/exportfs -au
  148. RET=$?
  149. if [ $RET != 0 ]; then
  150. log_end_msg $RET
  151. exit $RET
  152. fi
  153. log_end_msg 0
  154. if mountpoint -q $PROCNFSD_MOUNTPOINT
  155. then
  156. $PREFIX/sbin/exportfs -f
  157. fi
  158. ;;
  159. status)
  160. if pidof nfsd >/dev/null
  161. then
  162. echo "nfsd running"
  163. exit 0
  164. else
  165. echo "nfsd not running"
  166. exit 3
  167. fi
  168. ;;
  169. reload | force-reload)
  170. log_begin_msg "Re-exporting directories for $DESC..."
  171. $PREFIX/sbin/exportfs -r
  172. RET=$?
  173. log_end_msg $RET
  174. exit $RET
  175. ;;
  176. restart)
  177. $0 stop
  178. sleep 1
  179. $0 start
  180. ;;
  181. *)
  182. log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"
  183. exit 1
  184. ;;
  185. esac
  186. exit 0