summaryrefslogtreecommitdiffstats
path: root/src/rpm/triggers.systemd.sh.in
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-01-31 12:11:36 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-15 20:49:14 +0100
commitfa97d2fcf64e0558054bee673f734f523373b146 (patch)
tree218c0327bca2c940c3c0e7d3fc9e19054fa223a3 /src/rpm/triggers.systemd.sh.in
parentrpm: order sysctl/sysusers/tmpfiles execution before package scriptlets (diff)
downloadsystemd-fa97d2fcf64e0558054bee673f734f523373b146.tar.xz
systemd-fa97d2fcf64e0558054bee673f734f523373b146.zip
rpm: restart services in %posttrans
This fixes a long-standing issue in packaging scriptlets: daemon-reload was moved to the end of the transaction, but restarting services was still straightaway after package installation. https://bugzilla.redhat.com/show_bug.cgi?id=1614751 Note that daemon-reload is called twice. This wouldn't be hardly noticable, except that now a bunch of units (at least in Fedora) generate very verbose warnings about deprecated features. So we get those warnings twice… reload-or-restart --needing-restart is also called twice, but the second call is usually a noop, because the first clears the flag for restarted units. The second call is necessary for the case where we only uninstall packages, and the %transfiletriggerpostun trigger fires, but not the %transfiletriggerin scriptlet. Also note that this assumes that units are marked only for restart if paths under @systemunitdir@ or /etc/systemd/system have been touched. I would prefer make the trigger that does 'restart --needing-restart' fire always, but it seems rpm doesn't have such functionality. (Except as a %transfiletrigger that would trigger on "/*" to catch all transactions, but that seems ineffiecient and ugly.)
Diffstat (limited to '')
-rw-r--r--src/rpm/triggers.systemd.sh.in7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rpm/triggers.systemd.sh.in b/src/rpm/triggers.systemd.sh.in
index c1af5f43d3..0080040de4 100644
--- a/src/rpm/triggers.systemd.sh.in
+++ b/src/rpm/triggers.systemd.sh.in
@@ -16,6 +16,7 @@
# so sometimes we will reload needlessly.
if test -d "/run/systemd/system"; then
%{_bindir}/systemctl daemon-reload || :
+ %{_bindir}/systemctl reload-or-restart --marked || :
fi
%transfiletriggerpostun -P 1000100 -- @systemunitdir@ /etc/systemd/system
@@ -28,6 +29,12 @@ if test -d "/run/systemd/system"; then
%{_bindir}/systemctl daemon-reload || :
fi
+%transfiletriggerpostun -P 10000 -- @systemunitdir@ /etc/systemd/system
+# We restart remaining services that should be restarted here.
+if test -d "/run/systemd/system"; then
+ %{_bindir}/systemctl reload-or-restart --marked || :
+fi
+
%transfiletriggerin -P 1000700 -- @sysusersdir@
# This script will process files installed in @sysusersdir@ to create
# specified users automatically. The priority is set such that it