teknoraver / rpms / systemd

Forked from rpms/systemd 2 months ago
Clone

Blame 0002-rpm-use-a-helper-script-to-actually-invoke-systemctl.patch

Zbigniew Jędrzejewski-Szmek ebeb76
From 6d825ab2d42d3219e49a192bf99f9c09134a0df4 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 7a99d8
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 7a99d8
Date: Thu, 22 Jul 2021 11:22:33 +0200
Zbigniew Jędrzejewski-Szmek ebeb76
Subject: [PATCH] rpm: use a helper script to actually invoke systemctl
Zbigniew Jędrzejewski-Szmek 7a99d8
 commands
Zbigniew Jędrzejewski-Szmek 7a99d8
MIME-Version: 1.0
Zbigniew Jędrzejewski-Szmek 7a99d8
Content-Type: text/plain; charset=UTF-8
Zbigniew Jędrzejewski-Szmek 7a99d8
Content-Transfer-Encoding: 8bit
Zbigniew Jędrzejewski-Szmek 7a99d8
Zbigniew Jędrzejewski-Szmek 7a99d8
Instead of embedding the commands to invoke directly in the macros,
Zbigniew Jędrzejewski-Szmek 7a99d8
let's use a helper script as indirection. This has a couple of advantages:
Zbigniew Jędrzejewski-Szmek 7a99d8
Zbigniew Jędrzejewski-Szmek 7a99d8
- the macro language is awkward, we need to suffix most commands by "|| :"
Zbigniew Jędrzejewski-Szmek 7a99d8
  and "\", which is easy to get wrong. In the new scheme, the macro becomes
Zbigniew Jędrzejewski-Szmek 7a99d8
  a single simple command.
Zbigniew Jędrzejewski-Szmek 7a99d8
- in the script we can use normal syntax highlighting, shellcheck, etc.
Zbigniew Jędrzejewski-Szmek 7a99d8
- it's also easier to test the invoked commands by invoking the helper
Zbigniew Jędrzejewski-Szmek 7a99d8
  manually.
Zbigniew Jędrzejewski-Szmek 7a99d8
- most importantly, the logic is contained in the helper, i.e. we can
Zbigniew Jędrzejewski-Szmek 7a99d8
  update systemd rpm and everything uses the new helper. Before, we would
Zbigniew Jędrzejewski-Szmek 7a99d8
  have to rebuild all packages to update the macro definition.
Zbigniew Jędrzejewski-Szmek 7a99d8
Zbigniew Jędrzejewski-Szmek 7a99d8
This raises the question whether it makes sense to use the lua scriptlets when
Zbigniew Jędrzejewski-Szmek 7a99d8
the real work is done in a bash script. I think it's OK: we still have the
Zbigniew Jędrzejewski-Szmek 7a99d8
efficient lua scripts that do the short scripts, and we use a single shared
Zbigniew Jędrzejewski-Szmek 7a99d8
implementation in bash to do the more complex stuff.
Zbigniew Jędrzejewski-Szmek 7a99d8
Zbigniew Jędrzejewski-Szmek 7a99d8
The meson version is raised to 0.47 because that's needed for install_mode.
Zbigniew Jędrzejewski-Szmek 7a99d8
We were planning to raise the required version anyway…
Zbigniew Jędrzejewski-Szmek 7a99d8
---
Zbigniew Jędrzejewski-Szmek 7a99d8
 README                           |  2 +-
Zbigniew Jędrzejewski-Szmek 7a99d8
 meson.build                      |  3 +-
Zbigniew Jędrzejewski-Szmek 7a99d8
 src/rpm/macros.systemd.in        | 30 ++++++++--------
Zbigniew Jędrzejewski-Szmek 7a99d8
 src/rpm/meson.build              | 13 ++++---
Zbigniew Jędrzejewski-Szmek 7a99d8
 src/rpm/systemd-update-helper.in | 60 ++++++++++++++++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 7a99d8
 src/rpm/triggers.systemd.in      | 43 ++++++++---------------
Zbigniew Jędrzejewski-Szmek 7a99d8
 src/rpm/triggers.systemd.sh.in   | 13 ++-----
Zbigniew Jędrzejewski-Szmek 7a99d8
 7 files changed, 105 insertions(+), 59 deletions(-)
