Hi,

Yes, on Debian Bookworm we are also seeing a similar issue:
if these services are masked during the rootfs_install task, populate-systemd-preset fails.

On Debian Trixie, it continues without error. I created a v3 patch to ignore preset failures
only, rather than making populate-systemd-preset optional, since this appears to be the
correct default behavior for now. Link to the updated patch:
[PATCH v3 0/1] image-postproc: ignore systemd preset failures

Many thanks,
Badrikesh
On Wednesday, February 18, 2026 at 11:35:17 PM UTC+5:30 Gokhan Cetin wrote:
Hi,

I've not investigated the root cause yet but I might have a concrete example for the mentioned issue:
I have a recipe which has following masks at postinst to disable sleep states on the target:

systemctl mask \
        ctrl-alt-del.target \
        hibernate.target \
        hybrid-sleep.target \
        sleep.target \
        suspend-then-hibernate.target \
        suspend.target

At Debian Bookworm, build ends up with "Failed to preset unit, unit /etc/systemd/system/sleep.target is masked.", until  "populate-systemd-preset" is opt-out.
But I don't have any issue at Debian Trixie. Not sure if this might be a clue.

Best,
Gokhan

On Wednesday, January 14, 2026 at 12:46:44 PM UTC+3 Heinisch, Alexander wrote:
On Tue, 2026-01-13 at 09:48 -0500, Badrikesh Prusty wrote:
> Disable running populate-systemd-preset at build time by default.
> Although systemd runs enable-only presets at first boot, running this
> step during image creation changes the enabled state of units before
> systemd’s first-boot logic runs, 
Why is this a problem? The reasons why to have services prepopulated
are listed here [1].

> ignores disable rules, and can cause
...as is the case with current systemd

> some services to fail during runtime.

What's the difference compared to enabling on first-boot?
>
> Downstream users can opt in when preset population is required.

Imo, having the pre population enabled seems to me a propper default.
If downstream has issues with the prepopulation, for some reason (maybe
you can clarify based on concrete cases) then you always can opt-out
via: ROOTFS_FEATURES:remove = "populate-systemd-preset"

Initially your V1 was about not only enabling but also disabling
services in the postprocessing. What caused the change to neither
populate enabled nor disabled units? As above, maybe a concrete example
helps to understand your requirements.

BR Alexander

1:
https://github.com/ilbers/isar/blob/master/RECIPE-API-CHANGELOG.md#populate-systemd-units-based-on-presets-during-image-postprocessing

>
> Opt-in:
>   ROOTFS_FEATURES:append = " populate-systemd-preset"
>
> Signed-off-by: Badrikesh Prusty <badrikes...@siemens.com>
> ---
>  RECIPE-API-CHANGELOG.md           | 14 ++++++++++++++
>  meta/classes-recipe/image.bbclass |  1 -
>  2 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> index 0bad8a44..46c8c905 100644
> --- a/RECIPE-API-CHANGELOG.md
> +++ b/RECIPE-API-CHANGELOG.md
> @@ -962,3 +962,17 @@ INSTALLER_UNATTENDED_ABORT_ENABLE = "1"
>  # Optional: set countdown timeout in seconds (default 5)
>  INSTALLER_UNATTENDED_ABORT_TIMEOUT = "5"
>  ```
> +
> +### Make populate-systemd-preset opt-in
> +
> +Running populate-systemd-preset at build time is disabled by
> default.
> +Although systemd runs enable-only presets by default at first boot,
> +running this step at build time changes the enabled state of units
> +before systemd’s first-boot logic runs, ignores disable rules, and
> +can cause some services to fail during runtime.
> +
> +Downstream users can explicitly enable this feature when preset
> +population is required during image creation.
> +
> +Opt-in:
> +  ROOTFS_FEATURES:append = " populate-systemd-preset"
> diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-
> recipe/image.bbclass
> index e605bc80..47ed068d 100644
> --- a/meta/classes-recipe/image.bbclass
> +++ b/meta/classes-recipe/image.bbclass
> @@ -101,7 +101,6 @@ ROOTFS_FEATURES += "\
>      export-dpkg-status \
>      clean-log-files \
>      clean-debconf-cache \
> -    populate-systemd-preset \
>      generate-sbom \
>      "
>  ROOTFS_PACKAGES += "${IMAGE_PREINSTALL}
> ${@isar_multiarch_packages('IMAGE_INSTALL', d)}"

--
Alexander Heinisch
Siemens AG
www.siemens.com

--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/c44316df-b7c1-4fe7-ab8f-c46f6d140777n%40googlegroups.com.