[debhelper-devel] [debhelper] 01/02: Merge dh-systemd into debhelper proper

Michael Biebl biebl at moszumanska.debian.org
Fri Jul 8 16:07:01 UTC 2016


This is an automated email from the git hooks/post-receive script.

biebl pushed a commit to branch biebl/dh-systemd
in repository debhelper.

commit d2a0d04dd28f3c71b7f1927a587c93d62f86eb0b
Author: Michael Biebl <biebl at debian.org>
Date:   Thu Jul 7 13:43:42 2016 +0200

    Merge dh-systemd into debhelper proper
---
 Debian/Debhelper/Sequence/systemd.pm     |  14 ++
 autoscripts/postinst-systemd-dont-enable |  13 ++
 autoscripts/postinst-systemd-enable      |  13 ++
 autoscripts/postinst-systemd-restart     |   9 +
 autoscripts/postinst-systemd-start       |   4 +
 autoscripts/postrm-systemd               |  12 ++
 autoscripts/postrm-systemd-reload-only   |   3 +
 autoscripts/prerm-systemd                |   3 +
 autoscripts/prerm-systemd-restart        |   3 +
 dh_systemd_enable                        | 291 +++++++++++++++++++++++++++++++
 dh_systemd_start                         | 251 ++++++++++++++++++++++++++
 11 files changed, 616 insertions(+)