Zbigniew Jędrzejewski-Szmek 7a99d8
 create mode 100755 src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 7a99d8
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/README b/README
Zbigniew Jędrzejewski-Szmek 7a99d8
index 0e5c326deb..a8f23a0d5b 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/README
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/README
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -193,7 +193,7 @@ REQUIREMENTS:
Zbigniew Jędrzejewski-Szmek 7a99d8
         python-jinja2
Zbigniew Jędrzejewski-Szmek 7a99d8
         python-lxml (optional, required to build the indices)
Zbigniew Jędrzejewski-Szmek 7a99d8
         python >= 3.5
Zbigniew Jędrzejewski-Szmek 7a99d8
-        meson >= 0.46 (>= 0.49 is required to build position-independent executables)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        meson >= 0.47 (>= 0.49 is required to build position-independent executables)
Zbigniew Jędrzejewski-Szmek 7a99d8
         ninja
Zbigniew Jędrzejewski-Szmek 7a99d8
         gcc, awk, sed, grep, and similar tools
Zbigniew Jędrzejewski-Szmek 7a99d8
         clang >= 10.0, llvm >= 10.0 (optional, required to build BPF programs
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/meson.build b/meson.build
Zbigniew Jędrzejewski-Szmek ebeb76
index a2ee15bf32..c6b3e72d23 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/meson.build
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/meson.build
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -10,7 +10,7 @@ project('systemd', 'c',
Zbigniew Jędrzejewski-Szmek 7a99d8
                 'localstatedir=/var',
Zbigniew Jędrzejewski-Szmek 7a99d8
                 'warning_level=2',
Zbigniew Jędrzejewski-Szmek 7a99d8
         ],
Zbigniew Jędrzejewski-Szmek 7a99d8
-        meson_version : '>= 0.46',
Zbigniew Jędrzejewski-Szmek 7a99d8
+        meson_version : '>= 0.47',
Zbigniew Jędrzejewski-Szmek 7a99d8
        )
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 libsystemd_version = '0.32.0'
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -253,6 +253,7 @@ conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH',               join_paths(rootlib
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH',           join_paths(bindir, 'systemd-stdio-bridge'))
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEMD_TEST_DATA',                          join_paths(testsdir, 'testdata'))
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
Zbigniew Jędrzejewski-Szmek 7a99d8
+conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH',                 join_paths(rootlibexecdir, 'systemd-update-helper'))
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEMD_USERWORK_PATH',                      join_paths(rootlibexecdir, 'systemd-userwork'))
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEMD_VERITYSETUP_PATH',                   join_paths(rootlibexecdir, 'systemd-veritysetup'))
Zbigniew Jędrzejewski-Szmek 7a99d8
 conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR',                     join_paths(pkgsysconfdir, 'system'))
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/src/rpm/macros.systemd.in b/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
index 3129ab2d61..bbdf036da7 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -46,31 +46,33 @@ OrderWithRequires(postun): systemd \
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %systemd_post() \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_post}} \
Zbigniew Jędrzejewski-Szmek 7a99d8
-if [ $1 -eq 1 ] && command -v systemctl >/dev/null; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
+if [ $1 -eq 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
     # Initial installation \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    systemctl --no-reload preset %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    {{SYSTEMD_UPDATE_HELPER_PATH}} install-system-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
 fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{nil}
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
-%systemd_user_post() %{expand:%systemd_post \\--global %%{?*}}
Zbigniew Jędrzejewski-Szmek 7a99d8
+%systemd_user_post() \
Zbigniew Jędrzejewski-Szmek 7a99d8
+%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_post}} \
Zbigniew Jędrzejewski-Szmek 7a99d8
+if [ $1 -eq 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    # Initial installation \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    {{SYSTEMD_UPDATE_HELPER_PATH}} install-user-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
+fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
+%{nil}
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %systemd_preun() \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_preun}} \
Zbigniew Jędrzejewski-Szmek 7a99d8
-if [ $1 -eq 0 ] && command -v systemctl >/dev/null; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
+if [ $1 -eq 0 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
     # Package removal, not upgrade \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    if [ -d /run/systemd/system ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
-          systemctl --no-reload disable --now %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    else \
Zbigniew Jędrzejewski-Szmek 7a99d8
-          systemctl --no-reload disable %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    {{SYSTEMD_UPDATE_HELPER_PATH}} remove-system-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
 fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{nil}
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %systemd_user_preun() \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_preun}} \
Zbigniew Jędrzejewski-Szmek 7a99d8
-if [ $1 -eq 0 ] && command -v systemctl >/dev/null; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
+if [ $1 -eq 0 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
     # Package removal, not upgrade \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    systemctl --global disable %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    {{SYSTEMD_UPDATE_HELPER_PATH}} remove-user-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
 fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{nil}
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -84,11 +86,9 @@ fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %systemd_postun_with_restart() \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_postun_with_restart}} \
Zbigniew Jędrzejewski-Szmek 7a99d8
-if [ $1 -ge 1 ] && command -v systemctl >/dev/null; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
+if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 7a99d8
     # Package upgrade, not uninstall \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    for unit in %{?*}; do \
