Commit Graph

27 Commits

Author SHA1 Message Date
Yuta Hayama
d0a5ec84b4 systemd-systemctl: fix errors in instance name expansion
If the instance name indicated by %i begins with a number, the meaning of the
replacement string "\\1{}".format(instance) is ambiguous.

To indicate group number 1 regardless of the instance name, use "\g<1>".

(From OE-Core rev: d18b939fb08b37380ce95934da38e6522392621c)

Signed-off-by: Yuta Hayama <hayama@lineo.co.jp>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-07-10 11:36:34 +01:00
Ian Ray
f457f358df systemd-systemctl: support instance expansion in WantedBy
Refactor _process_deps to expand systemd instance specifier "%i" to the
template instance.

This change expands on prior commit e510222b57 ("systemd-systemctl: fix
instance template WantedBy symlink construction") by substituting every
"%i" pattern-match with the instance name.

The regexp handles the following cases:

* svc-wants@%i.service

* sys-subsystem-net-devices-%i.device

(From OE-Core rev: 9356276137267a29ae2289d796a2940918375308)

Signed-off-by: Ian Ray <ian.ray@ge.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-06-15 09:53:38 +01:00
Martin Siegumfeldt
e510222b57 systemd-systemctl: fix instance template WantedBy symlink construction
Fix issue of the below instance template systemd service dependency

[Install]
WantedBy=svc-wants@%i.service

creating the symlink (instance "a" example)

/etc/systemd/system/svc-wants@%i.service.wants/svc-wanted-by@a.service

which should be

/etc/systemd/system/svc-wants@a.service.wants/svc-wanted-by@a.service

as implemented by this change.

The functionality appears regressed just after "thud" baseline when the
logic was refactored from shell script into python (commit
925e30cb10)

(From OE-Core rev: 308397f0bb3d6f3d4e9ec2c6a10823184049c9b5)

Signed-off-by: Martin Siegumfeldt <mns@gomspace.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-05-05 11:07:26 +01:00
Chen Qi
6e071e0292 Revert "systemd-systemctl: Create machine-id with "uninitialized" text in it"
This reverts commit 33d9b3a8ed.

The reverted patch was forcing systemd to do preset-all at boot time (first boot)
in a function that simuilates 'preset-all' at rootfs time. This is not right.

To force a first boot, just do not run this function, as said in the comment:
"""
    # If we populate the systemd links we also create /etc/machine-id, which
    # allows systemd to boot with the filesystem read-only before generating
    # a real value and then committing it back.
    #
    # For the stateless configuration, where /etc is generated at runtime
    # (for example on a tmpfs), this script shouldn't run at all and we
    # allow systemd to completely populate /etc.
"""

For example, removing 'systemd_preset_all;' from IMAGE_PREPROCESS_COMMAND in some
distro conf file will achieve the same effect of the original patch.

(From OE-Core rev: a2ac09c32acfc2e076a7778447919d97553d38a2)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-03-16 17:49:38 +00:00
Marek Vasut
33d9b3a8ed systemd-systemctl: Create machine-id with "uninitialized" text in it
Instead of creating empty /etc/machine-id file using touch, write
text "uninitialized" into it. Systemd requires "uninitialized" in
the /etc/machine-id file to trigger systemd-firstboot .

(From OE-Core rev: 263c852269027b1bd311e116021ac49d9001e1b0)

Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-02-28 07:53:54 +00:00
Bob Henz
c653bfc68b systemd-systemctl: Fix WantedBy processing
An empty string assignment to WantedBy should clear all prior WantedBy
settings. This matches behavior of the current systemd implementation.

(From OE-Core rev: 8ede0083c28fadf1e83c9256618190b931edd306)

Signed-off-by: Bob Henz <robert_henz@jabil.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-09-28 08:01:10 +01:00
Nick Potenski
01aaeb444f systemd: systemd-systemctl: Support instance conf files during enable
Add ability to parse instance-specific conf files when
enabling an instance of a templated unit during postinstall.

(From OE-Core rev: baa0ecf3271008cf60cd830c54a71f191aebb81c)

Signed-off-by: Nick Potenski <nick.potenski@garmin.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-06-17 17:57:44 +01:00
Kristian Klausen
d5f2b5b7ec systemd: Add homed PACKAGECONFIG
If systemd is built with fdisk support[1] and the openssl and cryptsetup
PACKAGECONFIG are enabled, systemd-homed[1] is automatically enabled.
The org.freedesktop.home1.conf file was forgotten, so this commit adds
the file and make enabling homed a explicit choice.

systemd-homed.service and systemd-homed-activate.service have a Also= on
each other, so "systemctl" has been fixed to handle the circular
dependency.

userdb isn't strictly speaking needed for homed but "systemctl" can't
handle the missing unit file and upstream recommend enabling both[3].

[1] Automatically enabled if the fdisk dependency is installed which it
    is as util-linux is pulled in by systemd
[2] https://www.freedesktop.org/software/systemd/man/systemd-homed.service.html
[3] 871dc8d644

(From OE-Core rev: fff339b5bd7789db5d0c024fc84490ac17fa4fe9)

Signed-off-by: Kristian Klausen <kristian@klausen.dk>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-09-06 09:49:50 +01:00
Armin Kuster
20026c7246 systemctl: Stop tracebacks use formated error messages
When systemctl fail it would throw an exception and
dump a traceback. Lets use a more controlled workflow.

[Yocto #14395]

(From OE-Core rev: df510ae9a1494bc1be8d6673fbaa43d3f7cc8f40)

Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-06-01 14:03:49 +01:00
Kai Kang
2ab32edca8 systemd-systemctl-native: capable to call without argument
In systemd.bbclass, it will replace criterion command 'type systemctl'
with 'systemctl' without any argument to judge whether command systemctl
is available. The change is to fix install/remove package error in
container when command systemctl exists but not callable.

Make native systemctl wrapper prints help mesages if called without any
argument to follow the update.

(From OE-Core rev: 811ebb4adc5cfcc24ac4460fe89fe68d8d03d837)

Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2020-12-06 23:17:28 +00:00
Slavic Brutalik
151da8bf98 systemd-systemctl: Fix handling of aliased targets
The script scans for services, parses them and makes sure those targets are still
there. The exists file check fails if the target is an alias, such as default.target
so add an additional test.

[YOCTO #13685]

(From OE-Core rev: 10bdbf033e51c97f6408c9114d480372135a2c2e)

Signed-off-by: Werner Grift <sky.captin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-12-16 23:25:49 +00:00
Ross Burton
9ad35b8707 systemd-systemctl-native: don't care about line endings
It's possible for a service file to accidentally contain mixed line endings, but
the string cleanup code was assuming Unix endings.

[ YOCTO #13535 ]

(From OE-Core rev: 7aaa9200b5ba2cba92ee1ed7003d54848498b37d)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-09-19 10:54:32 +01:00
Frederic Ouellet
21e2686775 systemd: Add partial support of drop-in configuration files to systemd-systemctl-native
Support for serive-name.service.d/ folders containing .conf files
It don't support all the partial folder names

See https://www.freedesktop.org/software/systemd/man/systemd.unit.html

(From OE-Core rev: 32ed8e53109f4384970fb540e44cc2f7fcafb2a5)

Signed-off-by: Frederic Ouellet <fredericouellet@eaton.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-07-26 08:41:38 +01:00
Alex Kiernan
534731e7a7 systemd-systemctl: Restore support for enable command
Refactor so that SystemdUnit is its own class, then add support for the
enable command. This restores the ability of systemd.bbclass to create
instances using syntax such as:

  SYSTEMD_SERVICE_${PN} = "serial-getty@ttyAMA0.service"

(From OE-Core rev: 9ef6f326ad323b2687440b81b0a983cb3d86a3ab)

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-05-09 16:31:55 +01:00
Alex Kiernan
7e5124a44c systemd: Default to non-stateless images
When creating images, for anything other than the explicitly stateless
case, touch /etc/machine-id so that the images can be booted without an
initramfs and with `ro` set on the kernel command line, otherwise system
refuses to start:

  [    7.222134] systemd[1]: No hostname configured.
  [    7.227266] systemd[1]: Set hostname to <localhost>.
  [    7.232622] systemd[1]: System cannot boot: Missing /etc/machine-id and /etc is mounted read-only.
  [    7.241750] systemd[1]: Booting up is supported only when:
  [    7.247362] systemd[1]: 1) /etc/machine-id exists and is populated.
  [    7.253752] systemd[1]: 2) /etc/machine-id exists and is empty.
  [    7.259757] systemd[1]: 3) /etc/machine-id is missing and /etc is writable.

If IMAGE_FEATURES includes `stateless-rootfs` then systemctl-native is
not run on the image leaving the image for population at runtime by
systemd.

(From OE-Core rev: c5fb399f5894c16cf8eeadd507dc38c29b0fd657)

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-05-09 16:31:55 +01:00
Alex Kiernan
925e30cb10 systemctl-native: Rewrite in Python supporting preset-all and mask
Rewrite systemctl-native in Python so that extending/testing it is
easier.

Now that the systemd class sets up service presets instead of actively
enabling services, the 'enable' and 'disable' subcommands for systemctl
are not actually used anywhere.  As such, we can remove these to make
sure that nobody inadvertently introduces new uses of them.

This implementation covers `preset-all` and `mask` which are the only
options used in the current code, but should be readily extensible to
other commands.

We use `preset-all` at image construction time to populate the symlinks
used by systemd.

(From OE-Core rev: 86f5a2383692ac1ab01dce534c1a5c5f32ec4b35)

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-05-03 06:11:57 +01:00
Brad Bishop
17726d0834 systemd-systemctl-native: handle Install wildcards
Handle the %i wildcard appearing in a dependency in the Install section
of a template unit, e.g.

  $ cat foo@.service

  [Install]
  WantedBy=bar@%i.target

Using the real systemctl something like:

  $ systemctl enable foo@baz.service

will create a symlink in /etc/systemd/system/bar@baz.target.wants.
Detect wildcards in templates and make the appropriate substitution.

(From OE-Core rev: 22ed19292d160461042d4a2294fe2ec0b953873e)

Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2018-11-14 11:14:39 +00:00
Martin Kelly
35730f8735 systemctl-native: add target.wants to target regex
The regex for acceptable systemd WantedBy/RequiredBy targets does not include
target.wants, so a line like this:

WantedBy=multi-user.target.wants

gets silently ignored, even though it works fine on a real system.

(From OE-Core rev: ccffc66c64fc0dde433b0375c69760983c657427)

Signed-off-by: Martin Kelly <mkelly@xevo.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-11-08 22:24:04 +00:00
Ross Burton
e38ec0caa7 systemd-systemctl-native: fix unit detection
The regexs were too strict and didn't allow for trailing whitespace.

[ YOCTO #9337 ]

(From OE-Core rev: 0395162aa45a416db6a0a38e7ee6c0f808272393)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-04-09 23:00:44 +01:00
Tomas Novotny
b33efa964a systemctl: handle RequiredBy dependencies
Install section of a systemd service may contain RequiredBy dependency,
which is not handled currently. This means that symlinks to enable the
service are not created and the service may not be started.

Also fix debug output (all dependencies were printed instead of the one
which was enabled or disabled).

(From OE-Core rev: 6f4d9d9675ce39f5154de30b2921ada019a93d0f)

Signed-off-by: Tomas Novotny <tomas@novotny.cz>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-02-28 11:33:07 +00:00
Enrico Jorns
593dcd4a22 systemd: fix systemctl enable script for template units
The systemctl script supports enabling template units by evaluating
"DefaultInstance" parameter. Unfortunately, due to the sed replacement
mechanism, all escaping used in the DefaultInstance string, e.g. for
giving path names with dashes, is expanded too early.

Thus for

  DefaultInstance=-path\x2dwith\x2ddashes

a path unit `foobar@.path` will be installed with a symlink named

  foobar@-path-with-dashed.path

that is interpreted as the path `/path/with/dashes` instead of the
intended path nam `/path-with-dashes`.

To fix this behavior additional escaping of the backslashes in the
`DefaultInstance` string is required so that sed does not expand the
escaped characters.

(From OE-Core rev: 8b9b9fd700b19731b14a7dcc51d0fa013a5e106a)

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-01-30 11:37:02 +00:00
Martin Jansa
d0d404f7cd systemctl: Don't try to remove directory which doesn't exist
Noticed in this log.do_rootfs error:
  Started /OE/build/shr-core/tmp-glibc/sysroots/x86_64-linux/usr/bin/systemctl --root=/OE/build/shr-core/tmp-glibc/work/nokia900-oe-linux-gnueabi/shr-image/2.0-r20/rootfs disable bluetooth.service
  Try to find location of bluetooth.service...
  Found bluetooth.service in /lib/systemd/system/bluetooth.service
  WantedBy=bluetooth.target found in bluetooth.service
  rmdir: failed to remove '/OE/build/shr-core/tmp-glibc/work/nokia900-oe-linux-gnueabi/shr-image/2.0-r20/rootfs/etc/systemd/system/bluetooth.target.wants': No such file or directory
  Disabled bluetooth.service for bluetooth.target.
  Disabled bluetooth.service for dbus-org.bluez.service.

(From OE-Core rev: 0332e19098d7d3d623a04098b43e3b2482af1a17)

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2015-03-20 11:03:44 +00:00
Tomas Novotny
d5e0cc7b08 systemd-systemctl: add handling of template unit files
Template unit files (those with '@' in their names) are not handled with
native version of systemctl. This is usually not a problem, as the
native systemctl fails and systemctl command is executed during first
boot. But some early boot template units may fail during first boot
because opkg configure for first boot is pulled too late for them
(although I encouter it only with some of my services, not with oe-core
ones).

Handling of template unit files is same as in original systemctl. Also
DefaultInstance directive in template is respected. As with original
systemctl, enabling of template without instance and DefaultInstance
does nothing.

(From OE-Core rev: 90904ef3bab182a46174f7bb60e83f0f22a3f209)

Signed-off-by: Tomas Novotny <tomas@novotny.cz>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-12-19 18:08:01 +00:00
Khem Raj
b53a0117c8 systemd-systemctl: Add preset capability
systemd has presets as described here

http://lists.freedesktop.org/archives/systemd-devel/2011-July/002830.html

This patch will let distros define presets file
which will override the enable/disable specified
by recipes.

systemctl preset without any argument will run presents
on all services

systemctl preset service1 service2 will run presets on
specified pervice.

something like enable * or disable *
would mean that all services will be either enabled or
disabled by default.

If no user-presets are specified then 'enable' is default

systemd allows basic globs but we do not implement them
except '*'

(From OE-Core rev: 1254416901a0c70814296a86784f4934f27c7d4a)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-14 09:11:11 +00:00
Randy Witt
44c5b770ab systemctl: Support all unit types in the directives.
The Alias and WantedBy directives can accept all valid unit types when
using the systemctl from systemd. And since the systemctl script should
match the behavior of systemd as much as possible, add the current set
of unit types listed at
http://www.freedesktop.org/software/systemd/man/systemd.unit.html
to the Alias and WantedBy directives.

The deficiency was exposed when trying to use:
    Alias=default.target
in a foo.target. No symlink was created by running
"systemctl enable foo.target" during the package's postinst.

(From OE-Core rev: 374b9c37b3310cf2a3373633197ca7ba21f6d1bd)

Signed-off-by: Randy Witt <rewitt@declaratino.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-06-25 17:44:56 +01:00
Enrico Scholz
999302e9d8 systemd-systemctl: parse unit files more correctly
Old script failed to parse unit files containing comments like

| #Alias=some-alias

or whitespaces like

| WantedBy = foo

correctly.  Patch changes script to interpret keywords only when they
are at the beginning of a line and ignores whitespaces before the '='.

(From OE-Core rev: 443e75ee2c0e9a62df997aef24855bce54d39177)

Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-04-29 14:45:06 +01:00
Radu Moisan
b8744d5376 systemd: add systemd recipes
Add systemd recipes and associated support recipes.

Mostly based on meta-oe/meta-systemd, so almost all credit should go to:

Andreas Müller <schnitzeltony@googlemail.com>
Denis 'GNUtoo' Carikli <GNUtoo@no-log.org>
Holger Hans Peter Freyther <holger@moiji-mobile.com>
Khem Raj <raj.khem@gmail.com>
Koen Kooi <koen@dominion.thruhere.net>
Martin Jansa <Martin.Jansa@gmail.com>

(From OE-Core rev: 6a8a48b4d0d0b9b8d8af46cae11245bcb870bbc3)

Signed-off-by: Radu Moisan <radu.moisan@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-01-20 12:58:55 +00:00