From f7586f437afc004fee03a1fdf586d6dd9b7db480 Mon Sep 17 00:00:00 2001 From: Yixun Lan Date: Wed, 22 Dec 2021 21:15:58 +0800 Subject: net-fs/autofs: fix nfsv4 mount issue Closes: https://bugs.gentoo.org/827239 Package-Manager: Portage-3.0.28, Repoman-3.0.3 Signed-off-by: Yixun Lan --- net-fs/autofs/autofs-5.1.8-r1.ebuild | 132 +++++++++++++++++++++ net-fs/autofs/autofs-5.1.8.ebuild | 131 -------------------- net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch | 88 ++++++++++++++ 3 files changed, 220 insertions(+), 131 deletions(-) create mode 100644 net-fs/autofs/autofs-5.1.8-r1.ebuild delete mode 100644 net-fs/autofs/autofs-5.1.8.ebuild create mode 100644 net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch (limited to 'net-fs') diff --git a/net-fs/autofs/autofs-5.1.8-r1.ebuild b/net-fs/autofs/autofs-5.1.8-r1.ebuild new file mode 100644 index 000000000000..d8aa892b214a --- /dev/null +++ b/net-fs/autofs/autofs-5.1.8-r1.ebuild @@ -0,0 +1,132 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit linux-info systemd toolchain-funcs + +DESCRIPTION="Kernel based automounter" +HOMEPAGE="https://web.archive.org/web/*/http://www.linux-consulting.com/Amd_AutoFS/autofs.html" +SRC_URI="https://www.kernel.org/pub/linux/daemons/${PN}/v5/${P}.tar.xz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86" +IUSE="dmalloc ldap +libtirpc mount-locking sasl systemd" + +# currently, sasl code assumes the presence of kerberosV +RDEPEND=" + net-libs/libnsl:= + >=sys-apps/util-linux-2.20 + dmalloc? ( dev-libs/dmalloc[threads] ) + ldap? ( >=net-nds/openldap-2.0 + sasl? ( + dev-libs/cyrus-sasl + dev-libs/libxml2 + virtual/krb5 + ) + ) + systemd? ( sys-apps/systemd ) + libtirpc? ( net-libs/libtirpc ) + !libtirpc? ( elibc_glibc? ( sys-libs/glibc[rpc(-)] ) ) +" +DEPEND="${RDEPEND} + libtirpc? ( net-libs/rpcsvc-proto ) +" +BDEPEND=" + sys-devel/flex + virtual/pkgconfig + virtual/yacc +" + +PATCHES=( + "${FILESDIR}/${PN}-5.1.7-glibc.patch" + "${FILESDIR}/${PN}-5.1.6-musl.patch" + "${FILESDIR}/${PN}-5.1.6-pid.patch" + "${FILESDIR}/${PN}-5.1.6-pid.patch" + "${FILESDIR}/${P}-dmalloc.patch" + "${FILESDIR}/${P}-nfsv4-mount.patch" +) + +pkg_setup() { + linux-info_pkg_setup + + local CONFIG_CHECK + + if kernel_is -ge 4 18; then + CONFIG_CHECK="~AUTOFS_FS" + else + CONFIG_CHECK="~AUTOFS4_FS" + fi + + check_extra_config +} + +src_prepare() { + sed -i -e "s:/usr/bin/kill:/bin/kill:" samples/autofs.service.in || die # bug #479492 + sed -i -e "/^EnvironmentFile/d" samples/autofs.service.in || die # bug #592334 + + # Install samples including autofs.service + sed -i -e "/^SUBDIRS/s/$/ samples/g" Makefile.rules || die + + default +} + +src_configure() { + # bug #483716 + tc-export AR + # --with-confdir is for bug #361481 + # --with-mapdir is for bug #385113 + local myeconfargs=( + --with-confdir=/etc/conf.d + --with-mapdir=/etc/autofs + $(use_with dmalloc) + $(use_with ldap openldap) + $(use_with libtirpc) + $(use_with sasl) + $(use_enable mount-locking) + $(use_with systemd systemd $(systemd_get_systemunitdir)) # bug #479492 + --without-hesiod + --disable-ext-env + --enable-sloppy-mount # bug #453778 + --enable-force-shutdown + --enable-ignore-busy + RANLIB="$(type -P $(tc-getRANLIB))" # bug #483716 + ) + + CONFIG_SHELL="${BROOT}/bin/bash" econf "${myeconfargs[@]}" +} + +src_compile() { + export DONTSTRIP=1 + default +} + +src_install() { + default + rmdir "${D}"/run + + if kernel_is -lt 2 6 30; then + # kernel patches + docinto patches + dodoc patches/${PN}4-2.6.??{,.?{,?}}-v5-update-????????.patch + fi + newinitd "${FILESDIR}"/autofs5.initd autofs + insinto etc/autofs + newins "${FILESDIR}"/autofs5-auto.master auto.master +} + +pkg_postinst() { + if kernel_is -lt 2 6 30; then + elog "This version of ${PN} requires a kernel with autofs4 supporting" + elog "protocol version 5.00. Patches for kernels older than 2.6.30 have" + elog "been installed into" + elog "${EROOT}/usr/share/doc/${P}/patches." + elog "For further instructions how to patch the kernel, please refer to" + elog "${EROOT}/usr/share/doc/${P}/INSTALL." + elog + fi + elog "If you plan on using autofs for automounting remote NFS mounts," + elog "please check that both portmap (or rpcbind) and rpc.statd/lockd" + elog "are running." +} diff --git a/net-fs/autofs/autofs-5.1.8.ebuild b/net-fs/autofs/autofs-5.1.8.ebuild deleted file mode 100644 index 3c519f852c70..000000000000 --- a/net-fs/autofs/autofs-5.1.8.ebuild +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright 1999-2021 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -inherit linux-info systemd toolchain-funcs - -DESCRIPTION="Kernel based automounter" -HOMEPAGE="https://web.archive.org/web/*/http://www.linux-consulting.com/Amd_AutoFS/autofs.html" -SRC_URI="https://www.kernel.org/pub/linux/daemons/${PN}/v5/${P}.tar.xz" - -LICENSE="GPL-2" -SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86" -IUSE="dmalloc ldap +libtirpc mount-locking sasl systemd" - -# currently, sasl code assumes the presence of kerberosV -RDEPEND=" - net-libs/libnsl:= - >=sys-apps/util-linux-2.20 - dmalloc? ( dev-libs/dmalloc[threads] ) - ldap? ( >=net-nds/openldap-2.0 - sasl? ( - dev-libs/cyrus-sasl - dev-libs/libxml2 - virtual/krb5 - ) - ) - systemd? ( sys-apps/systemd ) - libtirpc? ( net-libs/libtirpc ) - !libtirpc? ( elibc_glibc? ( sys-libs/glibc[rpc(-)] ) ) -" -DEPEND="${RDEPEND} - libtirpc? ( net-libs/rpcsvc-proto ) -" -BDEPEND=" - sys-devel/flex - virtual/pkgconfig - virtual/yacc -" - -PATCHES=( - "${FILESDIR}/${PN}-5.1.7-glibc.patch" - "${FILESDIR}/${PN}-5.1.6-musl.patch" - "${FILESDIR}/${PN}-5.1.6-pid.patch" - "${FILESDIR}/${PN}-5.1.6-pid.patch" - "${FILESDIR}/${P}-dmalloc.patch" -) - -pkg_setup() { - linux-info_pkg_setup - - local CONFIG_CHECK - - if kernel_is -ge 4 18; then - CONFIG_CHECK="~AUTOFS_FS" - else - CONFIG_CHECK="~AUTOFS4_FS" - fi - - check_extra_config -} - -src_prepare() { - sed -i -e "s:/usr/bin/kill:/bin/kill:" samples/autofs.service.in || die # bug #479492 - sed -i -e "/^EnvironmentFile/d" samples/autofs.service.in || die # bug #592334 - - # Install samples including autofs.service - sed -i -e "/^SUBDIRS/s/$/ samples/g" Makefile.rules || die - - default -} - -src_configure() { - # bug #483716 - tc-export AR - # --with-confdir is for bug #361481 - # --with-mapdir is for bug #385113 - local myeconfargs=( - --with-confdir=/etc/conf.d - --with-mapdir=/etc/autofs - $(use_with dmalloc) - $(use_with ldap openldap) - $(use_with libtirpc) - $(use_with sasl) - $(use_enable mount-locking) - $(use_with systemd systemd $(systemd_get_systemunitdir)) # bug #479492 - --without-hesiod - --disable-ext-env - --enable-sloppy-mount # bug #453778 - --enable-force-shutdown - --enable-ignore-busy - RANLIB="$(type -P $(tc-getRANLIB))" # bug #483716 - ) - - CONFIG_SHELL="${BROOT}/bin/bash" econf "${myeconfargs[@]}" -} - -src_compile() { - export DONTSTRIP=1 - default -} - -src_install() { - default - rmdir "${D}"/run - - if kernel_is -lt 2 6 30; then - # kernel patches - docinto patches - dodoc patches/${PN}4-2.6.??{,.?{,?}}-v5-update-????????.patch - fi - newinitd "${FILESDIR}"/autofs5.initd autofs - insinto etc/autofs - newins "${FILESDIR}"/autofs5-auto.master auto.master -} - -pkg_postinst() { - if kernel_is -lt 2 6 30; then - elog "This version of ${PN} requires a kernel with autofs4 supporting" - elog "protocol version 5.00. Patches for kernels older than 2.6.30 have" - elog "been installed into" - elog "${EROOT}/usr/share/doc/${P}/patches." - elog "For further instructions how to patch the kernel, please refer to" - elog "${EROOT}/usr/share/doc/${P}/INSTALL." - elog - fi - elog "If you plan on using autofs for automounting remote NFS mounts," - elog "please check that both portmap (or rpcbind) and rpc.statd/lockd" - elog "are running." -} diff --git a/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch new file mode 100644 index 000000000000..eb1bc6cb4241 --- /dev/null +++ b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch @@ -0,0 +1,88 @@ +autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind + +From: Ian Kent + +Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when +setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only +mounts to also use rpcbind to probe availability which breaks the +requirememt that this type of mount not use rpcbind at all. + +Fix this by treating fstype=nfs4 mounts as a special case which doesn't +use rpcbind. +--- + CHANGELOG | 1 + + include/replicated.h | 2 ++ + modules/mount_nfs.c | 13 +++++++------ + modules/replicated.c | 4 ++-- + 4 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/include/replicated.h b/include/replicated.h +index 95ff1f0d..f889a56a 100644 +--- a/include/replicated.h ++++ b/include/replicated.h +@@ -35,6 +35,8 @@ + #define NFS3_REQUESTED NFS3_SUPPORTED + #define NFS4_REQUESTED NFS4_SUPPORTED + ++#define NFS4_ONLY_REQUESTED 0x0800 ++ + #define TCP_SUPPORTED 0x0001 + #define UDP_SUPPORTED 0x0002 + #define TCP_REQUESTED TCP_SUPPORTED +diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c +index 0ab87dcf..feb5afcd 100644 +--- a/modules/mount_nfs.c ++++ b/modules/mount_nfs.c +@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + mount_default_proto = defaults_get_mount_nfs_default_proto(); + vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT; + if (strcmp(fstype, "nfs4") == 0) +- vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED; ++ vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; + else if (mount_default_proto == 4) + vers = vers | NFS4_VERS_DEFAULT; + +@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + } else { + /* Is any version of NFSv4 in the options */ + if (_strncmp("vers=4", cp, 6) == 0 || +- _strncmp("nfsvers=4", cp, 9) == 0) +- vers = NFS4_VERS_MASK | TCP_SUPPORTED; +- else if (_strncmp("vers=3", cp, o_len) == 0 || ++ _strncmp("nfsvers=4", cp, 9) == 0) { ++ vers &= ~(NFS_VERS_MASK); ++ vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; ++ } else if (_strncmp("vers=3", cp, o_len) == 0 || + _strncmp("nfsvers=3", cp, o_len) == 0) { +- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); ++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); + vers |= NFS3_REQUESTED; + } else if (_strncmp("vers=2", cp, o_len) == 0 || + _strncmp("nfsvers=2", cp, o_len) == 0) { +- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); ++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); + vers |= NFS2_REQUESTED; + } else if (strstr(cp, "port=") == cp && + o_len - 5 < 25) { +diff --git a/modules/replicated.c b/modules/replicated.c +index 09075dd0..cdb7c617 100644 +--- a/modules/replicated.c ++++ b/modules/replicated.c +@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host, + + rpc_info->proto = proto; + if (port < 0) { +- if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED)) ++ if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED)) + rpc_info->port = NFS_PORT; + else + port = 0; +@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host, + { + struct conn_info pm_info, rpc_info; + time_t timeout = RPC_TIMEOUT; +- unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK); ++ unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED); + int ret = 0; + + if (!check_address_proto(logopt, host, version)) -- cgit v1.2.3-65-gdbad