]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
update_udev_hwdb: fix multilib issue with systemd
authorKai Kang <kai.kang@windriver.com>
Fri, 15 Apr 2022 14:38:03 +0000 (22:38 +0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 19 Apr 2022 13:14:01 +0000 (14:14 +0100)
It duplicates udevadm in systemd recipe to make it could run
update_udev_hwdb with multilib enabled. Since systemd last update,
it deploys a shared library libsystemd-shared-250.so in /lib/systemd/.
The library will be overwritten when multilib enabled. Then if both
udev-hwdb and lib32-udev-hwdb are installed, it fails to run the
multilib version postinstall intercept update_udev_hwdb:

| /path/to/build/tmp-glibc/work/intel_x86_64-wrs-linux/wrlinux-image-small/1.0-r1/rootfs/usr/libexec/lib32-udevadm:
    error while loading shared libraries: libsystemd-shared-250.so: wrong ELF class: ELFCLASS64

`udevadm hwdb --update` just concatenates .hwdb files in dirs
/etc/udev/hwdb.d and /lib/udev/hwdb.d. The output file hwdb.bin is
identical with the one created by lib32-udevadm. So do NOT duplicate
lib32-udevadm in systemd and eudev. And update intercept script
update_udev_hwdb that re-run udevadm with same arch qemuwrapper if run
${binprefix}qemuwrapper failed.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-core/systemd/systemd_250.4.bb
meta/recipes-core/udev/eudev_3.2.10.bb
scripts/postinst-intercepts/update_udev_hwdb

index 2b346113b591523fd01209c1ff6201668045a2d3..15e2185dff2e8ff3a6f9867da21d791e3a1be1f6 100644 (file)
@@ -337,10 +337,6 @@ do_install() {
        # create link for existing udev rules
        ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
 
-       # duplicate udevadm for postinst script
-       install -d ${D}${libexecdir}
-       ln ${D}${base_bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm
-
        # install default policy for presets
        # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
        install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset
@@ -718,7 +714,6 @@ FILES:udev += "${base_sbindir}/udevd \
                ${base_bindir}/systemd-hwdb \
                ${base_bindir}/udevadm \
                ${base_sbindir}/udevadm \
-               ${libexecdir}/${MLPREFIX}udevadm \
                ${datadir}/bash-completion/completions/udevadm \
                ${systemd_system_unitdir}/systemd-hwdb-update.service \
               "
index dec16be046cda69df7e37672f626b43e5a13890c..ccc66ae13131ad558d14f1804bb450db879c3b45 100644 (file)
@@ -51,10 +51,6 @@ do_install:append() {
 
        # hid2hci has moved to bluez4. removed in udev as of version 169
        rm -f ${D}${base_libdir}/udev/hid2hci
-
-       # duplicate udevadm for postinst script
-       install -d ${D}${libexecdir}
-       ln ${D}${bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm
 }
 
 do_install:prepend:class-target () {
index 8076b8ae6f13f49a6e703868f8014ae96064e8a3..8b3f5de791fe58494e3110f09846807797473b36 100644 (file)
@@ -9,14 +9,17 @@ case "${PREFERRED_PROVIDER_udev}" in
        systemd)
                UDEV_EXTRA_ARGS="--usr"
                UDEVLIBDIR="${rootlibexecdir}"
+               UDEVADM="${base_bindir}/udevadm"
                ;;
 
        *)
                UDEV_EXTRA_ARGS=""
                UDEVLIBDIR="${sysconfdir}"
+               UDEVADM="${bindir}/udevadm"
                ;;
 esac
 
 rm -f $D${UDEVLIBDIR}/udev/hwdb.bin
-PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${libexecdir}/${binprefix}udevadm hwdb --update --root $D ${UDEV_EXTRA_ARGS}
+PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${UDEVADM} hwdb --update --root $D ${UDEV_EXTRA_ARGS} ||
+       PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${UDEVADM} hwdb --update --root $D ${UDEV_EXTRA_ARGS}
 chown root:root $D${UDEVLIBDIR}/udev/hwdb.bin