summaryrefslogtreecommitdiff
path: root/src/rpm
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-01-31 14:24:46 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-15 20:49:14 +0100
commitb492db99d60ac0f0403decb3d291d3ddcc435db6 (patch)
tree432c245ed1fa4e9e4402469668fb063ea9e9389c /src/rpm
parentaddf2c0ecdedaf3863f1b670ca5ca17d058446c9 (diff)
downloadsystemd-b492db99d60ac0f0403decb3d291d3ddcc435db6.tar.gz
rpm: simplify daemon-reload trigger
The trigger was initially written to use %transfiletriggerun instead of %transfiletriggerpostun because the latter would not fire. It turned out to a buffer overread in rpm that since has been long fixed: https://bugzilla.redhat.com/show_bug.cgi?id=1284645 https://github.com/rpm-software-management/rpm/commit/f6521c50f6836374a0f7995f8f393aaf36e178ea
Diffstat (limited to 'src/rpm')
-rw-r--r--src/rpm/triggers.systemd.in27
-rw-r--r--src/rpm/triggers.systemd.sh.in23
2 files changed, 8 insertions, 42 deletions
diff --git a/src/rpm/triggers.systemd.in b/src/rpm/triggers.systemd.in
index 9391ed45a4..1e925cf974 100644
--- a/src/rpm/triggers.systemd.in
+++ b/src/rpm/triggers.systemd.in
@@ -6,14 +6,13 @@
# The contents of this are an example to be copied into systemd.spec.
#
-# Minimum rpm version supported: 4.13.0
+# Minimum rpm version supported: 4.14.0
%transfiletriggerin -P 900900 -p <lua> -- @systemunitdir@ /etc/systemd/system
-- This script will run after any package is initially installed or
-- upgraded. We care about the case where a package is initially
-- installed, because other cases are covered by the *un scriptlets,
-- so sometimes we will reload needlessly.
-
if posix.access("/run/systemd/system") then
pid = posix.fork()
if pid == 0 then
@@ -23,31 +22,13 @@ if posix.access("/run/systemd/system") then
end
end
-%transfiletriggerun -p <lua> -- @systemunitdir@ /etc/systemd/system
+%transfiletriggerpostun -P 1000100 -p <lua> -- @systemunitdir@ /etc/systemd/system
-- On removal, we need to run daemon-reload after any units have been
--- removed. %transfiletriggerpostun would be ideal, but it does not get
--- executed for some reason.
+-- removed.
-- On upgrade, we need to run daemon-reload after any new unit files
-- have been installed, but before %postun scripts in packages get
--- executed. %transfiletriggerun gets the right list of files
--- but it is invoked too early (before changes happen).
--- %filetriggerpostun happens at the right time, but it fires for
--- every package.
--- To execute the reload at the right time, we create a state
--- file in %transfiletriggerun and execute the daemon-reload in
--- the first %filetriggerpostun.
-
+-- executed.
if posix.access("/run/systemd/system") then
- posix.mkdir("%{_localstatedir}/lib")
- posix.mkdir("%{_localstatedir}/lib/rpm-state")
- posix.mkdir("%{_localstatedir}/lib/rpm-state/systemd")
- io.open("%{_localstatedir}/lib/rpm-state/systemd/needs-reload", "w")
-end
-
-%filetriggerpostun -P 1000100 -p <lua> -- @systemunitdir@ /etc/systemd/system
-if posix.access("%{_localstatedir}/lib/rpm-state/systemd/needs-reload") then
- posix.unlink("%{_localstatedir}/lib/rpm-state/systemd/needs-reload")
- posix.rmdir("%{_localstatedir}/lib/rpm-state/systemd")
pid = posix.fork()
if pid == 0 then
assert(posix.exec("%{_bindir}/systemctl", "daemon-reload"))
diff --git a/src/rpm/triggers.systemd.sh.in b/src/rpm/triggers.systemd.sh.in
index 13f7cb631d..641afd9ef7 100644
--- a/src/rpm/triggers.systemd.sh.in
+++ b/src/rpm/triggers.systemd.sh.in
@@ -7,7 +7,7 @@
# The contents of this are an example to be copied into systemd.spec.
#
-# Minimum rpm version supported: 4.13.0
+# Minimum rpm version supported: 4.14.0
%transfiletriggerin -P 900900 -- @systemunitdir@ /etc/systemd/system
# This script will run after any package is initially installed or
@@ -18,28 +18,13 @@ if test -d "/run/systemd/system"; then
%{_bindir}/systemctl daemon-reload || :
fi
-%transfiletriggerun -- @systemunitdir@ /etc/systemd/system
+%transfiletriggerpostun -P 1000100 -- @systemunitdir@ /etc/systemd/system
# On removal, we need to run daemon-reload after any units have been
-# removed. %transfiletriggerpostun would be ideal, but it does not get
-# executed for some reason.
+# removed.
# On upgrade, we need to run daemon-reload after any new unit files
# have been installed, but before %postun scripts in packages get
-# executed. %transfiletriggerun gets the right list of files
-# but it is invoked too early (before changes happen).
-# %filetriggerpostun happens at the right time, but it fires for
-# every package.
-# To execute the reload at the right time, we create a state
-# file in %transfiletriggerun and execute the daemon-reload in
-# the first %filetriggerpostun.
-
+# executed.
if test -d "/run/systemd/system"; then
- mkdir -p "%{_localstatedir}/lib/rpm-state/systemd"
- touch "%{_localstatedir}/lib/rpm-state/systemd/needs-reload"
-fi
-
-%filetriggerpostun -P 1000100 -- @systemunitdir@ /etc/systemd/system
-if test -f "%{_localstatedir}/lib/rpm-state/systemd/needs-reload"; then
- rm -rf "%{_localstatedir}/lib/rpm-state/systemd"
%{_bindir}/systemctl daemon-reload || :
fi