On 07/03/2019 05:04 AM, Peter Kjellerstedt wrote:
-----Original Message-----
From: openembedded-core-boun...@lists.openembedded.org <openembedded-
core-boun...@lists.openembedded.org> On Behalf Of ChenQi
Sent: den 2 juli 2019 03:39
To: Peter Kjellerstedt <peter.kjellerst...@axis.com>; openembedded-
c...@lists.openembedded.org
Subject: Re: [OE-core] [PATCH V2 1/1] image.bbclass: fix
systemd_preset_all

On 07/02/2019 07:34 AM, Peter Kjellerstedt wrote:
-----Original Message-----
From: openembedded-core-boun...@lists.openembedded.org
<openembedded-
core-boun...@lists.openembedded.org> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: openembedded-core@lists.openembedded.org
Subject: [OE-core] [PATCH V2 1/1] image.bbclass: fix
systemd_preset_all
Check the existence of systemd before using systemctl to preset
units.
This is because even if 'systemd' is in DISTRO_FEATURES, it's
possible
that systemd is not even installed. e.g. container-test-image in
meta-selftest layer.

As systemd DEPENDS on systemd-systemctl-native, the existence of
systemd
also ensures the existence of systemd-systemctl-native.

This would fix the following test case when using systemd as the
init
manager.

    containerimage.ContainerImageTests.test_expected_files

Also remove the IMAGE_EXTRADEPENDS setting, as nothing references
this
variable.

Signed-off-by: Chen Qi <qi.c...@windriver.com>
---
   meta/classes/image.bbclass | 5 +++--
   1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index d2b2fb9..7daa97e 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -666,10 +666,11 @@ reproducible_final_image_task () {
   }

   systemd_preset_all () {
-    systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only
preset-all
+    if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ];
then
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
That should be ${systemd_system_unitdir}, which will also use the
correct path
(it is /lib/systemd/system, not /lib/systemd/systemd).
I'm checking the systemd binary under ${root_prefix}/lib/systemd, not
the directory holding units.
Right, my bad. Still, then the path above should be
"${IMAGE_ROOTFS}${systemd_unitdir}/systemd".

In current OE, ${systemd_unitdir} = ${root_prefix}/lib/systemd.
And in systemd recipe, we have:
[ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init
It does not write as `ln -s ${systemd_unitdir}/systemd/systemd'.
I don't want to use a directory whose name indicates 'unit' when checking a binary.

Regards,
Chen Qi

Regards,
Chen Qi

+       systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only
preset-all
+    fi
   }

-IMAGE_EXTRADEPENDS += "${@ 'systemd-systemctl-native' if
bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and not
bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False, d)
else ''}"
   IMAGE_PREPROCESS_COMMAND_append = " ${@ 'systemd_preset_all;' if
bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and not
bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False, d)
else ''} reproducible_final_image_task; "
   CVE_PRODUCT = ""
--
1.9.1
//Peter
//Peter



--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to