Zbigniew Jędrzejewski-Szmek 7a99d8
-        systemctl set-property $unit Markers=+needs-restart || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
-    done \
Zbigniew Jędrzejewski-Szmek 7a99d8
+    {{SYSTEMD_UPDATE_HELPER_PATH}} mark-restart-system-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 7a99d8
 fi \
Zbigniew Jędrzejewski-Szmek 7a99d8
 %{nil}
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/src/rpm/meson.build b/src/rpm/meson.build
Zbigniew Jędrzejewski-Szmek 7a99d8
index fc72fee73c..2ad3308cc1 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/src/rpm/meson.build
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/src/rpm/meson.build
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -1,9 +1,13 @@
Zbigniew Jędrzejewski-Szmek 7a99d8
 # SPDX-License-Identifier: LGPL-2.1-or-later
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 in_files = [
Zbigniew Jędrzejewski-Szmek 7a99d8
-        ['macros.systemd',      rpmmacrosdir != 'no'],
Zbigniew Jędrzejewski-Szmek 7a99d8
-        ['triggers.systemd',    false],
Zbigniew Jędrzejewski-Szmek 7a99d8
-        ['triggers.systemd.sh', false]]
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ['macros.systemd',        rpmmacrosdir != 'no', rpmmacrosdir],
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        # we conditionalize on rpmmacrosdir, but install into rootlibexecdir
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ['systemd-update-helper', rpmmacrosdir != 'no', rootlibexecdir, 'rwxr-xr-x'],
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ['triggers.systemd',      false],
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ['triggers.systemd.sh',   false]]
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 # The last two don't get installed anywhere, one of them needs to included in
Zbigniew Jędrzejewski-Szmek 7a99d8
 # the rpm spec file definition instead.
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -17,6 +21,7 @@ foreach tuple : in_files
Zbigniew Jędrzejewski-Szmek 7a99d8
                 command : [meson_render_jinja2, config_h, '@INPUT@'],
Zbigniew Jędrzejewski-Szmek 7a99d8
                 capture : true,
Zbigniew Jędrzejewski-Szmek 7a99d8
                 install : tuple[1],
Zbigniew Jędrzejewski-Szmek 7a99d8
-                install_dir : rpmmacrosdir,
Zbigniew Jędrzejewski-Szmek 7a99d8
+                install_dir : tuple.length() > 2 ? tuple[2] : '',
Zbigniew Jędrzejewski-Szmek 7a99d8
+                install_mode : tuple.length() > 3 ? tuple[3] : false,
Zbigniew Jędrzejewski-Szmek 7a99d8
                 build_by_default : true)
