summaryrefslogtreecommitdiff
path: root/init.d/netmount.in
diff options
context:
space:
mode:
Diffstat (limited to 'init.d/netmount.in')
-rw-r--r--init.d/netmount.in96
1 files changed, 96 insertions, 0 deletions
diff --git a/init.d/netmount.in b/init.d/netmount.in
new file mode 100644
index 0000000..3aa46e1
--- /dev/null
+++ b/init.d/netmount.in
@@ -0,0 +1,96 @@
+#!/sbin/runscript
+# Copyright 2007-2008 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+description="Mounts network shares according to /etc/fstab."
+
+need_portmap()
+{
+ local opts=
+ local IFS="
+"
+ set -- $(fstabinfo --options --fstype nfs,nfs4)
+ for opts; do
+ case ,${opts}, in
+ *,noauto,*|*,nolock,*);;
+ *) return 0;;
+ esac
+ done
+ return 1
+}
+
+depend()
+{
+ # Only have portmap as a dependency if there is a nfs mount in fstab
+ # that is set to mount at boot
+ local pmap=""
+ if need_portmap; then
+ pmap="${pmap} rpc.statd"
+ [ -x /etc/init.d/rpcbind ] \
+ && pmap="rpcbind" \
+ || pmap="portmap"
+ fi
+
+ config /etc/fstab
+ need net ${pmap}
+ use afc-client amd autofs dns nfs nfsmount portmap rpcbind rpc.statd
+ keyword nojail noprefix
+}
+
+start()
+{
+ local myneed= myuse= pmap="portmap" nfsmounts=
+ [ -x /etc/init.d/rpcbind ] && pmap="rpcbind"
+
+ local x= fs=
+ for x in ${net_fs_list}; do
+ case "${x}" in
+ nfs|nfs4)
+ # If the nfsmount script took care of the nfs
+ # filesystems, then there's no point in trying
+ # them twice
+ service_started nfsmount && continue
+
+ # Only try to mount NFS filesystems if portmap was
+ # started. This is to fix "hang" problems for new
+ # users who do not add portmap to the default runlevel.
+ if need_portmap && ! service_started "${pmap}"; then
+ continue
+ fi
+ ;;
+ esac
+ fs="${fs}${fs:+,}${x}"
+ done
+
+ ebegin "Mounting network filesystems"
+ mount -at ${fs}
+ ewend $? "Could not mount all network filesystems"
+ return 0
+}
+
+stop()
+{
+ local x= fs=
+
+ ebegin "Unmounting network filesystems"
+ . "${RC_LIBDIR}/sh/rc-mount.sh"
+
+ for x in ${net_fs_list}; do
+ fs="${fs}${fs:+,}${x}"
+ done
+ if [ -n "${fs}" ]; then
+ umount -at ${fs} || eerror "Failed to simply unmount filesystems"
+ fi
+
+ eindent
+ fs=
+ for x in ${net_fs_list}; do
+ fs="${fs}${fs:+|}${x}"
+ done
+ [ -n "${fs}" ] && fs="^(${fs})$"
+ do_unmount "umount" ${fs:+--fstype-regex} ${fs} --netdev
+ retval=$?
+
+ eoutdent
+ eend ${retval} "Failed to unmount network filesystems"
+}