Skip to contentSkip to conversation

image.bbclass: fix systemd_preset_all

PATCH In review Chen Qi 2 participants 7 messages Jul 1, 2019 – Jul 4, 2019

lore
Share & tools
lore

Chen Qi

author
#0 lore raw

v2 cover image.bbclass: fix systemd_preset_all

Changes in V2:
* Check /lib/systemd/systemd under ${IMAGE_ROOTFS} instead of checking the existence of systemctl tool in native staging directory.

The following changes since commit bc5f6725af04417dcf5c65981d8b85abee9c61d8:

Revert "pigz: Add debug for autobuilder errors" (2019-06-30 23:33:45 +0100)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib ChenQi/image-systemd
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/image-systemd

Chen Qi (1):
image.bbclass: fix systemd_preset_all

 meta/classes/image.bbclass | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
Signature · 1 line
1.9.1
author
#1 lore raw

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.

---
 meta/classes/image.bbclass | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
meta/classes/image.bbclass +3 -2
index d2b2fb9..7daa97e 100644
@@ -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
+	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 = ""
Signature · 1 line
1.9.1
#2 lore raw
Quoted 33 lines

-----Original Message-----
From: [email protected] <openembedded- [email protected]> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: [email protected]
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.

---
 meta/classes/image.bbclass | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
meta/classes/image.bbclass +0 -0
index d2b2fb9..7daa97e 100644

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 5 lines
meta/classes/image.bbclass +1 -1
@@ -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).

Quoted 10 lines
meta/classes/image.bbclass +2 -2
+	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

author
#3 lore raw
Quoted 35 lines · Peter Kjellerstedt
Quoted 35 lines

-----Original Message-----
From: [email protected] <openembedded- [email protected]> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: [email protected]
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.

---
  meta/classes/image.bbclass | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)
meta/classes/image.bbclass +0 -0
index d2b2fb9..7daa97e 100644
@@ -666,10 +666,11 @@ reproducible_final_image_task () {
  }
 
Quoted 6 lines

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 3 lines
meta/classes/image.bbclass +1 -1
  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.

Regards,
Chen Qi

Quoted 13 lines
Quoted 10 lines
meta/classes/image.bbclass +2 -2
+	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

#4 lore raw
Quoted 56 lines

-----Original Message-----
From: [email protected] <openembedded- [email protected]> On Behalf Of ChenQi
Sent: den 2 juli 2019 03:39
To: Peter Kjellerstedt <[email protected]>; openembedded- [email protected]
Subject: Re: [OE-core] [PATCH V2 1/1] image.bbclass: fix systemd_preset_all

Quoted 2 lines · Peter Kjellerstedt
Quoted 2 lines

-----Original Message-----
From: [email protected]

<openembedded-

Quoted 4 lines
Quoted 4 lines

[email protected]> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: [email protected]
Subject: [OE-core] [PATCH V2 1/1] image.bbclass: fix

systemd_preset_all

Quoted 2 lines
Quoted 2 lines

Check the existence of systemd before using systemctl to preset

units.

Quoted 1 line
Quoted 1 line

This is because even if 'systemd' is in DISTRO_FEATURES, it's

possible

Quoted 4 lines
Quoted 4 lines

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

Quoted 3 lines
Quoted 3 lines

also ensures the existence of systemd-systemctl-native.

This would fix the following test case when using systemd as the

init

Quoted 5 lines
Quoted 5 lines

manager.

containerimage.ContainerImageTests.test_expected_files

Also remove the IMAGE_EXTRADEPENDS setting, as nothing references

this

Quoted 14 lines
Quoted 14 lines

variable.

---
  meta/classes/image.bbclass | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)
meta/classes/image.bbclass +0 -0
index d2b2fb9..7daa97e 100644
@@ -666,10 +666,11 @@ reproducible_final_image_task () {
  }
 
Quoted 2 lines

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 2 lines
meta/classes/image.bbclass +0 -1
  systemd_preset_all () {
-    systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 1 line
meta/classes/image.bbclass +1 -0
+    if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ];
Quoted 8 lines

then

Quoted 2 lines
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

That should be ${systemd_system_unitdir}, which will also use the

