[DTrace-devel] [PATCH] spec, dtprobed: restart on install/update if already running
Nick Alcock
nick.alcock at oracle.com
Wed Jun 7 17:14:26 UTC 2023
If we don't restart dtprobed when a yum update happens, we're going to
keep running an older version, with all its bugs and/or limitations. I
thought %systemd_postun handled this, but in fact it doesn't: you need
to use the barely-documented %systemd_postun_with_restart instead. Of
course, that doesn't really work: being in %postun, the *package being
uninstalled* already needs to have it. So do a try-restart in %post
instead, so that the new version gets it. If we do a try-restart before
the enable/start, it should work fine even on first install, when it's
not already running.
While we're at it, fix %systemd_postun to not mention .targets,
only .services: it doesn't make sense to stop targets :)
Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
dtrace.spec | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/dtrace.spec b/dtrace.spec
index d525386f15e8..92d10e4d876b 100644
--- a/dtrace.spec
+++ b/dtrace.spec
@@ -198,6 +198,10 @@ rm -rf $RPM_BUILD_DIR/%{name}-%{version}
/sbin/ldconfig
%udev_rules_update
%systemd_post dtprobed.service dtrace-usdt.target
+# Do this rather than systemd_postun_with_restart because this depends
+# only on the package being installed, rather than relying on the state of
+# the old package.
+systemctl try-restart dtprobed || :
systemctl enable dtprobed.service dtrace-usdt.target
systemctl start dtprobed.service
@@ -216,7 +220,7 @@ fi
%postun
/sbin/ldconfig
%udev_rules_update
-%systemd_postun dtprobed.service dtrace-usdt.target
+%systemd_postun dtprobed.service
%files
%defattr(-,root,root,-)
base-commit: 54eaa8936464e11d290660a4f6d49074086d7124
--
2.40.1.269.g9f1f0b2736
More information about the DTrace-devel
mailing list