Message ID | 20191207180049.3245578-2-jeremy.rosen@smile.fr |
---|---|
State | Superseded |
Headers | show |
Series | use host-systemd to enable units | expand |
Jérémy, All, On 2019-12-07 19:00 +0100, Jérémy Rosen spake thusly: > Add the infrastructure to build the host version of systemd > * disable all optional features, they can be re-added when needed > * systemd has creative way of dealing with cross compile > we build a "normal" host systemd, but install it in $HOST_DIR > we use systemctl --root to correctly act on TARGET_DIR > * we need to adjust RPATH using patchelf because meson can't do it > correctly by itsel > > Signed-off-by: Jérémy Rosen <jeremy.rosen@smile.fr> > --- [--SNIP--] > +HOST_SYSTEMD_HOST_TOOLS = \ > + systemd-analyze systemd-mount systemctl udevadm udevadm was not in your previous iteration, but now it is. This means that, when BR2_PACKAGE_SYSTEMD_HWDB=y, we now have two host packages that provide udevadm: host-systemd and host-eudev. We can't keep both. So, I would change BR2_PACKAGE_SYSTEMD_HWDB to drop the select to host eudev now; we don't need it anymore. If systemd is enabled, then host-systemd will always be built, so we will always have a udevadm. Regards, Yann E. MORIN. > +define HOST_SYSTEMD_FIX_RPATH > + $(foreach f,$(HOST_SYSTEMD_HOST_TOOLS), \ > + $(HOST_DIR)/bin/patchelf --set-rpath $(HOST_DIR)/lib:$(HOST_DIR)/lib/systemd $(HOST_DIR)/bin/$(f) > + ) > +endef > + > +HOST_SYSTEMD_POST_INSTALL_HOOKS += HOST_SYSTEMD_FIX_RPATH > +HOST_SYSTEMD_NINJA_ENV = DESTDIR=$(HOST_DIR) > + > +$(eval $(host-meson-package)) > -- > 2.24.0 > > _______________________________________________ > buildroot mailing list > buildroot@busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot
Le sam. 7 déc. 2019 à 19:53, Yann E. MORIN <yann.morin.1998@free.fr> a écrit : > Jérémy, All, > > On 2019-12-07 19:00 +0100, Jérémy Rosen spake thusly: > > Add the infrastructure to build the host version of systemd > > * disable all optional features, they can be re-added when needed > > * systemd has creative way of dealing with cross compile > > we build a "normal" host systemd, but install it in $HOST_DIR > > we use systemctl --root to correctly act on TARGET_DIR > > * we need to adjust RPATH using patchelf because meson can't do it > > correctly by itsel > > > > Signed-off-by: Jérémy Rosen <jeremy.rosen@smile.fr> > > --- > [--SNIP--] > > +HOST_SYSTEMD_HOST_TOOLS = \ > > + systemd-analyze systemd-mount systemctl udevadm > > udevadm was not in your previous iteration, but now it is. > > This means that, when BR2_PACKAGE_SYSTEMD_HWDB=y, we now have two host > packages that provide udevadm: host-systemd and host-eudev. > > We can't keep both. > > So, I would change BR2_PACKAGE_SYSTEMD_HWDB to drop the select to host > eudev now; we don't need it anymore. If systemd is enabled, then > host-systemd will always be built, so we will always have a udevadm. > > Regards, > Yann E. MORIN. > > Fixed locally (also tested with 244) I'll wait a couple of days for more reviews and i'll repost a v4 > > +define HOST_SYSTEMD_FIX_RPATH > > + $(foreach f,$(HOST_SYSTEMD_HOST_TOOLS), \ > > + $(HOST_DIR)/bin/patchelf --set-rpath > $(HOST_DIR)/lib:$(HOST_DIR)/lib/systemd $(HOST_DIR)/bin/$(f) > > + ) > > +endef > > + > > +HOST_SYSTEMD_POST_INSTALL_HOOKS += HOST_SYSTEMD_FIX_RPATH > > +HOST_SYSTEMD_NINJA_ENV = DESTDIR=$(HOST_DIR) > > + > > +$(eval $(host-meson-package)) > > -- > > 2.24.0 > > > > _______________________________________________ > > buildroot mailing list > > buildroot@busybox.net > > http://lists.busybox.net/mailman/listinfo/buildroot > > -- > > .-----------------.--------------------.------------------.--------------------. > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' > conspiracy: | > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ > | > | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is > no | > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v > conspiracy. | > > '------------------------------^-------^------------------^--------------------' >
diff --git a/package/Config.in.host b/package/Config.in.host index 758c268e00..62e860d7c3 100644 --- a/package/Config.in.host +++ b/package/Config.in.host @@ -70,6 +70,7 @@ menu "Host utilities" source "package/squashfs/Config.in.host" source "package/sunxi-tools/Config.in.host" source "package/swig/Config.in.host" + source "package/systemd/Config.in.host" source "package/tegrarcm/Config.in.host" source "package/ti-cgt-pru/Config.in.host" source "package/uboot-tools/Config.in.host" diff --git a/package/systemd/Config.in.host b/package/systemd/Config.in.host new file mode 100644 index 0000000000..219f24239e --- /dev/null +++ b/package/systemd/Config.in.host @@ -0,0 +1,3 @@ +# Select this if you need host systemd tools (e.g. systemctl) +config BR2_PACKAGE_HOST_SYSTEMD + bool diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk index ebec9bdd91..5aeaef3904 100644 --- a/package/systemd/systemd.mk +++ b/package/systemd/systemd.mk @@ -551,3 +551,96 @@ SYSTEMD_CONF_ENV = $(HOST_UTF8_LOCALE_ENV) SYSTEMD_NINJA_ENV = $(HOST_UTF8_LOCALE_ENV) $(eval $(meson-package)) + +# +# Host-systemd configuration +# +#Options tweaked for buildroot +HOST_SYSTEMD_CONF_OPTS= \ + -Dsplit-bin=true \ + -Dsplit-usr=false \ + --prefix=/usr \ + --libdir=lib \ + --sysconfdir=/etc \ + --localstatedir=/var + +#disable everything else +HOST_SYSTEMD_CONF_OPTS+= \ + -Dutmp=false \ + -Dhibernate=false \ + -Dldconfig=false \ + -Dresolve=false \ + -Defi=false \ + -Dtpm=false \ + -Denvironment-d=false \ + -Dbinfmt=false \ + -Dcoredump=false \ + -Dpstore=false \ + -Dlogind=false \ + -Dhostnamed=false \ + -Dlocaled=false \ + -Dmachined=false \ + -Dportabled=false \ + -Dnetworkd=false \ + -Dtimedated=false \ + -Dtimesyncd=false \ + -Dremote=false \ + -Dcreate-log-dirs=false \ + -Dnss-myhostname=false \ + -Dnss-mymachines=false \ + -Dnss-resolve=false \ + -Dnss-systemd=false \ + -Dfirstboot=false \ + -Drandomseed=false \ + -Dbacklight=false \ + -Dvconsole=false \ + -Dquotacheck=false \ + -Dsysusers=false \ + -Dtmpfiles=false \ + -Dimportd=false \ + -Dhwdb=false \ + -Drfkill=false \ + -Dman=false \ + -Dhtml=false \ + -Dsmack=false \ + -Dpolkit=false \ + -Dblkid=false \ + -Didn=false \ + -Dadm-group=false \ + -Dwheel-group=false \ + -Dzlib=false \ + -Dgshadow=false \ + -Dima=false \ + -Dtests=false \ + -Dglib=false \ + -Dacl=false \ + -Dsysvinit-path='' + +HOST_SYSTEMD_DEPENDENCIES = \ + host-util-linux \ + host-patchelf \ + host-libcap \ + host-gperf + +# Fix RPATH After installation +# * systemd provides a install_rpath instruction to meson because the binaries need to link with +# libsystemd which is not in a standard path +# * meson can only replace the RPATH, not append to it +# * the original rpatch is thus lost. +# * the original path had been tweaked by buildroot vial LD_FLAGS to add $(HOST_DIR)/lib +# * thus re-tweak rpath after the installation for all binaries that need it +#buildroot detects incorrect RPATH, so adding new binaries should be safe (it won't compile +#unless properly integrated). +HOST_SYSTEMD_HOST_TOOLS = \ + systemd-analyze systemd-mount systemctl udevadm + +define HOST_SYSTEMD_FIX_RPATH + $(foreach f,$(HOST_SYSTEMD_HOST_TOOLS), \ + $(HOST_DIR)/bin/patchelf --set-rpath $(HOST_DIR)/lib:$(HOST_DIR)/lib/systemd $(HOST_DIR)/bin/$(f) + ) +endef + +HOST_SYSTEMD_POST_INSTALL_HOOKS += HOST_SYSTEMD_FIX_RPATH +HOST_SYSTEMD_NINJA_ENV = DESTDIR=$(HOST_DIR) + +$(eval $(host-meson-package))
Add the infrastructure to build the host version of systemd * disable all optional features, they can be re-added when needed * systemd has creative way of dealing with cross compile we build a "normal" host systemd, but install it in $HOST_DIR we use systemctl --root to correctly act on TARGET_DIR * we need to adjust RPATH using patchelf because meson can't do it correctly by itsel Signed-off-by: Jérémy Rosen <jeremy.rosen@smile.fr> --- package/Config.in.host | 1 + package/systemd/Config.in.host | 3 ++ package/systemd/systemd.mk | 93 ++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 package/systemd/Config.in.host