[v7] image-postproc: gate systemd preset-all on masked unit state

Message ID 20260429130240.23780-1-badrikesh.prusty@siemens.com
State Under Review
Headers show
Series [v7] image-postproc: gate systemd preset-all on masked unit state | expand

Commit Message

Badrikesh Prusty April 29, 2026, 1:02 p.m. UTC
Skip systemd preset-all during image postprocessing if masked unit files
are detected, to avoid non-fatal failures when presetting units that are
already masked.

Move execution fully inside a single chroot invocation for consistency
and reduced overhead.

Fixes: 72b88a12 ("classes/image-postproc: Enable systemd units based on systemd presets")

Signed-off-by: Badrikesh Prusty <badrikesh.prusty@siemens.com>
---
 meta/classes-recipe/rootfs.bbclass | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

--
2.47.3

Patch

diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index 8b502a50..d250690f 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -569,13 +569,14 @@  EOSUDO

 ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'populate-systemd-preset', 'image_postprocess_populate_systemd_preset', '', d)}"
 image_postprocess_populate_systemd_preset() {
-    SYSTEMD_INSTALLED=$(sudo chroot '${ROOTFSDIR}' dpkg-query \
-        --showformat='${db:Status-Status}' \
-        --show systemd || echo "" )
+    sudo chroot "${ROOTFSDIR}" /bin/sh <<'EOSH'
+        SYSTEMD_INSTALLED=$(dpkg-query --showformat='${db:Status-Status}' --show systemd 2>/dev/null)

-    if (test "$SYSTEMD_INSTALLED" = "installed"); then
-        sudo chroot '${ROOTFSDIR}' systemctl preset-all --preset-mode="enable-only"
-    fi
+        if [ "${SYSTEMD_INSTALLED}" = "installed" ]; then
+            systemctl list-unit-files --state=masked --no-legend | grep -q '^' \
+                || systemctl preset-all --preset-mode="enable-only"
+        fi
+EOSH
 }

 do_rootfs_postprocess[vardeps] = "${ROOTFS_POSTPROCESS_COMMAND}"