Skip to contentSkip to conversation

autofs: use libtirpc instead of internal C implementation

PATCH New Waldemar Brodkorb 4 participants 7 messages Mar 21, 2017 – Mar 28, 2017

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

uClibc-ng plans to remove internal RPC implementation as it is ipv4 only and can not be used for most important RPC software rpcbind and nfs-utils.
musl does not implement RPC and GNU C library deprecated the internal implementation a while ago.

---
I am planning to send patches to convert existing packages and remove the RPC internal toolchain stuff, before releasing uClibc-ng without RPC. For a smooth migration.

---
 package/autofs/0004-libtirpc-via-pkgconfig.patch | 83 ++++++++++++++++++++++++
 package/autofs/Config.in                         |  7 +-
 package/autofs/autofs.mk                         |  3 +-
 3 files changed, 88 insertions(+), 5 deletions(-)
 create mode 100644 package/autofs/0004-libtirpc-via-pkgconfig.patch
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +83 -0
new file mode 100644
index 0000000..784b4c6
@@ -0,0 +1,83 @@
+Use pkg-config to find libtirpc headers
+
+Signed-off-by: Waldemar Brodkorb <[email protected]>
+
+diff -Nur autofs-5.1.2.orig/aclocal.m4 autofs-5.1.2/aclocal.m4
+--- autofs-5.1.2.orig/aclocal.m4	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/aclocal.m4	2017-03-21 20:10:06.441615642 +0100
+@@ -411,11 +411,18 @@
+ dnl --------------------------------------------------------------------------
+ AC_DEFUN([AF_CHECK_LIBTIRPC],
+ [
++
++AC_PATH_PROGS(PKG_CONFIG, pkg-config, no)
++
+ # save current flags
+ af_check_libtirpc_save_cflags="$CFLAGS"
+ af_check_libtirpc_save_ldflags="$LDFLAGS"
+-CFLAGS="$CFLAGS -I/usr/include/tirpc"
+-LDFLAGS="$LDFLAGS -ltirpc"
++
++TIRPC_LIBS=`$PKG_CONFIG --libs libtirpc`
++TIRPC_FLAGS=`$PKG_CONFIG --cflags libtirpc`
++
++CFLAGS="$CFLAGS $TIRPC_FLAGS"
++LIBS="$LIBS $TIRPC_LIBS"
+ 
+ AC_TRY_LINK(
+     [ #include <rpc/rpc.h> ],
+@@ -431,7 +438,8 @@
+ if test "$af_have_libtirpc" = "yes"; then
+     AC_DEFINE(WITH_LIBTIRPC,1, [Define to 1 if you have the libtirpc library installed])
+     AC_DEFINE(TIRPC_WORKAROUND,1, [Define to 1 to use the libtirpc tsd usage workaround])
+-    TIRPCLIB="-ltirpc"
++    TIRPCINCLUDE=$TIRPC_FLAGS
++    TIRPCLIB=$TIRPC_LIBS
+ fi
+ 
+ AC_CHECK_FUNCS([getrpcbyname getservbyname])
+@@ -439,6 +447,7 @@
+ # restore flags
+ CFLAGS="$af_check_libtirpc_save_cflags"
+ LDFLAGS="$af_check_libtirpc_save_ldflags"
++
+ ])
+ 
+ AC_DEFUN([AF_WITH_LIBTIRPC],
+diff -Nur autofs-5.1.2.orig/configure.in autofs-5.1.2/configure.in
+--- autofs-5.1.2.orig/configure.in	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/configure.in	2017-03-20 22:01:57.191254563 +0100
+@@ -126,6 +126,7 @@
+ #
+ AF_WITH_LIBTIRPC()
+ AC_SUBST(TIRPCLIB)
++AC_SUBST(TIRPCINCLUDE)
+ 
+ #
+ # Optional include dmalloc
+diff -Nur autofs-5.1.2.orig/Makefile.conf.in autofs-5.1.2/Makefile.conf.in
+--- autofs-5.1.2.orig/Makefile.conf.in	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/Makefile.conf.in	2017-03-20 21:59:38.341881802 +0100
+@@ -62,6 +62,7 @@
+ 
+ # Use libtirpc if requested and available
+ TIRPCLIB = @TIRPCLIB@
++TIRPCINCLUDE = @TIRPCINCLUDE@
+ 
+ # Use dmalloc for memory debuging
+ DMALLOCLIB = @DMALLOCLIB@
+diff -Nur autofs-5.1.2.orig/Makefile.rules autofs-5.1.2/Makefile.rules
+--- autofs-5.1.2.orig/Makefile.rules	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/Makefile.rules	2017-03-20 22:03:25.590675167 +0100
+@@ -45,10 +45,8 @@
+ CFLAGS += -D_REENTRANT -D_FILE_OFFSET_BITS=64
+ LIBS += -lpthread
+ 
+-ifdef TIRPCLIB
+-CFLAGS += -I/usr/include/tirpc
++CFLAGS += $(TIRPCINCLUDE)
+ LIBS += $(TIRPCLIB)
+-endif
+ 
+ ifdef DMALLOCLIB
+ LIBS += $(DMALLOCLIB)
package/autofs/Config.in +3 -4
index 8e08357..bf1bf47 100644
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC
 	help
 	  Autofs controls the operation of the automount daemons. The
 	  automount daemons automatically mount filesystems when they
@@ -15,7 +15,6 @@ config BR2_PACKAGE_AUTOFS
 
 	  http://www.linuxfromscratch.org/blfs/view/svn/general/autofs.html
 
-comment "autofs needs a toolchain w/ NPTL, RPC, dynamic library"
+comment "autofs needs a toolchain w/ NPTL and dynamic library"
 	depends on BR2_USE_MMU
-	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS || \
-		!BR2_TOOLCHAIN_HAS_NATIVE_RPC
+	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS
package/autofs/autofs.mk +2 -1
index 23e6836..1add8b2 100644
@@ -9,7 +9,7 @@ AUTOFS_SOURCE = autofs-$(AUTOFS_VERSION).tar.xz
 AUTOFS_SITE = $(BR2_KERNEL_MIRROR)/linux/daemons/autofs/v5
 AUTOFS_LICENSE = GPLv2+
 AUTOFS_LICENSE_FILES = COPYING COPYRIGHT
-AUTOFS_DEPENDENCIES = host-flex host-bison
+AUTOFS_DEPENDENCIES = host-flex host-bison libtirpc host-pkgconf
 # For 0002-autofs-configure-check-for-clock_gettime-in-librt.patch and
 # 0003-configure-add-cache-variable-for-Linux-proc-filesyst.patch.
 AUTOFS_AUTORECONF = YES
@@ -27,6 +27,7 @@ AUTOFS_CONF_ENV = \
 AUTOFS_CONF_OPTS = \
 	--disable-mount-locking \
 	--enable-ignore-busy \
+	--with-libtirpc \
 	--without-openldap \
 	--without-sasl \
 	--with-path="$(BR_PATH)" \
Signature · 1 line
2.1.4
#1 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

Hello,

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 7 lines · Waldemar Brodkorb
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC

Why should we force people to use libtirpc ? What about instead:

select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC

and adjust the .mk file accordingly.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

Hi,
Thomas Petazzoni wrote,

Quoted 4 lines

Hello,

On Tue, 21 Mar 2017 20:32:13 +0100, Waldemar Brodkorb wrote:

Quoted 9 lines

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 7 lines
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC

Why should we force people to use libtirpc ?

Because the internal RPC implementation is mostly useless and getting removed?

Quoted 5 lines

What about instead:

select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC

and adjust the .mk file accordingly.

The idea was to entirely remove BR2_TOOLCHAIN_HAS_NATIVE_RPC in further patches. This would involve to disable deprecated RPC in internal Glibc and uClibc-ng toolchains.
I think RPC support in external toolchains will disappear when GNU C library will finally remove the code.

best regards
Waldemar

#3 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

Hello,

Quoted 12 lines · Waldemar Brodkorb
Quoted 11 lines · Waldemar Brodkorb

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 8 lines
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC  

Why should we force people to use libtirpc ?

Quoted 2 lines

Because the internal RPC implementation is mostly useless and getting removed?

I don't quite agree. The one in glibc has been used for years successfully, and is still useful. So even if uClibc decides to remove its internal RPC implementation, I'd like to give people the option to use the internal RPC implementation of glibc.

I agree RPC support in glibc will most likely disappear at some point in the future, but we're not there yet. So for now, I'd prefer if we just took the step of dropping RPC support in uClibc, and doing the necessary changes in packages so that they all build/work fine with libtirpc. That's anyway a very good preparation step to get rid of internal RPC support entirely at some point in the future.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#4 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

Quoted 24 lines · Thomas Petazzoni

Hello,

Quoted 12 lines · Waldemar Brodkorb
Quoted 11 lines · Waldemar Brodkorb

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 8 lines
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC  

Why should we force people to use libtirpc ?

Quoted 2 lines

Because the internal RPC implementation is mostly useless and getting removed?

I don't quite agree. The one in glibc has been used for years successfully, and is still useful. So even if uClibc decides to remove its internal RPC implementation, I'd like to give people the option to use the internal RPC implementation of glibc.

Quoted 6 lines

I agree RPC support in glibc will most likely disappear at some point in the future, but we're not there yet. So for now, I'd prefer if we just took the step of dropping RPC support in uClibc, and doing the necessary changes in packages so that they all build/work fine with libtirpc. That's anyway a very good preparation step to get rid of internal RPC support entirely at some point in the future.

Well, if glibc is the only one that is still going to provide native RPC, I
really don't think it's worth keeping support for it. It's not as if the 125KB extra from libtirpc are really going to hurt someone who is using glibc, right? And keeping the option of native RPC or libtirpc is probably going to make the code more complicated.

So I tend to agree with Waldemar's approach.

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#5 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

All,

On 2017-03-23 22:53 +0100, Arnout Vandecappelle spake thusly:

Quoted 32 lines · Thomas Petazzoni
Quoted 24 lines

Hello,

Quoted 12 lines · Waldemar Brodkorb
Quoted 11 lines · Waldemar Brodkorb

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 8 lines
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC  

Why should we force people to use libtirpc ?

Quoted 2 lines

Because the internal RPC implementation is mostly useless and getting removed?

I don't quite agree. The one in glibc has been used for years successfully, and is still useful. So even if uClibc decides to remove its internal RPC implementation, I'd like to give people the option to use the internal RPC implementation of glibc.

Quoted 6 lines

I agree RPC support in glibc will most likely disappear at some point in the future, but we're not there yet. So for now, I'd prefer if we just took the step of dropping RPC support in uClibc, and doing the necessary changes in packages so that they all build/work fine with libtirpc. That's anyway a very good preparation step to get rid of internal RPC support entirely at some point in the future.

Quoted 7 lines

Well, if glibc is the only one that is still going to provide native RPC, I
really don't think it's worth keeping support for it. It's not as if the 125KB extra from libtirpc are really going to hurt someone who is using glibc, right? And keeping the option of native RPC or libtirpc is probably going to make the code more complicated.

So I tend to agree with Waldemar's approach.

I would say that I agree with Waldemar and Arnout.

Especially since the internal RPC implementation in glibc is not even complete (not IPv6-clean for example) so it really makes sense to switch to libtirpc which is nowadays pretty much stable.

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#6 lore raw

PATCH 1/1 autofs: use libtirpc instead of internal C implementation

Hi,
Yann E. MORIN wrote,

Quoted 41 lines

All,

On 2017-03-23 22:53 +0100, Arnout Vandecappelle spake thusly:

Quoted 38 lines · Thomas Petazzoni
Quoted 24 lines

Hello,

Quoted 12 lines · Waldemar Brodkorb
Quoted 11 lines · Waldemar Brodkorb

package/autofs/Config.in config BR2_PACKAGE_AUTOFS · line 6

Quoted 8 lines
package/autofs/Config.in +1 -1
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
 	bool "autofs"
 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
 	depends on BR2_USE_MMU
-	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
 	depends on !BR2_STATIC_LIBS # dlfcn
+	select BR2_PACKAGE_LIBTIRPC  

Why should we force people to use libtirpc ?

Quoted 2 lines

Because the internal RPC implementation is mostly useless and getting removed?

I don't quite agree. The one in glibc has been used for years successfully, and is still useful. So even if uClibc decides to remove its internal RPC implementation, I'd like to give people the option to use the internal RPC implementation of glibc.

Quoted 6 lines

I agree RPC support in glibc will most likely disappear at some point in the future, but we're not there yet. So for now, I'd prefer if we just took the step of dropping RPC support in uClibc, and doing the necessary changes in packages so that they all build/work fine with libtirpc. That's anyway a very good preparation step to get rid of internal RPC support entirely at some point in the future.

Well, if glibc is the only one that is still going to provide native RPC, I
really don't think it's worth keeping support for it. It's not as if the 125KB extra from libtirpc are really going to hurt someone who is using glibc, right? And keeping the option of native RPC or libtirpc is probably going to make the code more complicated.

Quoted 7 lines
Quoted 1 line

So I tend to agree with Waldemar's approach.

I would say that I agree with Waldemar and Arnout.

Especially since the internal RPC implementation in glibc is not even complete (not IPv6-clean for example) so it really makes sense to switch to libtirpc which is nowadays pretty much stable.

Peter, any opinion?

best regards
Waldemar