correct path

Quoted 1 line

(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".

Quoted 8 lines

Regards,
Chen Qi

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 670

Quoted 1 line
meta/classes/image.bbclass +1 -0
+	systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 3 lines
Quoted 3 lines
meta/classes/image.bbclass +1 -0
+    fi
  }
 
Quoted 13 lines
Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 672

Quoted 1 line
meta/classes/image.bbclass +0 -1
-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 ''}"

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 674

Quoted 1 line
meta/classes/image.bbclass +0 -0
  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; "

Quoted 5 lines
Quoted 4 lines
meta/classes/image.bbclass +0 -1
  CVE_PRODUCT = ""
--

1.9.1

//Peter

//Peter

author
#5 lore raw
Quoted 56 lines · Peter Kjellerstedt
Quoted 56 lines

-----Original Message-----
From: [email protected] <openembedded- [email protected]> On Behalf Of ChenQi
Sent: den 2 juli 2019 03:39
To: Peter Kjellerstedt <[email protected]>; openembedded- [email protected]
Subject: Re: [OE-core] [PATCH V2 1/1] image.bbclass: fix systemd_preset_all

Quoted 2 lines · Peter Kjellerstedt
Quoted 2 lines

-----Original Message-----
From: [email protected]

<openembedded-

Quoted 4 lines
Quoted 4 lines

[email protected]> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: [email protected]
Subject: [OE-core] [PATCH V2 1/1] image.bbclass: fix

systemd_preset_all

Quoted 1 line
Quoted 1 line

Check the existence of systemd before using systemctl to preset

units.

Quoted 1 line
Quoted 1 line

This is because even if 'systemd' is in DISTRO_FEATURES, it's

possible

Quoted 4 lines
Quoted 4 lines

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

Quoted 3 lines
Quoted 3 lines

also ensures the existence of systemd-systemctl-native.

This would fix the following test case when using systemd as the

init

Quoted 5 lines
Quoted 5 lines

manager.

containerimage.ContainerImageTests.test_expected_files

Also remove the IMAGE_EXTRADEPENDS setting, as nothing references

this

Quoted 14 lines
Quoted 14 lines

variable.

---
   meta/classes/image.bbclass | 5 +++--
   1 file changed, 3 insertions(+), 2 deletions(-)
meta/classes/image.bbclass +0 -0
index d2b2fb9..7daa97e 100644
@@ -666,10 +666,11 @@ reproducible_final_image_task () {
   }
 
Quoted 2 lines

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 2 lines
meta/classes/image.bbclass +0 -1
   systemd_preset_all () {
-    systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 1 line
meta/classes/image.bbclass +1 -0
+    if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ];

then

Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

That should be ${systemd_system_unitdir}, which will also use the

correct path

Quoted 1 line

(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

Quoted 23 lines
Quoted 8 lines

Regards,
Chen Qi

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 670

Quoted 1 line
meta/classes/image.bbclass +1 -0
+	systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 3 lines
Quoted 3 lines
meta/classes/image.bbclass +1 -0
+    fi
   }
 
Quoted 12 lines
Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 672

Quoted 1 line
meta/classes/image.bbclass +0 -1
-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 ''}"

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 674

Quoted 1 line
meta/classes/image.bbclass +0 -0
   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; "

Quoted 4 lines
Quoted 3 lines
meta/classes/image.bbclass +0 -1
   CVE_PRODUCT = ""
--

1.9.1

//Peter

//Peter

#6 lore raw
Quoted 77 lines

-----Original Message-----
From: ChenQi <[email protected]>
Sent: den 3 juli 2019 03:49
To: Peter Kjellerstedt <[email protected]>; openembedded- [email protected]
Subject: Re: [OE-core] [PATCH V2 1/1] image.bbclass: fix systemd_preset_all

Quoted 2 lines · Peter Kjellerstedt
Quoted 2 lines

-----Original Message-----
From: [email protected]

<openembedded-

Quoted 35 lines
Quoted 35 lines

[email protected]> On Behalf Of ChenQi
Sent: den 2 juli 2019 03:39
To: Peter Kjellerstedt <[email protected]>; openembedded- [email protected]
Subject: Re: [OE-core] [PATCH V2 1/1] image.bbclass: fix systemd_preset_all

