[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