From dc46312de28fa813fa5919d056f5d0e36a5d643f Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 27 Mar 2018 20:37:29 +0000 Subject: [PATCH] Use shell for triggers; see https://github.com/systemd/systemd/pull/8550 This fixes compatibility with rpm-ostree. --- systemd.spec | 6 +- triggers.systemd | 197 ++++++++++++++++++----------------------------- 2 files changed, 79 insertions(+), 124 deletions(-) diff --git a/systemd.spec b/systemd.spec index 1b116a0..e4201f3 100644 --- a/systemd.spec +++ b/systemd.spec @@ -13,7 +13,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 238 -Release: 5%{?gitcommit:.git%{gitcommitshort}}%{?dist} +Release: 6%{?gitcommit:.git%{gitcommitshort}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: System and Service Manager @@ -706,6 +706,10 @@ fi %files tests -f .file-list-tests %changelog +* Tue Mar 27 2018 Colin Walters +- Use shell for triggers; see https://github.com/systemd/systemd/pull/8550 + This fixes compatibility with rpm-ostree. + * Tue Mar 20 2018 Zbigniew Jędrzejewski-Szmek - 238-5 - Backport patch to revert inadvertent change of "predictable" interface name (#1558027) diff --git a/triggers.systemd b/triggers.systemd index 3a6788c..1012702 100644 --- a/triggers.systemd +++ b/triggers.systemd @@ -23,136 +23,87 @@ # # Minimum rpm version supported: 4.13.0 -%transfiletriggerin -P 900900 -p -- /usr/lib/systemd/system /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. +%transfiletriggerin -P 900900 -- /usr/lib/systemd/system /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 test -d /run/systemd/system; then + %{_bindir}/systemctl daemon-reload +fi -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/systemctl", "daemon-reload")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerun -- /usr/lib/systemd/system /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. +# 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. -%transfiletriggerun -p -- /usr/lib/systemd/system /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. --- 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. +if test -d "/run/systemd/system"; then + mkdir -p %{_localstatedir}/lib/rpm-state/systemd" + touch %{_localstatedir}/lib/rpm-state/systemd/needs-reload" +fi -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 -- /usr/lib/systemd/system /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 -%filetriggerpostun -P 1000100 -p -- /usr/lib/systemd/system /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")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -P 100700 -- /usr/lib/sysusers.d +# This script will process files installed in /usr/lib/sysusers.d to create +# specified users automatically. The priority is set such that it +# will run before the tmpfiles file trigger. +if test -d /run/systemd/system; then + %{_bindir}/systemd-sysusers +fi -%transfiletriggerin -P 100700 -p -- /usr/lib/sysusers.d --- This script will process files installed in /usr/lib/sysusers.d to create --- specified users automatically. The priority is set such that it --- will run before the tmpfiles file trigger. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/systemd-sysusers")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -P 100500 -- /usr/lib/tmpfiles.d +# This script will process files installed in /usr/lib/tmpfiles.d to create +# tmpfiles automatically. The priority is set such that it will run +# after the sysusers file trigger, but before any other triggers. +if test -d /run/systemd/system; then + %{_bindir}/systemd-tmpfiles --create +fi -%transfiletriggerin -P 100500 -p -- /usr/lib/tmpfiles.d --- This script will process files installed in /usr/lib/tmpfiles.d to create --- tmpfiles automatically. The priority is set such that it will run --- after the sysusers file trigger, but before any other triggers. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/systemd-tmpfiles", "--create")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -- /usr/lib/udev/hwdb.d +# This script will automatically invoke hwdb update if files have been +# installed or updated in /usr/lib/udev/hwdb.d. +if test -d /run/systemd/system; then + %{_bindir}/systemd-hwdb update +fi -%transfiletriggerin udev -p -- /usr/lib/udev/hwdb.d --- This script will automatically invoke hwdb update if files have been --- installed or updated in /usr/lib/udev/hwdb.d. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/systemd-hwdb", "update")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -- /usr/lib/systemd/catalog +# This script will automatically invoke journal catalog update if files +# have been installed or updated in /usr/lib/systemd/catalog. +if test -d /run/systemd/system; then + %{_bindir}/journalctl --update-catalog +fi -%transfiletriggerin -p -- /usr/lib/systemd/catalog --- This script will automatically invoke journal catalog update if files --- have been installed or updated in /usr/lib/systemd/catalog. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/journalctl", "--update-catalog")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -- /usr/lib/udev/rules.d +# This script will automatically update udev with new rules if files +# have been installed or updated in /usr/lib/udev/rules.d. +if test -d /run/systemd/system; then + %{_bindir}/udevadm control --reload +fi -%transfiletriggerin udev -p -- /usr/lib/udev/rules.d --- This script will automatically update udev with new rules if files --- have been installed or updated in /usr/lib/udev/rules.d. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("%{_bindir}/udevadm", "control", "--reload")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -- /usr/lib/sysctl.d +# This script will automatically apply sysctl rules if files have been +# installed or updated in /usr/lib/sysctl.d. +if test -d /run/systemd/system; then + /usr/lib/systemd/systemd-sysctl +fi -%transfiletriggerin -p -- /usr/lib/sysctl.d --- This script will automatically apply sysctl rules if files have been --- installed or updated in /usr/lib/sysctl.d. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("/usr/lib/systemd/systemd-sysctl")) - elseif pid > 0 then - posix.wait(pid) - end -end - -%transfiletriggerin -p -- /usr/lib/binfmt.d --- This script will automatically apply binfmt rules if files have been --- installed or updated in /usr/lib/binfmt.d. -if posix.access("/run/systemd/system") then - pid = posix.fork() - if pid == 0 then - assert(posix.exec("/usr/lib/systemd/systemd-binfmt")) - elseif pid > 0 then - posix.wait(pid) - end -end +%transfiletriggerin -- /usr/lib/binfmt.d +# This script will automatically apply binfmt rules if files have been +# installed or updated in /usr/lib/binfmt.d. +if test -d /run/systemd/system; then + /usr/lib/systemd/systemd-binfmt +fi