Hi Joey, Thanks for the quick review.
Joey Hess <jo...@debian.org> writes: > The only questionable part seems to be the direct use of of > /etc/systemd/system/. Is there a consensus that this is the right thing > to do? I see symlinks being dropped in there by many packages > currently. I talked to mbiebl and Mithrandir about it and we’ve come to the conclusion that we want to ship the files in /lib instead (for consistency with upstream packages and other distributions) and maybe work on UCF support for this location instead of shipping the service files in /etc. I have updated the patch and attached the new version. -- Best regards, Michael
>From 836c4369f15d641648a7e26d9a12ac4d6d28941b Mon Sep 17 00:00:00 2001 From: Michael Stapelberg <stapelb...@debian.org> Date: Sun, 29 Jul 2012 19:46:53 +0200 Subject: [PATCH] Support systemd in dh_installinit and postinst/postrm --- autoscripts/postinst-init | 6 +++++ autoscripts/postinst-init-nostart | 6 +++++ autoscripts/postinst-init-restart | 6 +++++ autoscripts/postrm-init | 7 ++++++ dh_installinit | 47 +++++++++++++++++++++++++++++++++---- 5 files changed, 67 insertions(+), 5 deletions(-) diff --git a/autoscripts/postinst-init b/autoscripts/postinst-init index 2430b2c..f5371ce 100644 --- a/autoscripts/postinst-init +++ b/autoscripts/postinst-init @@ -1,4 +1,10 @@ if [ -x "/etc/init.d/#SCRIPT#" ]; then + # In case this system is running systemd, we need to ensure that all + # necessary tmpfiles (if any) are created before starting. + if [ -d /sys/fs/cgroup/systemd ] ; then + systemd-tmpfiles --create >/dev/null || true + fi + update-rc.d #SCRIPT# #INITPARMS# >/dev/null invoke-rc.d #SCRIPT# start || #ERROR_HANDLER# fi diff --git a/autoscripts/postinst-init-nostart b/autoscripts/postinst-init-nostart index 7a1bd5e..ec6bdbd 100644 --- a/autoscripts/postinst-init-nostart +++ b/autoscripts/postinst-init-nostart @@ -1,3 +1,9 @@ if [ -x "/etc/init.d/#SCRIPT#" ]; then + # In case this system is running systemd, we need to ensure that all + # necessary tmpfiles (if any) are created before starting. + if [ -d /sys/fs/cgroup/systemd ] ; then + systemd-tmpfiles --create >/dev/null || true + fi + update-rc.d #SCRIPT# #INITPARMS# >/dev/null || #ERROR_HANDLER# fi diff --git a/autoscripts/postinst-init-restart b/autoscripts/postinst-init-restart index 35bba20..862f9cc 100644 --- a/autoscripts/postinst-init-restart +++ b/autoscripts/postinst-init-restart @@ -1,4 +1,10 @@ if [ -x "/etc/init.d/#SCRIPT#" ]; then + # In case this system is running systemd, we need to ensure that all + # necessary tmpfiles (if any) are created before starting. + if [ -d /sys/fs/cgroup/systemd ] ; then + systemd-tmpfiles --create >/dev/null || true + fi + update-rc.d #SCRIPT# #INITPARMS# >/dev/null if [ -n "$2" ]; then _dh_action=restart diff --git a/autoscripts/postrm-init b/autoscripts/postrm-init index 1c29298..61dcfc5 100644 --- a/autoscripts/postrm-init +++ b/autoscripts/postrm-init @@ -1,3 +1,10 @@ if [ "$1" = "purge" ] ; then update-rc.d #SCRIPT# remove >/dev/null fi + + +# In case this system is running systemd, we make systemd reload the unit files +# to pick up changes. +if [ -d /sys/fs/cgroup/systemd ] ; then + systemctl --system daemon-reload >/dev/null || true +fi diff --git a/dh_installinit b/dh_installinit index 9c8c155..65e143a 100755 --- a/dh_installinit +++ b/dh_installinit @@ -2,7 +2,7 @@ =head1 NAME -dh_installinit - install init scripts and/or upstart jobs into package build directories +dh_installinit - install init scripts and/or upstart jobs and/or systemd services into package build directories =cut @@ -42,6 +42,16 @@ build directory. If this exists, it is installed into etc/init/I<package>.conf in the package build directory. +=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. + =back =head1 OPTIONS @@ -55,9 +65,10 @@ Do not modify F<postinst>/F<postrm>/F<prerm> scripts. =item B<-o>, B<--onlyscripts> Only modify F<postinst>/F<postrm>/F<prerm> scripts, do not actually install any init -script, default files, or upstart job. May be useful if the init script or -upstart job is shipped and/or installed by upstream in a way that doesn't -make it easy to let B<dh_installinit> find it. +script, default files, upstart job or systemd service file. May be useful if +the init script, upstart job or systemd service file is shipped and/or +installed by upstream in a way that doesn't make it easy to let +B<dh_installinit> find it. =item B<-R>, B<--restart-after-upgrade> @@ -171,6 +182,26 @@ foreach my $package (@{$dh{DOPACKAGES}}) { $script=$package; } + my $service=pkgfile($package,"service"); + if ($service ne '' && ! $dh{ONLYSCRIPTS}) { + my $path="$tmp/lib/systemd/system"; + if (! -d "$path") { + doit("install","-d","$path"); + } + + doit("install","-p","-m644",$service,"$path/$script.service"); + } + + my $tmpfile=pkgfile($package,"tmpfile"); + if ($tmpfile ne '' && ! $dh{ONLYSCRIPTS}) { + my $path="$tmp/usr/lib/tmpfiles.d"; + if (! -d "$path") { + doit("install","-d","$path"); + } + + doit("install","-p","-m644",$tmpfile,"$path/$script.conf"); + } + my $job=pkgfile($package,"upstart"); if ($job ne '' && ! $dh{ONLYSCRIPTS}) { @@ -203,7 +234,11 @@ foreach my $package (@{$dh{DOPACKAGES}}) { error("Can't use --init-script with an upstart job"); } - if ($job ne '' || $init ne '' || $dh{ONLYSCRIPTS}) { + # NB: The case that only $tmpfile is set makes no sense. The + # tmpfiles.d(5) mechanism is only available when using systemd (at + # least currently), so there has to be an init script which does the + # same thing for sysvinit. + if ($service ne '' || $job ne '' || $init ne '' || $dh{ONLYSCRIPTS}) { # This is set by the -u "foo" command line switch, it's # the parameters to pass to update-rc.d. If not set, # we have to say "defaults". @@ -265,4 +300,6 @@ Joey Hess <jo...@debian.org> Steve Langasek <steve.langa...@canonical.com> +Michael Stapelberg <stapelb...@debian.org> + =cut -- 1.7.10.4