[DTrace-devel] [PATCH 1/2] dtprobed: use presets properly for daemon restarting

Nick Alcock nick.alcock at oracle.com
Tue Nov 21 21:48:25 UTC 2023


It turns out that systemd supports per-package drop-ins for presets,
so we can use presets to enable the daemon and leave by-hand enabling/
disabling/restarting for the individual sysadmin (as might be the
intent in a world with presets: I'm not sure, this stuff is very
lightly documented).

As a bonus, doing it this way does not depend on the state of the old
package at all: the restarting is done by setting a property on the
requested service, then triggering a reload/restart of everything with that
property set (see /usr/lib/systemd/systemd-update-helper).  So we can
switch to using %systemd_postun_with_restart in %postun, and everything
will just work (including from previous versions of this package, though
upgrades from .12 will always produce a harmless error message: nothing
we can do, the bug is in .12).

Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
 GNUmakefile                 |  2 ++
 dtprobed/50-dtprobed.preset |  1 +
 dtprobed/Build              |  4 +++-
 dtrace.spec                 | 11 +++--------
 4 files changed, 9 insertions(+), 9 deletions(-)
 create mode 100644 dtprobed/50-dtprobed.preset

diff --git a/GNUmakefile b/GNUmakefile
index 2ffd4c497886..926d84c5f4e1 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -94,7 +94,9 @@ SBINDIR := $(prefix)/sbin
 INSTSBINDIR := $(DESTDIR)$(SBINDIR)
 UDEVDIR := $(prefix)/lib/udev/rules.d
 INSTUDEVDIR := $(DESTDIR)$(UDEVDIR)
+SYSTEMDPRESETDIR := $(prefix)/lib/systemd/system-preset
 SYSTEMDUNITDIR := $(prefix)/lib/systemd/system
+INSTSYSTEMDPRESETDIR := $(DESTDIR)$(SYSTEMDPRESETDIR)
 INSTSYSTEMDUNITDIR := $(DESTDIR)$(SYSTEMDUNITDIR)
 DOCDIR := $(prefix)/share/doc/dtrace-$(VERSION)
 INSTDOCDIR := $(DESTDIR)$(DOCDIR)
diff --git a/dtprobed/50-dtprobed.preset b/dtprobed/50-dtprobed.preset
new file mode 100644
index 000000000000..84422b7e1d4c
--- /dev/null
+++ b/dtprobed/50-dtprobed.preset
@@ -0,0 +1 @@
+enable dtprobed.service
diff --git a/dtprobed/Build b/dtprobed/Build
index c44dd40ab3d2..610e13526f11 100644
--- a/dtprobed/Build
+++ b/dtprobed/Build
@@ -50,11 +50,13 @@ install::
 	$(call describe-install-target,$(INSTUDEVDIR),60-dtprobed.rules)
 	install -m 644 $(dtprobed_DIR)60-dtprobed.rules $(INSTUDEVDIR)
 ifdef HAVE_LIBSYSTEMD
-	mkdir -p $(INSTSYSTEMDUNITDIR)
+	mkdir -p $(INSTSYSTEMDUNITDIR) $(INSTSYSTEMDPRESETDIR)
 	$(call describe-install-target,$(INSTSYSTEMDUNITDIR),dtprobed.service)
 	install -m 644 $(dtprobed_DIR)dtprobed.service $(INSTSYSTEMDUNITDIR)
 	$(call describe-install-target,$(INSTSYSTEMDUNITDIR),dtrace-usdt.target)
 	install -m 644 $(dtprobed_DIR)dtrace-usdt.target $(INSTSYSTEMDUNITDIR)
+	$(call describe-install-target,$(INSTSYSTEMDPRESETDIR),50-dtprobed.preset)
+	install -m 644 $(dtprobed_DIR)50-dtprobed.preset $(INSTSYSTEMDPRESETDIR)
 	if [[ -z $RPM_BUILD_ROOT ]]; then \
 		systemctl enable dtprobed.service dtrace-usdt.target; \
 	fi
diff --git a/dtrace.spec b/dtrace.spec
index 777dd28ded84..ff1f380822ab 100644
--- a/dtrace.spec
+++ b/dtrace.spec
@@ -197,13 +197,7 @@ rm -rf $RPM_BUILD_DIR/%{name}-%{version}
 %post
 /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
+%systemd_post dtprobed.service
 
 # if sdt-systemtap.h doesn't exist then we can move the existing dtrace sdt.h
 SYSINCDIR=/usr/include/sys
@@ -220,7 +214,7 @@ fi
 %postun
 /sbin/ldconfig
 %udev_rules_update
-%systemd_postun dtprobed.service
+%systemd_postun_with_restart dtprobed.service
 
 %files
 %defattr(-,root,root,-)
@@ -235,6 +229,7 @@ fi
 %doc %{_docdir}/dtrace-%{version}/*
 %{_unitdir}/dtprobed.service
 %{_unitdir}/dtrace-usdt.target
+%{_presetdir}/50-dtprobed.preset
 %{_udevrulesdir}/60-dtprobed.rules
 
 %files devel
-- 
2.42.0.271.g85384428f1




More information about the DTrace-devel mailing list