Zbigniew Jędrzejewski-Szmek 7a99d8
 endforeach
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/src/rpm/systemd-update-helper.in b/src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 7a99d8
new file mode 100755
Zbigniew Jędrzejewski-Szmek 7a99d8
index 0000000000..9fa49fa131
Zbigniew Jędrzejewski-Szmek 7a99d8
--- /dev/null
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -0,0 +1,60 @@
Zbigniew Jędrzejewski-Szmek 7a99d8
+#!/bin/bash
Zbigniew Jędrzejewski-Szmek 7a99d8
+set -eu
Zbigniew Jędrzejewski-Szmek 7a99d8
+set -o pipefail
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+command="${1:?}"
Zbigniew Jędrzejewski-Szmek 7a99d8
+shift
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+command -v systemctl >/dev/null || exit 0
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+case "$command" in
Zbigniew Jędrzejewski-Szmek 7a99d8
+    install-system-units)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        systemctl --no-reload preset "$@"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    install-user-units)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        systemctl --no-reload preset --global "$@"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    remove-system-units)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        if [ -d /run/systemd/system ]; then
Zbigniew Jędrzejewski-Szmek 7a99d8
+            systemctl --no-reload disable --now "$@"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        else
Zbigniew Jędrzejewski-Szmek 7a99d8
+            systemctl --no-reload disable "$@"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    remove-user-units)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        systemctl --global disable "$@"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    mark-restart-system-units)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        [ -d /run/systemd/system ] || exit 0
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        for unit in "$@"; do
Zbigniew Jędrzejewski-Szmek 7a99d8
+            systemctl set-property "$unit" Markers=+needs-restart || :
Zbigniew Jędrzejewski-Szmek 7a99d8
+        done
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    system-reload-restart|system-reload|system-restart)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        if [ -n "$*" ]; then
Zbigniew Jędrzejewski-Szmek 7a99d8
+            echo "Unexpected arguments for '$command': $*"
Zbigniew Jędrzejewski-Szmek 7a99d8
+            exit 2
Zbigniew Jędrzejewski-Szmek 7a99d8
+        fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        [ -d /run/systemd/system ] || exit 0
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        if [[ "$command" =~ reload ]]; then
Zbigniew Jędrzejewski-Szmek 7a99d8
+            systemctl daemon-reload
Zbigniew Jędrzejewski-Szmek 7a99d8
+        fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+        if [[ "$command" =~ restart ]]; then
Zbigniew Jędrzejewski-Szmek 7a99d8
+            systemctl reload-or-restart --marked
Zbigniew Jędrzejewski-Szmek 7a99d8
+        fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+
Zbigniew Jędrzejewski-Szmek 7a99d8
+    *)
Zbigniew Jędrzejewski-Szmek 7a99d8
+        echo "Unknown verb '$command'"
Zbigniew Jędrzejewski-Szmek 7a99d8
+        exit 3
Zbigniew Jędrzejewski-Szmek 7a99d8
+        ;;
Zbigniew Jędrzejewski-Szmek 7a99d8
+esac
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/src/rpm/triggers.systemd.in b/src/rpm/triggers.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
index 247358008a..d29cc33dfd 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/src/rpm/triggers.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/src/rpm/triggers.systemd.in
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -13,20 +13,11 @@
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- upgraded. We care about the case where a package is initially
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- installed, because other cases are covered by the *un scriptlets,
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- so sometimes we will reload needlessly.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if posix.access("/run/systemd/system") then
Zbigniew Jędrzejewski-Szmek 7a99d8
-    pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
-    if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        assert(posix.execp("systemctl", "daemon-reload"))
Zbigniew Jędrzejewski-Szmek 7a99d8
-    elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
-    end
Zbigniew Jędrzejewski-Szmek 7a99d8
-
Zbigniew Jędrzejewski-Szmek 7a99d8
-    pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
-    if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        assert(posix.execp("systemctl", "reload-or-restart", "--marked"))
Zbigniew Jędrzejewski-Szmek 7a99d8
-    elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
-    end
Zbigniew Jędrzejewski-Szmek 7a99d8
+pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
+if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-reload-restart"))
Zbigniew Jędrzejewski-Szmek 7a99d8
+elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
 end
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerpostun -P 1000100 -p <lua> -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -35,24 +26,20 @@ end
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- On upgrade, we need to run daemon-reload after any new unit files
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- have been installed, but before %postun scripts in packages get
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- executed.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if posix.access("/run/systemd/system") then
Zbigniew Jędrzejewski-Szmek 7a99d8
-    pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
-    if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        assert(posix.execp("systemctl", "daemon-reload"))
Zbigniew Jędrzejewski-Szmek 7a99d8
-    elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
-    end
Zbigniew Jędrzejewski-Szmek 7a99d8
+pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
+if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-reload"))
Zbigniew Jędrzejewski-Szmek 7a99d8
+elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
 end
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerpostun -P 10000 -p <lua> -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
Zbigniew Jędrzejewski-Szmek 7a99d8
 -- We restart remaining services that should be restarted here.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if posix.access("/run/systemd/system") then
