netmount: do not handle NFS mounts

Since nfs and nfs4 file systems require extra daemons to be running on
the client to function properly, netmount should not try to handle these
file systems.

Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 427996
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=427996
This commit is contained in:
William Hubbs 2012-09-14 14:29:00 -05:00
parent 6b1e806c8b
commit a0fe1c5a60

View File

@ -2,83 +2,27 @@
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name> # Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license. # Released under the 2-clause BSD license.
description="Mounts network shares according to /etc/fstab." description="Mounts network shares, other than NFS, according to /etc/fstab."
# We skip all NFS shares in this script because they require extra
need_portmap() # daemons to be running on the client in order to work correctly.
{ # It is best to allow nfs-utils to handle all nfs shares.
local opts=
local IFS="
"
set -- $(fstabinfo --options --fstype nfs,nfs4)
for opts; do
case ,$opts, in
*,noauto,*|*,nolock,*);;
*) return 0;;
esac
done
return 1
}
need_idmap()
{
local opts=
local IFS="
"
set -- $(fstabinfo --options --fstype nfs4)
for opts; do
case ,$opts, in
*,noauto,*|*,nolock,*);;
*) return 0;;
esac
done
return 1
}
depend() 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="rpc.statd"
[ -x @SYSCONFDIR@/init.d/rpcbind ] \
&& pmap="$pmap rpcbind" \
|| pmap="$pmap portmap"
fi
# Only have rpc.idmapd as a dependency if there is a nfs4 mount in fstab
# that is set to mount at boot
if need_idmap; then
pmap="$pmap rpc.idmapd"
fi
config /etc/fstab config /etc/fstab
need net $pmap need net
use afc-client amd autofs openvpn use afc-client amd autofs openvpn
use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd use dns
keyword -jail -prefix -vserver keyword -jail -prefix -vserver
} }
start() start()
{ {
local myneed= myuse= pmap="portmap" nfsmounts=
[ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind"
local x= fs= rc= local x= fs= rc=
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
case "$x" in case "$x" in
nfs|nfs4) nfs|nfs4)
# If the nfsmount script took care of the nfs continue
# 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 esac
fs="$fs${fs:+,}$x" fs="$fs${fs:+,}$x"
@ -103,7 +47,14 @@ stop()
. "$RC_LIBEXECDIR"/sh/rc-mount.sh . "$RC_LIBEXECDIR"/sh/rc-mount.sh
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
fs="$fs${fs:+,}$x" case "$x" in
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+,}$x"
;;
esac
done done
if [ -n "$fs" ]; then if [ -n "$fs" ]; then
umount -at $fs || eerror "Failed to simply unmount filesystems" umount -at $fs || eerror "Failed to simply unmount filesystems"
@ -112,7 +63,14 @@ stop()
eindent eindent
fs= fs=
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
fs="$fs${fs:+|}$x" case "$x" in
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+|}$x"
;;
esac
done done
[ -n "$fs" ] && fs="^($fs)$" [ -n "$fs" ] && fs="^($fs)$"
do_unmount umount ${fs:+--fstype-regex} $fs --netdev do_unmount umount ${fs:+--fstype-regex} $fs --netdev