[OE-core] [PATCH] systemd: fix systemd-udev-hwdb-update service
rongqing.li at windriver.com
rongqing.li at windriver.com
Tue Jun 30 05:16:56 UTC 2015
From: Chen Qi <Qi.Chen at windriver.com>
The new version of systemd has implemented the following feature.
Opointer.de/blog/projects/stateless.html
As a result, the systemd-udev-hwdb-update.service would always run
at first boot. This will cause failure if the target device doesn't
have enough storage space. Besides, as we run `udevadm hwdb --update' as
a postinst of udev-hwdb at rootfs time, there's no need to run this
again at system start-up.
The purpose of this patch is as follows.
If `udev hwdb --update' fails at rootfs time, systemd-udev-hwdb-update.service
is executed at first boot; otherwise, the service is not executed.
This patch achieves the above goal by setting CondistonNeedsUpdate to
"/etc/udev" in the service file, and creating /etc/udev/.updated file if the
postinst succeeds.
Signed-off-by: Chen Qi <Qi.Chen at windriver.com>
Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
---
meta/recipes-core/systemd/systemd_219.bb | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/meta/recipes-core/systemd/systemd_219.bb b/meta/recipes-core/systemd/systemd_219.bb
index 6ed4fe0..dc5c7b3 100644
--- a/meta/recipes-core/systemd/systemd_219.bb
+++ b/meta/recipes-core/systemd/systemd_219.bb
@@ -180,6 +180,10 @@ do_install() {
if [ -s ${D}${libdir}/tmpfiles.d/systemd.conf ]; then
${@bb.utils.contains('PACKAGECONFIG', 'networkd', ':', 'sed -i -e "\$ad /run/systemd/netif/links 0755 root root -" ${D}${libdir}/tmpfiles.d/systemd.conf', d)}
fi
+
+ # Make systemd-udev-hwdb-update to check /etc/udev
+ cp ${D}${systemd_unitdir}/system/systemd-udev-hwdb-update.service ${D}${sysconfdir}/systemd/system
+ sed -i -e 's#ConditionNeedsUpdate=/etc#ConditionNeedsUpdate=/etc/udev#g' ${D}${sysconfdir}/systemd/system/systemd-udev-hwdb-update.service
}
do_install_ptest () {
@@ -381,10 +385,18 @@ ALTERNATIVE_PRIORITY[runlevel] ?= "300"
pkg_postinst_udev-hwdb () {
if test -n "$D"; then
- ${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
- --root $D
+ if ${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
+ --root $D; then
+ touch $D/etc/udev/.updated
+ else
+ exit 1
+ fi
else
- udevadm hwdb --update
+ if udevadm hwdb --update; then
+ touch $D/etc/udev/.updated
+ else
+ exit 1
+ fi
fi
}
--
1.9.1
More information about the Openembedded-core
mailing list