Zbigniew Jędrzejewski-Szmek 7a99d8
-    pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
-    if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        assert(posix.execp("systemctl", "reload-or-restart", "--marked"))
Zbigniew Jędrzejewski-Szmek 7a99d8
-    elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
-        posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
-    end
Zbigniew Jędrzejewski-Szmek 7a99d8
+pid = posix.fork()
Zbigniew Jędrzejewski-Szmek 7a99d8
+if pid == 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    assert(posix.exec("{{SYSTEMD_UPDATE_HELPER_PATH}}", "system-restart"))
Zbigniew Jędrzejewski-Szmek 7a99d8
+elseif pid > 0 then
Zbigniew Jędrzejewski-Szmek 7a99d8
+    posix.wait(pid)
Zbigniew Jędrzejewski-Szmek 7a99d8
 end
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerin -P 100700 -p <lua> -- {{SYSUSERS_DIR}}
Zbigniew Jędrzejewski-Szmek 7a99d8
diff --git a/src/rpm/triggers.systemd.sh.in b/src/rpm/triggers.systemd.sh.in
Zbigniew Jędrzejewski-Szmek 7a99d8
index 1631be18c9..83cd7617f8 100644
Zbigniew Jędrzejewski-Szmek 7a99d8
--- a/src/rpm/triggers.systemd.sh.in
Zbigniew Jędrzejewski-Szmek 7a99d8
+++ b/src/rpm/triggers.systemd.sh.in
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -14,10 +14,7 @@
Zbigniew Jędrzejewski-Szmek 7a99d8
 # upgraded. We care about the case where a package is initially
Zbigniew Jędrzejewski-Szmek 7a99d8
 # installed, because other cases are covered by the *un scriptlets,
Zbigniew Jędrzejewski-Szmek 7a99d8
 # so sometimes we will reload needlessly.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if test -d "/run/systemd/system"; then
Zbigniew Jędrzejewski-Szmek 7a99d8
-  systemctl daemon-reload || :
Zbigniew Jędrzejewski-Szmek 7a99d8
-  systemctl reload-or-restart --marked || :
Zbigniew Jędrzejewski-Szmek 7a99d8
-fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-reload-restart || :
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerpostun -P 1000100 -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
Zbigniew Jędrzejewski-Szmek 7a99d8
 # On removal, we need to run daemon-reload after any units have been
Zbigniew Jędrzejewski-Szmek 7a99d8
@@ -25,15 +22,11 @@ fi
Zbigniew Jędrzejewski-Szmek 7a99d8
 # On upgrade, we need to run daemon-reload after any new unit files
Zbigniew Jędrzejewski-Szmek 7a99d8
 # have been installed, but before %postun scripts in packages get
Zbigniew Jędrzejewski-Szmek 7a99d8
 # executed.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if test -d "/run/systemd/system"; then
Zbigniew Jędrzejewski-Szmek 7a99d8
-  systemctl daemon-reload || :
Zbigniew Jędrzejewski-Szmek 7a99d8
-fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-reload || :
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerpostun -P 10000 -- {{SYSTEM_DATA_UNIT_DIR}} /etc/systemd/system
Zbigniew Jędrzejewski-Szmek 7a99d8
 # We restart remaining services that should be restarted here.
Zbigniew Jędrzejewski-Szmek 7a99d8
-if test -d "/run/systemd/system"; then
Zbigniew Jędrzejewski-Szmek 7a99d8
-  systemctl reload-or-restart --marked || :
Zbigniew Jędrzejewski-Szmek 7a99d8
-fi
Zbigniew Jędrzejewski-Szmek 7a99d8
+{{SYSTEMD_UPDATE_HELPER_PATH}} system-restart || :
Zbigniew Jędrzejewski-Szmek 7a99d8
 
Zbigniew Jędrzejewski-Szmek 7a99d8
 %transfiletriggerin -P 1000700 -- {{SYSUSERS_DIR}}
Zbigniew Jędrzejewski-Szmek 7a99d8
 # This script will process files installed in {{SYSUSERS_DIR}} to create