Zbigniew Jędrzejewski-Szmek 11c465
From 631d2b05ec5195d1f8f8fbff8a2dfcbf23d0b7aa Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 11c465
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 11c465
Date: Wed, 26 Jul 2023 09:02:04 +0200
Zbigniew Jędrzejewski-Szmek 11c465
Subject: [PATCH] rpm: add %systemd_postun_with_reload and
Zbigniew Jędrzejewski-Szmek 11c465
 %systemd_user_postun_with_reload
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
For some units, the package would like to issue a reload. The machinery was
Zbigniew Jędrzejewski-Szmek 11c465
already in place since c9615f73521986b3607b852c139036d58973043c:
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
  systemctl reload-or-restart --marked
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
  Enqueues restart jobs for all units that have the 'needs-restart'
Zbigniew Jędrzejewski-Szmek 11c465
  mark, and reload jobs for units that have the 'needs-reload' mark.
Zbigniew Jędrzejewski-Szmek 11c465
  When a unit marked for reload does not support reload, restart will
Zbigniew Jędrzejewski-Szmek 11c465
  be queued.
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
The new macros allow a reload to be issued instead of a restart.
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
Based on the discussion on fedora-devel:
Zbigniew Jędrzejewski-Szmek 11c465
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/IJSUGIEJNYZZRE53FF4YFUEBRHRAVIXR/
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
Tested using dummy package https://github.com/keszybz/rpm-test-reload.
Zbigniew Jędrzejewski-Szmek 11c465
---
Zbigniew Jędrzejewski-Szmek 11c465
 src/rpm/macros.systemd.in        | 16 ++++++++++++++++
Zbigniew Jędrzejewski-Szmek 11c465
 src/rpm/systemd-update-helper.in | 22 ++++++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 11c465
 2 files changed, 38 insertions(+)
Zbigniew Jędrzejewski-Szmek 11c465
Zbigniew Jędrzejewski-Szmek 11c465
diff --git a/src/rpm/macros.systemd.in b/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 11c465
index c07541c7286c..f05553f557e9 100644
Zbigniew Jędrzejewski-Szmek 11c465
--- a/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 11c465
+++ b/src/rpm/macros.systemd.in
Zbigniew Jędrzejewski-Szmek 11c465
@@ -101,6 +101,22 @@ if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 11c465
 fi \
Zbigniew Jędrzejewski-Szmek 11c465
 %{nil}
Zbigniew Jędrzejewski-Szmek 11c465
 
Zbigniew Jędrzejewski-Szmek 11c465
+%systemd_postun_with_reload() \
Zbigniew Jędrzejewski-Szmek 11c465
+%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_postun_with_reload}} \
Zbigniew Jędrzejewski-Szmek 11c465
+if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 11c465
+    # Package upgrade, not uninstall \
Zbigniew Jędrzejewski-Szmek 11c465
+    {{SYSTEMD_UPDATE_HELPER_PATH}} mark-reload-system-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 11c465
+fi \
Zbigniew Jędrzejewski-Szmek 11c465
+%{nil}
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
+%systemd_user_postun_with_reload() \
Zbigniew Jędrzejewski-Szmek 11c465
+%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_postun_with_reload}} \
Zbigniew Jędrzejewski-Szmek 11c465
+if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
Zbigniew Jędrzejewski-Szmek 11c465
+    # Package upgrade, not uninstall \
Zbigniew Jędrzejewski-Szmek 11c465
+    {{SYSTEMD_UPDATE_HELPER_PATH}} mark-reload-user-units %{?*} || : \
Zbigniew Jędrzejewski-Szmek 11c465
+fi \
Zbigniew Jędrzejewski-Szmek 11c465
+%{nil}
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
 %udev_hwdb_update() %{nil}
Zbigniew Jędrzejewski-Szmek 11c465
 
Zbigniew Jędrzejewski-Szmek 11c465
 %udev_rules_update() %{nil}
Zbigniew Jędrzejewski-Szmek 11c465
diff --git a/src/rpm/systemd-update-helper.in b/src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 11c465
index c623a5ea1722..c81e16c3d3ff 100755
Zbigniew Jędrzejewski-Szmek 11c465
--- a/src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 11c465
+++ b/src/rpm/systemd-update-helper.in
Zbigniew Jędrzejewski-Szmek 11c465
@@ -47,6 +47,15 @@ case "$command" in
Zbigniew Jędrzejewski-Szmek 11c465
         wait
Zbigniew Jędrzejewski-Szmek 11c465
         ;;
Zbigniew Jędrzejewski-Szmek 11c465
 
Zbigniew Jędrzejewski-Szmek 11c465
+    mark-reload-system-units)
Zbigniew Jędrzejewski-Szmek 11c465
+        [ -d /run/systemd/system ] || exit 0
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
+        for unit in "$@"; do
Zbigniew Jędrzejewski-Szmek 11c465
+            systemctl set-property "$unit" Markers=+needs-reload &
Zbigniew Jędrzejewski-Szmek 11c465
+        done
Zbigniew Jędrzejewski-Szmek 11c465
+        wait
Zbigniew Jędrzejewski-Szmek 11c465
+        ;;
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
     mark-restart-user-units)
Zbigniew Jędrzejewski-Szmek 11c465
         [ -d /run/systemd/system ] || exit 0
Zbigniew Jędrzejewski-Szmek 11c465
 
Zbigniew Jędrzejewski-Szmek 11c465
@@ -60,6 +69,19 @@ case "$command" in
Zbigniew Jędrzejewski-Szmek 11c465
         wait
Zbigniew Jędrzejewski-Szmek 11c465
         ;;
Zbigniew Jędrzejewski-Szmek 11c465
 
Zbigniew Jędrzejewski-Szmek 11c465
+    mark-reload-user-units)
Zbigniew Jędrzejewski-Szmek 11c465
+        [ -d /run/systemd/system ] || exit 0
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
+        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
Zbigniew Jędrzejewski-Szmek 11c465
+        for user in $users; do
Zbigniew Jędrzejewski-Szmek 11c465
+            for unit in "$@"; do
Zbigniew Jędrzejewski-Szmek 11c465
+                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
Zbigniew Jędrzejewski-Szmek 11c465
+                        systemctl --user -M "$user@" set-property "$unit" Markers=+needs-reload &
Zbigniew Jędrzejewski-Szmek 11c465
+            done
Zbigniew Jędrzejewski-Szmek 11c465
+        done
Zbigniew Jędrzejewski-Szmek 11c465
+        wait
Zbigniew Jędrzejewski-Szmek 11c465
+        ;;
Zbigniew Jędrzejewski-Szmek 11c465
+
Zbigniew Jędrzejewski-Szmek 11c465
     system-reload-restart|system-reload|system-restart)
Zbigniew Jędrzejewski-Szmek 11c465
         if [ -n "$*" ]; then
Zbigniew Jędrzejewski-Szmek 11c465
             echo "Unexpected arguments for '$command': $*"