From: Patrick Williams <patrick@stwcx.xyz>
To: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] systemd.bbclass: generate preset for templates
Date: Thu, 29 May 2025 13:40:16 -0400 [thread overview]
Message-ID: <aDicABG27u1_5p-q@heinlein> (raw)
In-Reply-To: <20250528213306.2581115-1-patrick@stwcx.xyz>
[-- Attachment #1: Type: text/plain, Size: 3695 bytes --]
On Wed, May 28, 2025 at 05:33:06PM -0400, Patrick Williams wrote:
> There was a regression introduced by the change to use
> systemd-systemctl-native rather than a python fake implementation,
> which caused template units to not be properly enabled when set in
> the SYSTEMD_SERVICE variable. Through investigation, it seems that
> the best way to re-enable template instances is to handle them
> explicitly in the systemd.bbclass and enable them with `preset`, like
> most units are handled[1,2].
>
> Per the systemd.preset manpage, the format for template units is
> different than for regular units[3]. We need to coalesce all the
> template instances onto a single line and emit them as an additional
> space-deliminated argument.
>
> Ran this against openbmc's phosphor-ipmi-net recipe and generated
> the following preset file:
> ```
> $ cat packages-split/phosphor-ipmi-net/usr/lib/systemd/system-preset/98-phosphor-ipmi-net.preset
> enable phosphor-ipmi-net@.service eth0
> enable phosphor-ipmi-net@.socket eth0
> ```
>
> [1]: https://lore.kernel.org/openembedded-core/Z2ch.1747051947055246176.oktf@lists.openembedded.org/
> [2]: https://lore.kernel.org/openembedded-core/aDdoTVtCmElpURYD@heinlein/
> [3]: https://www.freedesktop.org/software/systemd/man/latest/systemd.preset.html
>
> Fixes: 7a580800db39 ("systemd: Build the systemctl executable")
> Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
> ---
> meta/classes-recipe/systemd.bbclass | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes-recipe/systemd.bbclass b/meta/classes-recipe/systemd.bbclass
> index e1fe4ed072..3cc53c44d9 100644
> --- a/meta/classes-recipe/systemd.bbclass
> +++ b/meta/classes-recipe/systemd.bbclass
> @@ -224,6 +224,8 @@ python systemd_populate_packages() {
> service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else ""))
>
> def systemd_create_presets(pkg, action, user):
> + import re
> +
> # Check there is at least one service of given type (system/user), don't
> # create empty files.
> needs_preset = False
> @@ -239,10 +241,17 @@ python systemd_populate_packages() {
> presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "%s-preset/98-%s.preset" % (prefix, pkg))
> bb.utils.mkdirhier(os.path.dirname(presetf))
> with open(presetf, 'a') as fd:
> + template_services = {}
> for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split():
> if not systemd_service_exists(service, user, d):
> continue
> - fd.write("%s %s\n" % (action,service))
> + if '@' in service:
I somehow sent out an older version of this patch. Will send an update.
If a service is "@.service", this is just a template file, and shouldn't
be added to the instance registration.
> + (subservice, instance, service_type) = re.split('[@.]', service)
> + template_services.setdefault(subservice + '@.' + service_type, []).append(instance)
> + else:
> + fd.write("%s %s\n" % (action,service))
> + for template, instances in template_services.items():
> + fd.write("%s %s %s\n" % (action, template, ' '.join(instances)))
> d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "%s-preset/98-%s.preset" % (prefix, pkg)))
>
> # Run all modifications once when creating package
> --
> 2.49.0
>
--
Patrick Williams
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
prev parent reply other threads:[~2025-05-29 17:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-28 21:33 [PATCH] systemd.bbclass: generate preset for templates Patrick Williams
2025-05-29 17:40 ` Patrick Williams [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aDicABG27u1_5p-q@heinlein \
--to=patrick@stwcx.xyz \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.