mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
rpm: add %systemd_postun_with_reload and %systemd_user_postun_with_reload
For some units, the package would like to issue a reload. The machinery was
already in place since c9615f7352:
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.
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_SEC}}s \
|
||||
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': $*"
|
||||
|
||||
Reference in New Issue
Block a user