Skip to content

Commit

Permalink
rpm: add %systemd_postun_with_reload and %systemd_user_postun_with_re…
Browse files Browse the repository at this point in the history
…load

For some units, the package would like to issue a reload. The machinery was
already in place since c9615f7:

  systemctl reload-or-restart --marked

  Enqueues restart jobs for all units that have the 'needs-restart'
  mark, and reload jobs for units that have the 'needs-reload' mark.
  When a unit marked for reload does not support reload, restart will
  be queued.

The new macros allow a reload to be issued instead of a restart.

Based on the discussion on fedora-devel:
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/IJSUGIEJNYZZRE53FF4YFUEBRHRAVIXR/

Tested using dummy package https://github.com/keszybz/rpm-test-reload.

(cherry picked from commit 631d2b0)
  • Loading branch information
keszybz authored and jamacku committed Mar 28, 2024
1 parent a33868e commit 739a647
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/rpm/macros.systemd.in
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,22 @@ if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
fi \
%{nil}

%systemd_postun_with_reload() \
%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_postun_with_reload}} \
if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
# Package upgrade, not uninstall \
{{SYSTEMD_UPDATE_HELPER_PATH}} mark-reload-system-units %{?*} || : \
fi \
%{nil}

%systemd_user_postun_with_reload() \
%{expand:%%{?__systemd_someargs_%#:%%__systemd_someargs_%# systemd_user_postun_with_reload}} \
if [ $1 -ge 1 ] && [ -x "{{SYSTEMD_UPDATE_HELPER_PATH}}" ]; then \
# Package upgrade, not uninstall \
{{SYSTEMD_UPDATE_HELPER_PATH}} mark-reload-user-units %{?*} || : \
fi \
%{nil}

%udev_hwdb_update() %{nil}

%udev_rules_update() %{nil}
Expand Down
22 changes: 22 additions & 0 deletions src/rpm/systemd-update-helper.in
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ case "$command" in
wait
;;

mark-reload-system-units)
[ -d /run/systemd/system ] || exit 0

for unit in "$@"; do
systemctl set-property "$unit" Markers=+needs-reload &
done
wait
;;

mark-restart-user-units)
[ -d /run/systemd/system ] || exit 0

Expand All @@ -60,6 +69,19 @@ case "$command" in
wait
;;

mark-reload-user-units)
[ -d /run/systemd/system ] || exit 0

users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
for user in $users; do
for unit in "$@"; do
SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
systemctl --user -M "$user@" set-property "$unit" Markers=+needs-reload &
done
done
wait
;;

system-reload-restart|system-reload|system-restart)
if [ -n "$*" ]; then
echo "Unexpected arguments for '$command': $*"
Expand Down

0 comments on commit 739a647

Please sign in to comment.