control: tags -1 + patch Hi,
On Sun, Dec 14, 2014 at 08:11:13AM +0100, Jörg Frings-Fürst wrote: > On package sane-utils I use > > - /etc/init.d/saned > - /lib/systemd/system/[email protected] (with Alias=saned) > - /lib/system/system/saned.socket As far as I can see you do not use this layout anymore, right? At least there is no more systemd-no-service-for-init-script warning for sane? > When you are installing a systemd service file alongside of your SysV init > script, you should name it correspondingly. E.g. for /etc/init.d/apache2 the > corresponding service file should be named > /lib/systemd/system/apache2.service. > This way, systemd will automatically prefer the native service file over the > SysV init script and use that to start the service. If the names do not match, > say your service file is provided by upstream and named NetworkManager.service > and your existing SysV init script is called /etc/init.d/network-manager, you > can either rename one of the two or you simply use an Alias=. This instruction > tells systemctl enable to create a symlink. Augment the service file like > this: The alias parsing in lintian was slightly broken, as it did not strip the .service from the Alias entry (which is required as per spec [1]). Because of this the matching of the init.d-name and the alias was broken. The attached patch fixes this behaviour. However I am not sure if that would actually fix it for the old [email protected] as you write you had "saned" in the alias field? Or was it "saned.service"? Regards Evgeni [1] http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Alias=
>From 5f32595c52838ef9d21046229bd7a79960a02c6e Mon Sep 17 00:00:00 2001 From: Evgeni Golov <[email protected]> Date: Sat, 19 Dec 2015 00:23:17 +0100 Subject: [PATCH] remove .service from systemd service aliases when parsing .service files, we read the Aliases so we can match them against the init.d name, however, we forgot to strip the .service file extension [1] as we do with the main unit name. Closes: #773087 [1] http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Alias= --- checks/systemd.pm | 1 + t/tests/systemd-general/debian/debian/rules | 4 + .../debian/debian/systemd-aliasd.init | 157 +++++++++++++++++++++ t/tests/systemd-general/debian/debian/test.service | 1 + 4 files changed, 163 insertions(+) create mode 100644 t/tests/systemd-general/debian/debian/systemd-aliasd.init diff --git a/checks/systemd.pm b/checks/systemd.pm index e59510e..aef5c32 100644 --- a/checks/systemd.pm +++ b/checks/systemd.pm @@ -164,6 +164,7 @@ sub get_systemd_service_names { = extract_service_file_values($info, $file, 'Install', 'Alias', 1); for my $alias (@aliases) { + $alias =~ s/\.service$//; $safe_add_service->($alias, $file); } } diff --git a/t/tests/systemd-general/debian/debian/rules b/t/tests/systemd-general/debian/debian/rules index ea39c0e..fade512 100644 --- a/t/tests/systemd-general/debian/debian/rules +++ b/t/tests/systemd-general/debian/debian/rules @@ -19,3 +19,7 @@ override_dh_install: override_dh_fixperms: dh_fixperms chmod -x $(INITD_DIR)/README + +override_dh_installinit: + dh_installinit + dh_installinit --name systemd-aliasd diff --git a/t/tests/systemd-general/debian/debian/systemd-aliasd.init b/t/tests/systemd-general/debian/debian/systemd-aliasd.init new file mode 100644 index 0000000..775eb1a --- /dev/null +++ b/t/tests/systemd-general/debian/debian/systemd-aliasd.init @@ -0,0 +1,157 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: systemd-aliasd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Example initscript +# Description: This file should be used to construct scripts to be +# placed in /etc/init.d. +### END INIT INFO + +# Author: Foo Bar <[email protected]> +# +# Please remove the "Author" lines above and replace them +# with your own name if you copy and modify this script. + +# Do NOT "set -e" + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="Description of the service" +NAME=daemonexecutablename +DAEMON=/usr/sbin/$NAME +DAEMON_ARGS="--options args" +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +. /lib/lsb/init-functionsh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + #reload|force-reload) + # + # If do_reload() is not implemented then leave this commented out + # and leave 'force-reload' as an alias for 'restart'. + # + #log_daemon_msg "Reloading $DESC" "$NAME" + #do_reload + #log_end_msg $? + #;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/t/tests/systemd-general/debian/debian/test.service b/t/tests/systemd-general/debian/debian/test.service index a327823..54611f4 100644 --- a/t/tests/systemd-general/debian/debian/test.service +++ b/t/tests/systemd-general/debian/debian/test.service @@ -8,3 +8,4 @@ ExecStart=/usr/bin/test [Install] WantedBy=multi-user.target +Alias=systemd-aliasd.service -- 2.6.4

