* [Buildroot] [PATCH] systemd: allow to build with uClibc toolchains
@ 2017-06-25 11:00 Waldemar Brodkorb
2017-06-25 13:53 ` Thomas Petazzoni
0 siblings, 1 reply; 2+ messages in thread
From: Waldemar Brodkorb @ 2017-06-25 11:00 UTC (permalink / raw)
To: buildroot
Both patches where applied upstream.
We need to disable any systemd parts using either IDN or NSS.
(IDN in getaddrinfo()/getnaminfo())
Tested in qemu-system-arm using defconfig.
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
---
All required patches for systemd are included in uClibc-ng 1.0.25.
So no need to rebuild the toolchains.
There might be open issues with some of the systemd parts and I am
willing to fix any uClibc issues when reported back.
---
.../0004-Make-IDN-support-conditional.patch | 71 ++++++++++++++++++++++
...0005-make-nss-systemd-support-conditional.patch | 59 ++++++++++++++++++
package/systemd/Config.in | 2 +
package/systemd/systemd.mk | 9 +++
system/Config.in | 6 +-
5 files changed, 144 insertions(+), 3 deletions(-)
create mode 100644 package/systemd/0004-Make-IDN-support-conditional.patch
create mode 100644 package/systemd/0005-make-nss-systemd-support-conditional.patch
diff --git a/package/systemd/0004-Make-IDN-support-conditional.patch b/package/systemd/0004-Make-IDN-support-conditional.patch
new file mode 100644
index 0000000..29afe9c
--- /dev/null
+++ b/package/systemd/0004-Make-IDN-support-conditional.patch
@@ -0,0 +1,71 @@
+From 6326a143263fc460bbda871d6e74b1d7d2841ea1 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@openadk.org>
+Date: Thu, 15 Jun 2017 17:44:59 +0200
+Subject: [PATCH] Make IDN support conditional
+
+[zj: rename HAVE_IDN to ENABLE_IDN]
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+---
+ configure.ac | 10 ++++++++++
+ src/basic/socket-util.c | 9 +++++++--
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index a47492d..3e7af76 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1050,6 +1050,15 @@ fi
+ AM_CONDITIONAL(HAVE_LIBIDN, [test "$have_libidn" = "yes"])
+
+ # ------------------------------------------------------------------------------
++have_idn=no
++AC_ARG_ENABLE(idn, AS_HELP_STRING([--disable-idn], [disable IDN when printing host names]))
++if test "x$enable_idn" != "xno"; then
++ have_idn=yes
++ AC_DEFINE(ENABLE_IDN, [1], [IDN is enabled])
++fi
++AM_CONDITIONAL(ENABLE_IDN, [test "$have_idn" = "yes"])
++
++# ------------------------------------------------------------------------------
+ have_libiptc=no
+ AC_ARG_ENABLE(libiptc, AS_HELP_STRING([--disable-libiptc], [disable optional LIBIPTC support]))
+ if test "x$enable_libiptc" != "xno"; then
+@@ -1742,6 +1751,7 @@ AC_MSG_RESULT([
+ libcurl: ${have_libcurl}
+ libidn2: ${have_libidn2}
+ libidn: ${have_libidn}
++ IDN: ${have_idn}
+ libiptc: ${have_libiptc}
+ ELFUTILS: ${have_elfutils}
+ binfmt: ${have_binfmt}
+diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
+index e5847dc..49642c2 100644
+--- a/src/basic/socket-util.c
++++ b/src/basic/socket-util.c
+@@ -48,6 +48,12 @@
+ #include "utf8.h"
+ #include "util.h"
+
++#ifdef ENABLE_IDN
++# define IDN_FLAGS (NI_IDN|NI_IDN_USE_STD3_ASCII_RULES)
++#else
++# define IDN_FLAGS 0
++#endif
++
+ int socket_address_parse(SocketAddress *a, const char *s) {
+ char *e, *n;
+ unsigned u;
+@@ -723,8 +729,7 @@ int socknameinfo_pretty(union sockaddr_union *sa, socklen_t salen, char **_ret)
+
+ assert(_ret);
+
+- r = getnameinfo(&sa->sa, salen, host, sizeof(host), NULL, 0,
+- NI_IDN|NI_IDN_USE_STD3_ASCII_RULES);
++ r = getnameinfo(&sa->sa, salen, host, sizeof(host), NULL, 0, IDN_FLAGS);
+ if (r != 0) {
+ int saved_errno = errno;
+
+--
+2.1.4
+
diff --git a/package/systemd/0005-make-nss-systemd-support-conditional.patch b/package/systemd/0005-make-nss-systemd-support-conditional.patch
new file mode 100644
index 0000000..b666b83
--- /dev/null
+++ b/package/systemd/0005-make-nss-systemd-support-conditional.patch
@@ -0,0 +1,59 @@
+From e7e11bbf340f031223b56442b3aa4f4220fed315 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx-github@users.noreply.github.com>
+Date: Sat, 24 Jun 2017 19:30:26 +0200
+Subject: [PATCH] make nss-systemd support conditional (#6155)
+
+This allows the nss-systemd module to be disabled on minimal installations.
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+
+[ Stripped down patch only touching autotool infrastructure ]
+---
+diff --git a/Makefile.am b/Makefile.am
+index 07b425e..4838df6 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -5280,6 +5280,7 @@ manual_tests += \
+ test-nss
+
+ # ------------------------------------------------------------------------------
++if ENABLE_NSS_SYSTEMD
+ libnss_systemd_la_SOURCES = \
+ src/nss-systemd/nss-systemd.sym \
+ src/nss-systemd/nss-systemd.c
+@@ -5299,6 +5300,7 @@ libnss_systemd_la_LIBADD = \
+
+ rootlib_LTLIBRARIES += \
+ libnss_systemd.la
++endif
+
+ # ------------------------------------------------------------------------------
+ if HAVE_MYHOSTNAME
+diff --git a/configure.ac b/configure.ac
+index 90e79d7..379f617 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1059,6 +1059,15 @@ fi
+ AM_CONDITIONAL(ENABLE_IDN, [test "$have_idn" = "yes"])
+
+ # ------------------------------------------------------------------------------
++have_nss_systemd=no
++AC_ARG_ENABLE(nss-systemd, AS_HELP_STRING([--disable-nss-systemd], [disable nss-systemd support]))
++if test "x$enable_nss_systemd" != "xno"; then
++ have_nss_systemd=yes
++ AC_DEFINE(ENABLE_NSS_SYSTEMD, [1], [nss-systemd is enabled])
++fi
++AM_CONDITIONAL(ENABLE_NSS_SYSTEMD, [test "$have_nss_systemd" = "yes"])
++
++# ------------------------------------------------------------------------------
+ have_libiptc=no
+ AC_ARG_ENABLE(libiptc, AS_HELP_STRING([--disable-libiptc], [disable optional LIBIPTC support]))
+ if test "x$enable_libiptc" != "xno"; then
+@@ -1801,6 +1810,7 @@ AC_MSG_RESULT([
+ dbus: ${have_dbus}
+ glib: ${have_glib}
+ nss-myhostname: ${have_myhostname}
++ nss-systemd: ${have_nss_systemd}
+ hwdb: ${enable_hwdb}
+ tpm: ${have_tpm}
+ Python: ${have_python}
diff --git a/package/systemd/Config.in b/package/systemd/Config.in
index 478cc10..e1b66f9 100644
--- a/package/systemd/Config.in
+++ b/package/systemd/Config.in
@@ -188,6 +188,7 @@ config BR2_PACKAGE_SYSTEMD_MACHINED
config BR2_PACKAGE_SYSTEMD_MYHOSTNAME
bool "enable myhostname NSS plugin"
+ depends on !BR2_TOOLCHAIN_USES_UCLIBC
default y
help
nss-myhostname is a plug-in module for the GNU Name Service
@@ -243,6 +244,7 @@ config BR2_PACKAGE_SYSTEMD_RANDOMSEED
config BR2_PACKAGE_SYSTEMD_RESOLVED
bool "enable resolve daemon"
+ depends on !BR2_TOOLCHAIN_USES_UCLIBC
default y
help
systemd-resolved is a system service that provides network
diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
index 153d615..e8731b6 100644
--- a/package/systemd/systemd.mk
+++ b/package/systemd/systemd.mk
@@ -43,6 +43,15 @@ SYSTEMD_CONF_OPTS += \
--with-default-dnssec=no \
--without-python
+# disable unsupported features using NSS or IDN
+ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
+SYSTEMD_CONF_OPTS += \
+ --disable-resolved \
+ --disable-myhostname \
+ --disable-idn \
+ --disable-nss-systemd
+endif
+
SYSTEMD_CFLAGS = $(TARGET_CFLAGS) -fno-lto
# Override paths to a few utilities needed at runtime, to
diff --git a/system/Config.in b/system/Config.in
index b47ae43..dc99b51 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -118,7 +118,7 @@ config BR2_INIT_SYSV
config BR2_INIT_SYSTEMD
bool "systemd"
depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
- depends on BR2_TOOLCHAIN_USES_GLIBC
+ depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC
depends on BR2_USE_WCHAR
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on BR2_TOOLCHAIN_HAS_SSP
@@ -129,8 +129,8 @@ config BR2_INIT_SYSTEMD
select BR2_PACKAGE_SYSTEMD
select BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW if BR2_ROOTFS_SKELETON_DEFAULT
-comment "systemd needs a glibc toolchain, headers >= 3.10"
- depends on !(BR2_TOOLCHAIN_USES_GLIBC \
+comment "systemd needs a glibc or uClibc toolchain, headers >= 3.10"
+ depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC \
&& BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10)
config BR2_INIT_NONE
--
2.1.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Buildroot] [PATCH] systemd: allow to build with uClibc toolchains
2017-06-25 11:00 [Buildroot] [PATCH] systemd: allow to build with uClibc toolchains Waldemar Brodkorb
@ 2017-06-25 13:53 ` Thomas Petazzoni
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Petazzoni @ 2017-06-25 13:53 UTC (permalink / raw)
To: buildroot
Hello,
On Sun, 25 Jun 2017 13:00:04 +0200, Waldemar Brodkorb wrote:
> Both patches where applied upstream.
> We need to disable any systemd parts using either IDN or NSS.
> (IDN in getaddrinfo()/getnaminfo())
>
> Tested in qemu-system-arm using defconfig.
>
> Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Nice! Thanks for working on this. A couple of questions/comments below,
though.
> diff --git a/package/systemd/0004-Make-IDN-support-conditional.patch b/package/systemd/0004-Make-IDN-support-conditional.patch
> new file mode 100644
> index 0000000..29afe9c
> --- /dev/null
> +++ b/package/systemd/0004-Make-IDN-support-conditional.patch
> @@ -0,0 +1,71 @@
> +From 6326a143263fc460bbda871d6e74b1d7d2841ea1 Mon Sep 17 00:00:00 2001
> +From: Waldemar Brodkorb <wbx@openadk.org>
> +Date: Thu, 15 Jun 2017 17:44:59 +0200
> +Subject: [PATCH] Make IDN support conditional
> +
> +[zj: rename HAVE_IDN to ENABLE_IDN]
> +
> +Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
If those patches are upstream, having the upstream URL in here is nice.
> diff --git a/package/systemd/Config.in b/package/systemd/Config.in
> index 478cc10..e1b66f9 100644
> --- a/package/systemd/Config.in
> +++ b/package/systemd/Config.in
> @@ -188,6 +188,7 @@ config BR2_PACKAGE_SYSTEMD_MACHINED
>
> config BR2_PACKAGE_SYSTEMD_MYHOSTNAME
> bool "enable myhostname NSS plugin"
> + depends on !BR2_TOOLCHAIN_USES_UCLIBC
> default y
> help
> nss-myhostname is a plug-in module for the GNU Name Service
> @@ -243,6 +244,7 @@ config BR2_PACKAGE_SYSTEMD_RANDOMSEED
>
> config BR2_PACKAGE_SYSTEMD_RESOLVED
> bool "enable resolve daemon"
> + depends on !BR2_TOOLCHAIN_USES_UCLIBC
> default y
> help
> systemd-resolved is a system service that provides network
> diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
> index 153d615..e8731b6 100644
> --- a/package/systemd/systemd.mk
> +++ b/package/systemd/systemd.mk
> @@ -43,6 +43,15 @@ SYSTEMD_CONF_OPTS += \
> --with-default-dnssec=no \
> --without-python
>
> +# disable unsupported features using NSS or IDN
> +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
> +SYSTEMD_CONF_OPTS += \
> + --disable-resolved \
> + --disable-myhostname \
> + --disable-idn \
> + --disable-nss-systemd
This is not really good.
First, --disable-resolved and --disable-myhostname are not needed,
because you have added the "depends on !BR2_TOOLCHAIN_USES_UCLIBC" to
those options. Therefore, they cannot be selected, which means the
existing code:
ifeq ($(BR2_PACKAGE_SYSTEMD_MYHOSTNAME),y)
SYSTEMD_CONF_OPTS += --enable-myhostname
else
SYSTEMD_CONF_OPTS += --disable-myhostname
endif
ifeq ($(BR2_PACKAGE_SYSTEMD_RESOLVED),y)
SYSTEMD_CONF_OPTS += --enable-resolved
SYSTEMD_RESOLVED_USER = systemd-resolve -1 systemd-resolve -1 * - - - Network Name Resolution Manager
else
SYSTEMD_CONF_OPTS += --disable-resolved
endif
will already pass --disable-resolved/--disable-myhostname.
For --disable-idn, I'm wondering about the interaction with
--{enable,disable}-libidn that we already have. Are these independent?
Also, can we have both the enable/disable logic for those options,
something like:
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
... enable whatever requires glibc specific stuff
else
... disable whatever requires glibc specific stuff
endif
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-06-25 13:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-25 11:00 [Buildroot] [PATCH] systemd: allow to build with uClibc toolchains Waldemar Brodkorb
2017-06-25 13:53 ` Thomas Petazzoni
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.