[DTrace-devel] [PATCH 1/2] dtprobed: use presets properly for daemon restarting
Kris Van Hees
kris.van.hees at oracle.com
Fri Jan 26 05:34:18 UTC 2024
On Tue, Nov 21, 2023 at 09:48:25PM +0000, Nick Alcock wrote:
> 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>
Reviewed-by: Kris Van Hees <kris.van.hees 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