diff options
author | Peter Kjellerstedt <pkj@axis.com> | 2025-09-12 17:57:12 +0200 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2025-09-22 12:21:23 -0700 |
commit | 6338bb1d120246fb073acb43fad41c4ba262c8fc (patch) | |
tree | b657030320ca867cda5c8e842de212e0f52f8c40 | |
parent | 3d625d826352fd34aca4c6f44f9b7ab73dc1912a (diff) | |
download | poky-6338bb1d120246fb073acb43fad41c4ba262c8fc.tar.gz |
systemd.bbclass: Make systemd_postinst run as intended
After the switch from using a systemctl written in Python to using the
official version of systemctl from the systemd project, the
systemd_postinst function has effectively not been executed during the
rootfs creation. The reason is that systemctl provided by
systemctl-native fails if run without arguments (as systemd_postinst
does):
Failed to connect to system scope bus via local transport: Operation
not permitted (consider using --machine=<user>@.host --user to connect
to bus of other user)
This is not seen in the logs since stderr is sent to /dev/null, and the
only way to tell that there is a problem is because systemd services
that are expected to be enabled aren't running.
The reason this has gone unnoticed is because systemd_handle_machine_id
in rootfs-postcommands.bbclass will call systemctl preset-all, which in
most cases will create the missing links to enable the systemd services.
This change effectively reverts commit
a52e66762c0c51918b1ba3d4622759637b6e920a (systemd.bbclass: update
command to check systemctl available) and instead only runs systemctl
without arguments (to determine that it can communicate with systemd)
when executed on target.
(From OE-Core rev: 6cb4239b412dc782f66728e47753c1a82cccf759)
Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r-- | meta/classes-recipe/systemd.bbclass | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/meta/classes-recipe/systemd.bbclass b/meta/classes-recipe/systemd.bbclass index 12c59647be..3d8ca24a68 100644 --- a/meta/classes-recipe/systemd.bbclass +++ b/meta/classes-recipe/systemd.bbclass | |||
@@ -29,7 +29,7 @@ python __anonymous() { | |||
29 | } | 29 | } |
30 | 30 | ||
31 | systemd_postinst() { | 31 | systemd_postinst() { |
32 | if systemctl >/dev/null 2>/dev/null; then | 32 | if type systemctl >/dev/null 2>/dev/null; then |
33 | OPTS="" | 33 | OPTS="" |
34 | 34 | ||
35 | if [ -n "$D" ]; then | 35 | if [ -n "$D" ]; then |
@@ -46,7 +46,7 @@ if systemctl >/dev/null 2>/dev/null; then | |||
46 | done | 46 | done |
47 | fi | 47 | fi |
48 | 48 | ||
49 | if [ -z "$D" ]; then | 49 | if [ -z "$D" ] && systemctl >/dev/null 2>/dev/null; then |
50 | # Reload only system service manager | 50 | # Reload only system service manager |
51 | # --global for daemon-reload is not supported: https://github.com/systemd/systemd/issues/19284 | 51 | # --global for daemon-reload is not supported: https://github.com/systemd/systemd/issues/19284 |
52 | systemctl daemon-reload | 52 | systemctl daemon-reload |
@@ -66,8 +66,8 @@ fi | |||
66 | } | 66 | } |
67 | 67 | ||
68 | systemd_prerm() { | 68 | systemd_prerm() { |
69 | if systemctl >/dev/null 2>/dev/null; then | 69 | if type systemctl >/dev/null 2>/dev/null; then |
70 | if [ -z "$D" ]; then | 70 | if [ -z "$D" ] && systemctl >/dev/null 2>/dev/null; then |
71 | if [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}" ]; then | 71 | if [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}" ]; then |
72 | systemctl stop ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)} | 72 | systemctl stop ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)} |
73 | systemctl disable ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)} | 73 | systemctl disable ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)} |