diff --git a/Debian/Debhelper/Sequence/systemd.pm b/Debian/Debhelper/Sequence/systemd.pm
new file mode 100644
index 0000000..bbaa405
--- /dev/null
+++ b/Debian/Debhelper/Sequence/systemd.pm
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Debian::Debhelper::Dh_Lib;
+
+# dh_systemd_enable runs unconditionally, and before dh_installinit, so that
+# the latter can use invoke-rc.d and all symlinks are already in place.
+insert_before("dh_installinit", "dh_systemd_enable");
+
+# dh_systemd_start handles the case where there is no corresponding init
+# script, so it runs after dh_installinit.
+insert_after("dh_installinit", "dh_systemd_start");
+
+1
diff --git a/autoscripts/postinst-systemd-dont-enable b/autoscripts/postinst-systemd-dont-enable
new file mode 100644
index 0000000..2dd86a1
--- /dev/null
+++ b/autoscripts/postinst-systemd-dont-enable
@@ -0,0 +1,13 @@
+if deb-systemd-helper debian-installed #UNITFILE#; then
+	# This will only remove masks created by d-s-h on package removal.
+	deb-systemd-helper unmask #UNITFILE# >/dev/null || true
+
+	if deb-systemd-helper --quiet was-enabled #UNITFILE#; then
+		# Create new symlinks, if any.
+		deb-systemd-helper enable #UNITFILE# >/dev/null || true
+	fi
+fi
+
+# Update the statefile to add new symlinks (if any), which need to be cleaned
+# up on purge. Also remove old symlinks.
+deb-systemd-helper update-state #UNITFILE# >/dev/null || true
diff --git a/autoscripts/postinst-systemd-enable b/autoscripts/postinst-systemd-enable
new file mode 100644
index 0000000..b903038
--- /dev/null
+++ b/autoscripts/postinst-systemd-enable
@@ -0,0 +1,13 @@
+# This will only remove masks created by d-s-h on package removal.
+deb-systemd-helper unmask #UNITFILE# >/dev/null || true
+
+# was-enabled defaults to true, so new installations run enable.
+if deb-systemd-helper --quiet was-enabled #UNITFILE#; then
+	# Enables the unit on first installation, creates new
+	# symlinks on upgrades if the unit file has changed.
+	deb-systemd-helper enable #UNITFILE# >/dev/null || true
+else
+	# Update the statefile to add new symlinks (if any), which need to be
+	# cleaned up on purge. Also remove old symlinks.
+	deb-systemd-helper update-state #UNITFILE# >/dev/null || true
+fi
diff --git a/autoscripts/postinst-systemd-restart b/autoscripts/postinst-systemd-restart
new file mode 100644
index 0000000..696fbb0
--- /dev/null
+++ b/autoscripts/postinst-systemd-restart
@@ -0,0 +1,9 @@
+if [ -d /run/systemd/system ]; then
+	systemctl --system daemon-reload >/dev/null || true
+	if [ -n "$2" ]; then
+		_dh_action=try-restart
+	else
+		_dh_action=start
+	fi
+	deb-systemd-invoke $_dh_action #UNITFILES# >/dev/null || true
+fi
diff --git a/autoscripts/postinst-systemd-start b/autoscripts/postinst-systemd-start
new file mode 100644
index 0000000..8134a04
--- /dev/null
+++ b/autoscripts/postinst-systemd-start
@@ -0,0 +1,4 @@
+if [ -d /run/systemd/system ]; then
+	systemctl --system daemon-reload >/dev/null || true
+	deb-systemd-invoke start #UNITFILES# >/dev/null || true
+fi
diff --git a/autoscripts/postrm-systemd b/autoscripts/postrm-systemd
new file mode 100644
index 0000000..22725ce
--- /dev/null
+++ b/autoscripts/postrm-systemd
@@ -0,0 +1,12 @@
+if [ "$1" = "remove" ]; then
+	if [ -x "/usr/bin/deb-systemd-helper" ]; then
+		deb-systemd-helper mask #UNITFILES# >/dev/null
+	fi
+fi
+
+if [ "$1" = "purge" ]; then
+	if [ -x "/usr/bin/deb-systemd-helper" ]; then
+		deb-systemd-helper purge #UNITFILES# >/dev/null
+		deb-systemd-helper unmask #UNITFILES# >/dev/null
+	fi
+fi
diff --git a/autoscripts/postrm-systemd-reload-only b/autoscripts/postrm-systemd-reload-only
new file mode 100644
index 0000000..91cd9e8
--- /dev/null
+++ b/autoscripts/postrm-systemd-reload-only
@@ -0,0 +1,3 @@
+if [ -d /run/systemd/system ]; then
+	systemctl --system daemon-reload >/dev/null || true
+fi
diff --git a/autoscripts/prerm-systemd b/autoscripts/prerm-systemd
new file mode 100644
index 0000000..6cc7242
--- /dev/null
+++ b/autoscripts/prerm-systemd
@@ -0,0 +1,3 @@
+if [ -d /run/systemd/system ]; then
+	deb-systemd-invoke stop #UNITFILES# >/dev/null
+fi
diff --git a/autoscripts/prerm-systemd-restart b/autoscripts/prerm-systemd-restart
new file mode 100644
index 0000000..51abb0b
--- /dev/null
+++ b/autoscripts/prerm-systemd-restart
@@ -0,0 +1,3 @@
+if [ -d /run/systemd/system ] && [ "$1" = remove ]; then
+	deb-systemd-invoke stop #UNITFILES# >/dev/null
+fi
diff --git a/dh_systemd_enable b/dh_systemd_enable
new file mode 100755
index 0000000..064adc8
--- /dev/null
+++ b/dh_systemd_enable
@@ -0,0 +1,291 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+dh_systemd_enable - enable/disable systemd unit files
+
+=cut
+
+use strict;
+use Debian::Debhelper::Dh_Lib;
+use File::Find;
+
+=head1 SYNOPSIS
+
+B<dh_systemd_enable> [S<I<debhelper options>>] [B<--no-enable>] [B<--name=>I<name>] [S<I<unit file> ...>]
+
+=head1 DESCRIPTION
+
+B<dh_systemd_enable> is a debhelper program that is responsible for enabling
+and disabling systemd unit files.
+
+In the simple case, it finds all unit files installed by a package (e.g.
+bacula-fd.service) and enables them. It is not necessary that the machine
+actually runs systemd during package installation time, enabling happens on all
+machines in order to be able to switch from sysvinit to systemd and back.
+
+In the complex case, you can call B<dh_systemd_enable> and B<dh_systemd_start>
+manually (by overwriting the debian/rules targets) and specify flags per unit
+file. An example is colord, which ships colord.service, a dbus-activated
+service without an [Install] section. This service file cannot be enabled or
+disabled (a state called "static" by systemd) because it has no
+[Install] section. Therefore, running dh_systemd_enable does not make sense.
+
+For only generating blocks for specific service files, you need to pass them as
+arguments, e.g. B<dh_systemd_enable quota.service> and B<dh_systemd_enable
+--name=quotarpc quotarpc.service>.
+
+=head1 FILES
+
+=over 4
+
+=item debian/I<package>.service
+
+If this exists, it is installed into lib/systemd/system/I<package>.service in
+the package build directory.
+
+=item debian/I<package>.tmpfile
+
+If this exists, it is installed into usr/lib/tmpfiles.d/I<package>.conf in the
+package build directory. (The tmpfiles.d mechanism is currently only used
+by systemd.)
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--no-enable>
+
+Just disable the service(s) on purge, but do not enable them by default.
+
+=item B<--name=>I<name>
+
+Install the service file as I<name.service> instead of the default filename,
+which is the I<package.service>. When this parameter is used,
+B<dh_systemd_enable> looks for and installs files named
+F<debian/package.name.service> instead of the usual F<debian/package.service>.
+
+=back
+
+=head1 NOTES
+
+Note that this command is not idempotent. L<dh_prep(1)> should be called
+between invocations of this command (with the same arguments). Otherwise, it
+may cause multiple instances of the same text to be added to maintainer
+scripts.
+
+Note that B<dh_systemd_enable> should be run before B<dh_installinit>.
+The default sequence in B<dh> does the right thing, this note is only relevant
+when you are calling B<dh_systemd_enable> manually.
+
+=cut
+
+init(options => {
+	"no-enable" => \$dh{NO_ENABLE},
+});
+
+sub contains_install_section {
+	my ($unit_path) = @_;
+	my $fh;
+	if (!open($fh, '<', $unit_path)) {
+		warning("Cannot open($unit_path) for extracting the Also= line(s)");
+		return;
+	}
+	while (my $line = <$fh>) {
+		chomp($line);
+		return 1 if $line =~ /^\s*\[Install\]$/i;
+	}
+	close($fh);
+	return 0;
+}
+
+# PROMISE: DH NOOP WITHOUT tmp(lib/systemd/system) mount path service socket target tmpfile
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+	my $tmpdir = tmpdir($package);
+	my @installed_units;
+	my @units;
+
+	# XXX: This is duplicated in dh_installinit, which is unfortunate.
+	# We do need the service files before running dh_installinit though,
+	# every other solution makes things much worse for all the maintainers.
+
+	# Figure out what filename to install it as.
+	my $script;
+	my $jobfile=$package;
+	if (defined $dh{NAME}) {
+		$jobfile=$script=$dh{NAME};
+	}
+	elsif ($dh{D_FLAG}) {
+		# -d on the command line sets D_FLAG. We will
+		# remove a trailing 'd' from the package name and
+		# use that as the name.
+		$script=$package;
+		if ($script=~m/(.*)d$/) {
+			$jobfile=$script=$1;
+		}
+		else {
+			warning("\"$package\" has no final d' in its name, but -d was specified.");
+		}
+	}
+	elsif ($dh{INIT_SCRIPT}) {
+		$script=$dh{INIT_SCRIPT};
+	}
+	else {
+		$script=$package;
+	}
+
+	my $service=pkgfile($package,"service");
+	if ($service ne '') {
+		my $path="$tmpdir/lib/systemd/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$service,"$path/$script.service");
+	}
+
+	my $template=pkgfile("$package@","service");
+	if ($template ne '') {
+		my $path="$tmpdir/lib/systemd/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$template,"$path/$script at .service");
+	}
+
+	my $target=pkgfile($package,"target");
+	if ($target ne '') {
+		my $path="$tmpdir/lib/systemd/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$target,"$path/$script.target");
+	}
+
+	my $socket=pkgfile($package,"socket");
+	if ($socket ne '') {
+		my $path="$tmpdir/lib/systemd/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$socket,"$path/$script.socket");
+	}
+
+	my $tmpfile=pkgfile($package,"tmpfile");
+	if ($tmpfile ne '') {
+		my $path="$tmpdir/usr/lib/tmpfiles.d";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$tmpfile,"$path/$script.conf");
+	}
+
+	my $mount=pkgfile($package,"mount");
+	if ($mount ne '') {
+		my $path="$tmpdir/usr/lib/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$mount,"$path/$script.mount");
+	}
+
+	my $pathunit=pkgfile($package,"path");
+	if ($pathunit ne '') {
+		my $path="$tmpdir/lib/systemd/system";
+		if (! -d "$path") {
+			doit("install","-d","$path");
+		}
+
+		doit("install","-p","-m644",$pathunit,"$path/$script.path");
+	}
+
+	find({
+		wanted => sub {
+			my $name = $File::Find::name;
+			return unless -f $name;
+			# Skip symbolic links, their only legitimate use is for
+			# adding an alias, e.g. linking smartmontools.service
+			# -> smartd.service.
+			return if -l $name;
+			return unless $name =~ m,^$tmpdir/lib/systemd/system/[^/]+$,;
+			push @installed_units, $name;
+		},
+		no_chdir => 1,
+	}, "${tmpdir}/lib/systemd/system") if -d "${tmpdir}/lib/systemd/system";
+
+	# Handle either only the unit files which were passed as arguments or
+	# all unit files that are installed in this package.
+	my @args = @ARGV > 0 ? @ARGV : @installed_units;
+
+	# support excluding units via -X
+	foreach my $x (@{$dh{EXCLUDE}}) {
+		@args = grep !/(^|\/)$x$/, @args;
+	}
+
+	for my $name (@args) {
+		my $base = basename($name);
+
+		# Try to make the path absolute, so that the user can call
+		# dh_installsystemd bacula-fd.service
+		if ($base eq $name) {
+			# NB: This works because @installed_units contains
+			# files from precisely one directory.
+			my ($full) = grep { basename($_) eq $base } @installed_units;
+			if (defined($full)) {
+				$name = $full;
+			} else {
+				warning(qq|Could not find "$name" in the /lib/systemd/system directory of $package. | .
+					qq|This could be a typo, or using Also= with a service file from another package. | .
+					qq|Please check carefully that this message is harmless.|);
+			}
+		}
+
+		# Skip template service files like e.g. getty at .service.
+		# Enabling, disabling, starting or stopping those services
+		# without specifying the instance (e.g. getty at ttyS0.service) is
+		# not useful.
+		if ($name =~ /\@/) {
+			next;
+		}
+
+		# Skip unit files that don’t have an [Install] section.
+		next unless contains_install_section($name);
+
+		push @units, $name;
+	}
+
+	next if @units == 0;
+
+	my $unitargs = join(" ", sort map { basename($_) } @units);
+	for my $unit (sort @units) {
+		my $base = basename($unit);
+		if ($dh{NO_ENABLE}) {
+			autoscript($package, "postinst", "postinst-systemd-dont-enable", "s/#UNITFILE#/$base/");
+		} else {
+			autoscript($package, "postinst", "postinst-systemd-enable", "s/#UNITFILE#/$base/");
+		}
+	}
+	autoscript($package, "postrm", "postrm-systemd", "s/#UNITFILES#/$unitargs/");
+
+	# init-system-helpers ships deb-systemd-helper which we use in our
+	# autoscripts
+	addsubstvar($package, "misc:Depends", "init-system-helpers (>= 1.18~)");
+}
+
+=head1 SEE ALSO
+
+L<dh_systemd_start(1)>, L<debhelper(7)>
+
+=head1 AUTHORS
+
+pkg-systemd-maintainers at lists.alioth.debian.org
+
+=cut
diff --git a/dh_systemd_start b/dh_systemd_start
new file mode 100755
index 0000000..2aa5ea9
--- /dev/null
+++ b/dh_systemd_start
@@ -0,0 +1,251 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+dh_systemd_start - start/stop/restart systemd unit files
+
+=cut
+
+use strict;
+use Debian::Debhelper::Dh_Lib;
+use File::Find;
+use Cwd qw(getcwd abs_path);
+
+=head1 SYNOPSIS
+
+B<dh_systemd_start> [S<I<debhelper options>>] [B<--restart-after-upgrade>] [B<--no-restart-on-upgrade>] [S<I<unit file> ...>]
+
+=head1 DESCRIPTION
+
+B<dh_systemd_start> is a debhelper program that is responsible for
+starting/stopping or restarting systemd unit files in case no corresponding
+sysv init script is available.
+
+As with B<dh_installinit>, the unit file is stopped before
+upgrades and started afterwards (unless B<--restart-after-upgrade> is
+specified, in which case it will only be restarted after the upgrade).
+This logic is not used when there is a corresponding SysV init script
+because invoke-rc.d performs the stop/start/restart in that case.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--restart-after-upgrade>
+
+Do not stop the unit file until after the package upgrade has been completed.
+This is the default behaviour in compat 10.
+
+In earlier compat levels the default was to stop the unit file in the
+F<prerm>, and start it again in the F<postinst>.
+
+This can be useful for daemons that should not have a possibly long
+downtime during upgrade. But you should make sure that the daemon will not
+get confused by the package being upgraded while it's running before using
+this option.
+
+=item B<--no-restart-after-upgrade>
+
+Undo a previous B<--restart-after-upgrade> (or the default of compat
+10).  If no other options are given, this will cause the service to be
+stopped in the F<prerm> script and started again in the F<postinst>
+script.
+
+=item B<-r>, B<--no-restart-on-upgrade>
+
+Do not stop service on upgrade.
+
+=item B<--no-start>
+
+Do not start the unit file after upgrades and after initial installation (the
+latter is only relevant for services without a corresponding init script).
+
+=back
+
+=head1 NOTES
+
+Note that this command is not idempotent. L<dh_prep(1)> should be called
+between invocations of this command (with the same arguments). Otherwise, it
+may cause multiple instances of the same text to be added to maintainer
+scripts.
+
+Note that B<dh_systemd_start> should be run after B<dh_installinit> so that it
+can detect corresponding SysV init scripts. The default sequence in B<dh> does
+the right thing, this note is only relevant when you are calling
+B<dh_systemd_start> manually.
+
+=cut
+
+$dh{RESTART_AFTER_UPGRADE} = 1 if not compat(10);
+
+init(options => {
+	"r" => \$dh{R_FLAG},
+	"no-restart-on-upgrade" => \$dh{R_FLAG},
+	"no-start" => \$dh{NO_START},
+	"R|restart-after-upgrade!" => \$dh{RESTART_AFTER_UPGRADE},
+	"no-also" => \$dh{NO_ALSO},
+});
+
+# Extracts the Also= or Alias= line(s) from a unit file.
+# In case this produces horribly wrong results, you can pass --no-also, but
+# that should really not be necessary. Please report bugs to
+# pkg-systemd-maintainers.
+sub extract_key {
+	my ($unit_path, $key) = @_;
+	my @values;
+	my $fh;
+
+	if ($dh{NO_ALSO}) {
+		return @values;
+	}
+
+	if (!open($fh, '<', $unit_path)) {
+		warning("Cannot open($unit_path) for extracting the Also= line(s)");
+		return;
+	}
+	while (my $line = <$fh>) {
+		chomp($line);
+
+		# The keys parsed from the unit file below can only have
+		# unit names as values. Since unit names can't have
+		# whitespace in systemd, simply use split and strip any
+		# leading/trailing quotes. See systemd-escape(1) for
+		# examples of valid unit names.
+		if ($line =~ /^\s*$key=(.+)$/i) {
+			for my $value (split(/\s+/, $1)) {
+				$value =~ s/^(["'])(.*)\g1$/$2/;
+				push @values, $value;
+			}
+		}
+	}
+	close($fh);
+	return @values;
+}
+
+
+# PROMISE: DH NOOP WITHOUT tmp(lib/systemd/system)
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+	my $tmpdir = tmpdir($package);
+	my @installed_units;
+	my @units;
+	my %aliases;
+
+	my $oldcwd = getcwd();
+	find({
+		wanted => sub {
+			my $name = $File::Find::name;
+			return unless -f;
+			return unless $name =~ m,^$tmpdir/lib/systemd/system/[^/]+$,;
+			if (-l) {
+				my $target = abs_path(readlink());
+				$target =~ s,^$oldcwd/,,g;
+				$aliases{$target} = [ $_ ];
+			} else {
+				push @installed_units, $name;
+			}
+		},
+	}, "${tmpdir}/lib/systemd/system") if -d "${tmpdir}/lib/systemd/system";
+	chdir($oldcwd);
+
+	# Handle either only the unit files which were passed as arguments or
+	# all unit files that are installed in this package.
+	my @args = @ARGV > 0 ? @ARGV : @installed_units;
+
+	# support excluding units via -X
+	foreach my $x (@{$dh{EXCLUDE}}) {
+		@args = grep !/(^|\/)$x$/, @args;
+	}
+
+	# This hash prevents us from looping forever in the following while loop.
+	# An actual real-world example of such a loop is systemd’s
+	# systemd-readahead-drop.service, which contains
+	# Also=systemd-readahead-collect.service, and that file in turn
+	# contains Also=systemd-readahead-drop.service, thus forming an endless
+	# loop.
+	my %seen;
+
+	# We use while/shift because we push to the list in the body.
+	while (@args) {
+		my $name = shift @args;
+		my $base = basename($name);
+
+		# Try to make the path absolute, so that the user can call
+		# dh_installsystemd bacula-fd.service
+		if ($base eq $name) {
+			# NB: This works because @installed_units contains
+			# files from precisely one directory.
+			my ($full) = grep { basename($_) eq $base } @installed_units;
+			if (defined($full)) {
+				$name = $full;
+			} else {
+				warning(qq|Could not find "$name" in the /lib/systemd/system directory of $package. | .
+					qq|This could be a typo, or using Also= with a service file from another package. | .
+					qq|Please check carefully that this message is harmless.|);
+			}
+		}
+
+		# Skip template service files like e.g. getty at .service.
+		# Enabling, disabling, starting or stopping those services
+		# without specifying the instance (e.g. getty at ttyS0.service) is
+		# not useful.
+		if ($name =~ /\@/) {
+			next;
+		}
+
+		# Handle all unit files specified via Also= explicitly.
+		# This is not necessary for enabling, but for disabling, as we
+		# cannot read the unit file when disabling (it was already
+		# deleted).
+		my @also = grep { !exists($seen{$_}) } extract_key($name, 'Also');
+		$seen{$_} = 1 for @also;
+		@args = (@args, @also);
+
+		push @{$aliases{$name}}, $_ for extract_key($name, 'Alias');
+		my @sysv = grep {
+				my $base = $_;
+				$base =~ s/\.(?:mount|service|socket|target|path)$//g;
+				-f "$tmpdir/etc/init.d/$base"
+			} ($base, @{$aliases{$name}});
+		if (@sysv == 0 && !grep { $_ eq $name } @units) {
+			push @units, $name;
+		}
+	}
+
+	next if @units == 0;
+
+	# The $package and $sed parameters are always the same.
+	# This wrapper function makes the following logic easier to read.
+	my $sd_autoscript = sub {
+		my ($script, $filename) = @_;
+		my $unitargs = join(" ", sort map { basename($_) } @units);
+		autoscript($package, $script, $filename, "s/#UNITFILES#/$unitargs/");
+	};
+
+	if ($dh{RESTART_AFTER_UPGRADE}) {
+		$sd_autoscript->("postinst", "postinst-systemd-restart");
+	} elsif (!$dh{NO_START}) {
+		# We need to stop/start before/after the upgrade.
+		$sd_autoscript->("postinst", "postinst-systemd-start");
+	}
+
+	$sd_autoscript->("postrm", "postrm-systemd-reload-only");
+
+	if ($dh{R_FLAG} || $dh{RESTART_AFTER_UPGRADE}) {
+		# stop service only on remove
+		$sd_autoscript->("prerm", "prerm-systemd-restart");
+	} elsif (!$dh{NO_START}) {
+		# always stop service
+		$sd_autoscript->("prerm", "prerm-systemd");
+	}
+}
+
+=head1 SEE ALSO
+
+L<debhelper(7)>
+
+=head1 AUTHORS
+
+pkg-systemd-maintainers at lists.alioth.debian.org
+
+=cut

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debhelper/debhelper.git




More information about the debhelper-devel mailing list