]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
rpm: simplify daemon-reload trigger
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 31 Jan 2021 13:24:46 +0000 (14:24 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 15 Feb 2021 19:49:14 +0000 (20:49 +0100)
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

src/rpm/triggers.systemd.in
src/rpm/triggers.systemd.sh.in

index 9391ed45a4f6b4db29b0e5850fc1946871231dfb..1e925cf974043ab10036111f169948bc58c9b758 100644 (file)
@@ -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"))
index 13f7cb631d9b7aab7f290bfdcd9fc880d8a9ebed..641afd9ef7b7fbe0a7a30b86bee9b16d0ab1ba97 100644 (file)
@@ -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