From 703bd579f1ccf0d0c00fe648f46f13dcf9cc3a44 Mon Sep 17 00:00:00 2001 From: Ryan Wilson Date: Nov 07 2024 02:22:01 +0000 Subject: Only run daemon-reexec once on upgrade --- diff --git a/systemd.spec b/systemd.spec index 357b07b..1017f2f 100644 --- a/systemd.spec +++ b/systemd.spec @@ -44,7 +44,7 @@ Url: https://systemd.io # Allow users to specify the version and release when building the rpm by # setting the %%version_override and %%release_override macros. Version: %{?version_override}%{!?version_override:256.7} -Release: %{?release_override}%{!?release_override:1.4}%{?dist} +Release: %{?release_override}%{!?release_override:1.5}%{?dist} %global stable %(c="%version"; [ "$c" = "${c#*.*}" ]; echo $?) @@ -1089,6 +1089,8 @@ if [ -x "/usr/lib/systemd/systemd-update-helper" ]; then \ fi \ %{nil} +%define systemd_rpmstatedir %{_localstatedir}/lib/rpm-state/systemd + %post systemd-machine-id-setup &>/dev/null || : @@ -1112,7 +1114,22 @@ systemd-tmpfiles --create &>/dev/null || : systemctl preset-all &>/dev/null || : systemctl --global preset-all &>/dev/null || : +%pre +[ -w %{_localstatedir} ] && mkdir -p %{systemd_rpmstatedir} && touch %{systemd_rpmstatedir}/restart-required || : + %postun +if [ -w %{systemd_rpmstatedir} ] && [ ! -f %{systemd_rpmstatedir}/restart-required ]; then +%if 0%{?facebook} + # Always restart logind since systemd < 256 does not include logind restart in postun + # and the older uninstalled RPM postun will run first on upgrade. We will get rid of + # this once Facebook upgrades systemd >= 256 + %systemd_postun_with_restart systemd-logind.service +%endif + exit 0 || : +fi + +[ -w %{systemd_rpmstatedir} ] && rm -f %{systemd_rpmstatedir}/restart-required || : + if [ $1 -ge 1 ]; then [ -w %{_localstatedir} ] && journalctl --update-catalog || : @@ -1140,6 +1157,18 @@ if [ $1 -ge 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then fi %posttrans +if [ -w %{systemd_rpmstatedir} ] && [ ! -f %{systemd_rpmstatedir}/restart-required ]; then +%if 0%{?facebook} + # Always restart logind since systemd < 256 does not include logind restart in postun + # and the older uninstalled RPM postun will run first on upgrade. We will get rid of + # this once Facebook upgrades systemd >= 256 + %systemd_posttrans_with_restart systemd-logind.service +%endif + exit 0 || : +fi + +[ -w %{systemd_rpmstatedir} ] && rm -f %{systemd_rpmstatedir}/restart-required || : + # We can't check for upgrades on c9s as https://github.com/rpm-software-management/rpm/commit/3848c97cb227e7c018781aa7d5e1e46990ce1ffb # is missing so we run this stuff unconditionally on installs and upgrades. [ -w %{_localstatedir} ] && journalctl --update-catalog || : @@ -1166,9 +1195,15 @@ if [ -x "/usr/lib/systemd/systemd-update-helper" ]; then /usr/lib/systemd/systemd-update-helper user-reexec || : fi +# Facebook minimum version is 255 so once 255-1.5 is released to Facebook's fleet, +# we can rely on the fact all systemd RPMs will use posttrans/postun and RPM state +# to ensure only one daemon-reexec. However, non-Facebook Centos RPMs may be older +# versions and we can't rely on removing triggerun for versions < 256. +%if 0%{?facebook} == 0 %triggerun -- systemd < 256 # This is for upgrades from previous versions before systemd restart was moved to %%postun systemctl daemon-reexec || : +%endif %triggerpostun -- systemd < 253~rc1-2 # This is for upgrades from previous versions where systemd-journald-audit.socket