Quoted 2 lines · Peter Kjellerstedt
Quoted 2 lines

-----Original Message-----
From: [email protected]

<openembedded-

Quoted 4 lines
Quoted 4 lines

[email protected]> On Behalf Of Chen Qi
Sent: den 1 juli 2019 06:16
To: [email protected]
Subject: [OE-core] [PATCH V2 1/1] image.bbclass: fix

systemd_preset_all

Quoted 1 line
Quoted 1 line

Check the existence of systemd before using systemctl to preset

units.

Quoted 1 line
Quoted 1 line

This is because even if 'systemd' is in DISTRO_FEATURES, it's

possible

Quoted 4 lines
Quoted 4 lines

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

Quoted 3 lines
Quoted 3 lines

also ensures the existence of systemd-systemctl-native.

This would fix the following test case when using systemd as the

init

Quoted 5 lines
Quoted 5 lines

manager.

containerimage.ContainerImageTests.test_expected_files

Also remove the IMAGE_EXTRADEPENDS setting, as nothing references

this

Quoted 8 lines
Quoted 8 lines
Quoted 8 lines

Review

Quoted 8 lines

variable.

---
   meta/classes/image.bbclass | 5 +++--
   1 file changed, 3 insertions(+), 2 deletions(-)
(quoted diff) +0 -0

b/meta/classes/image.bbclass

Quoted 9 lines
Quoted 9 lines
Quoted 8 lines

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 8 lines

index d2b2fb9..7daa97e 100644

meta/classes/image.bbclass +0 -1
@@ -666,10 +666,11 @@ reproducible_final_image_task () {
   }
 
   systemd_preset_all () {
-    systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 7 lines
Quoted 7 lines
Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 669

Quoted 1 line
meta/classes/image.bbclass +1 -0
+    if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ];

then

Quoted 2 lines
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

That should be ${systemd_system_unitdir}, which will also use the

correct path

Quoted 1 line

(it is /lib/systemd/system, not /lib/systemd/systemd).

I'm checking the systemd binary under ${root_prefix}/lib/systemd,

not

Quoted 3 lines
Quoted 1 line

the directory holding units.

Right, my bad. Still, then the path above should be "${IMAGE_ROOTFS}${systemd_unitdir}/systemd".

Quoted 6 lines

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.

Well, the name of the systemd_unitdir variable is misleading, as it does not in fact refer to a unit directory. The corresponding name in the systemd.pc file is systemdutildir, which I guess would have been a better name for the variable too (albeit a bit late to change it now).

Anyway, it is not very likely that the path to the systemd binary will change, so if you prefer to use the ${root_prefix}/lib/systemd path instead of ${systemd_unitdir}, then go ahead.

Quoted 15 lines

Regards,
Chen Qi

Quoted 10 lines
Quoted 10 lines

Regards,
Chen Qi

Quoted 1 line

meta/classes/image.bbclass reproducible_final_image_task () { · line 670

Quoted 1 line
meta/classes/image.bbclass +1 -0
+	systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only

preset-all

Quoted 4 lines

meta/classes/image.bbclass reproducible_final_image_task () {

Quoted 4 lines
meta/classes/image.bbclass +1 -1
+    fi
   }
 
-IMAGE_EXTRADEPENDS += "${@ 'systemd-systemctl-native' if

bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and

not

Quoted 1 line
Quoted 1 line

bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False,

Quoted 14 lines

d)

Quoted 2 lines
Quoted 2 lines

else ''}"

Quoted 1 line
Quoted 1 line
meta/classes/image.bbclass +0 -0
   IMAGE_PREPROCESS_COMMAND_append = " ${@ 'systemd_preset_all;'

if

Quoted 1 line
Quoted 1 line

bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and

not

Quoted 1 line
Quoted 1 line

bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True, False,

d)

Quoted 6 lines
Quoted 5 lines

else ''} reproducible_final_image_task; "

Quoted 4 lines
Quoted 3 lines
meta/classes/image.bbclass +0 -1
   CVE_PRODUCT = ""
--

1.9.1

//Peter

//Peter

//Peter