net-fs/autofs: make it compatible with sys-libs/musl
authorYixun Lan <dlan@gentoo.org>
Fri, 29 May 2020 09:06:50 +0000 (17:06 +0800)
committerYixun Lan <dlan@gentoo.org>
Fri, 29 May 2020 09:07:52 +0000 (17:07 +0800)
Add patches to support alternative C lib: sys-libs/musl,
most pathes borrow and rework from alpinelinux [1]

Thanks Sam James (sec padawan) for helping on this.

[1] https://git.alpinelinux.org/aports/tree/testing/autofs/

Closes: https://bugs.gentoo.org/716660
Package-Manager: Portage-2.3.100, Repoman-2.3.22
Signed-off-by: Yixun Lan <dlan@gentoo.org>
net-fs/autofs/autofs-5.1.6-r1.ebuild [new file with mode: 0644]
net-fs/autofs/files/autofs-5.1.6-glibc.patch [new file with mode: 0644]
net-fs/autofs/files/autofs-5.1.6-pid.patch [new file with mode: 0644]

diff --git a/net-fs/autofs/autofs-5.1.6-r1.ebuild b/net-fs/autofs/autofs-5.1.6-r1.ebuild
new file mode 100644 (file)
index 0000000..6e70096
--- /dev/null
@@ -0,0 +1,119 @@
+# Copyright 1999-2020 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 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86"
+IUSE="-dmalloc ldap +libtirpc mount-locking sasl systemd"
+
+# currently, sasl code assumes the presence of kerberosV
+RDEPEND=">=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/yacc
+"
+
+PATCHES=(
+       "${FILESDIR}/${P}-glibc.patch"
+       "${FILESDIR}/${P}-pid.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
+       )
+       econf "${myeconfargs[@]}"
+}
+
+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.6-glibc.patch b/net-fs/autofs/files/autofs-5.1.6-glibc.patch
new file mode 100644 (file)
index 0000000..338d885
--- /dev/null
@@ -0,0 +1,110 @@
+diff --git a/daemon/lookup.c b/daemon/lookup.c
+index 60a48f3..bbd65e0 100644
+--- a/daemon/lookup.c
++++ b/daemon/lookup.c
+@@ -382,7 +382,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source
+       if (!S_ISREG(st.st_mode))
+               return NSS_STATUS_NOTFOUND;
+-      if (st.st_mode & __S_IEXEC)
++      if (st.st_mode & S_IEXEC)
+               type = src_prog;
+       else
+               type = src_file;
+@@ -937,7 +937,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_
+       if (!S_ISREG(st.st_mode))
+               return NSS_STATUS_NOTFOUND;
+-      if (st.st_mode & __S_IEXEC)
++      if (st.st_mode & S_IEXEC)
+               type = src_prog;
+       else
+               type = src_file;
+@@ -1113,7 +1113,7 @@ static struct map_source *lookup_get_map_source(struct master_mapent *entry)
+       if (!S_ISREG(st.st_mode))
+               return NULL;
+-      if (st.st_mode & __S_IEXEC)
++      if (st.st_mode & S_IEXEC)
+               type = "program";
+       else
+               type = "file";
+diff --git a/include/automount.h b/include/automount.h
+index 4fd0ba9..7b855a7 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -13,6 +13,7 @@
+ #include <limits.h>
+ #include <time.h>
+ #include <syslog.h>
++#include <sys/procfs.h>
+ #include <sys/types.h>
+ #include <pthread.h>
+ #include <sched.h>
+@@ -142,6 +143,16 @@ struct autofs_point;
+ #define UMOUNT_RETRIES                8
+ #define EXPIRE_RETRIES                3
++#ifndef __SWORD_TYPE
++#if __WORDSIZE == 32
++# define __SWORD_TYPE         int
++#elif __WORDSIZE == 64
++# define __SWORD_TYPE         long int
++#else
++#error
++#endif
++#endif
++
+ static u_int32_t inline hash(const char *key, unsigned int size)
+ {
+       u_int32_t hashval;
+diff --git a/include/nsswitch.h b/include/nsswitch.h
+index d3e4027..8376113 100644
+--- a/include/nsswitch.h
++++ b/include/nsswitch.h
+@@ -24,6 +24,10 @@
+ #include <netdb.h>
+ #include "list.h"
++#ifndef _PATH_NSSWITCH_CONF
++#define _PATH_NSSWITCH_CONF "/dev/null"
++#endif
++
+ #define NSSWITCH_FILE _PATH_NSSWITCH_CONF
+ enum nsswitch_status {
+diff --git a/include/rpc_subs.h b/include/rpc_subs.h
+index 6e35eed..7ba4b93 100644
+--- a/include/rpc_subs.h
++++ b/include/rpc_subs.h
+@@ -18,7 +18,7 @@
+ #include <rpc/rpc.h>
+ #include <rpc/pmap_prot.h>
+-#include <nfs/nfs.h>
++#include <linux/nfs.h>
+ #include <linux/nfs2.h>
+ #include <linux/nfs3.h>
+diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c
+index fadd2ea..cf109de 100644
+--- a/modules/lookup_multi.c
++++ b/modules/lookup_multi.c
+@@ -247,7 +247,7 @@ static struct lookup_mod *nss_open_lookup(const char *format, int argc, const ch
+                               continue;
+                       }
+-                      if (st.st_mode & __S_IEXEC)
++                      if (st.st_mode & S_IEXEC)
+                               type = src_prog;
+                       else
+                               type = src_file;
+@@ -452,7 +452,7 @@ int lookup_reinit(const char *my_mapfmt,
+                                       continue;
+                               }
+-                              if (st.st_mode & __S_IEXEC)
++                              if (st.st_mode & S_IEXEC)
+                                       type = src_prog;
+                               else
+                                       type = src_file;
diff --git a/net-fs/autofs/files/autofs-5.1.6-pid.patch b/net-fs/autofs/files/autofs-5.1.6-pid.patch
new file mode 100644 (file)
index 0000000..1766c34
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/include/log.h b/include/log.h
+index 69eed96..14051cc 100644
+--- a/include/log.h
++++ b/include/log.h
+@@ -46,6 +46,8 @@ extern void log_crit(unsigned, const char* msg, ...);
+ extern void log_debug(unsigned int, const char* msg, ...);
+ extern void logmsg(const char* msg, ...);
++#include <unistd.h> /* Required for pid_t */
++
+ extern pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label);
+ #define debug(opt, msg, args...)      \
+