Re: [PATCH] debian: Replace SysV init script with native systemd unit

Jan Kiszka <[email protected]> Thu, 30 Jul 2026 19:21:17 +0200
Newsgroups dev.linux.lists.xenomai
Message-ID <[email protected]>
On 30.07.26 17:47, Clara Kowalsky wrote:
> Debian trixie warns when relying on the generated compatibility unit for
> /etc/init.d/xenomai.
> 
> This addresses
> 
> systemd-sysv-generator[1423]: SysV service '/etc/init.d/xenomai' lacks a native systemd unit file, automatically generating a unit file for compatibility.
> systemd-sysv-generator[1423]: Please update package to include a native systemd unit file.
> systemd-sysv-generator[1423]: ⚠ This compatibility logic is deprecated, expect removal soon. ⚠
> 
> See #54.
> 
> Signed-off-by: Clara Kowalsky <[email protected]>
> ---
>  debian/libxenomai1.xenomai.init    | 36 ------------------------------
>  debian/libxenomai1.xenomai.service | 13 +++++++++++
>  debian/rules                       |  2 +-
>  3 files changed, 14 insertions(+), 37 deletions(-)
>  delete mode 100644 debian/libxenomai1.xenomai.init
>  create mode 100644 debian/libxenomai1.xenomai.service
> 
> diff --git a/debian/libxenomai1.xenomai.init b/debian/libxenomai1.xenomai.init
> deleted file mode 100644
> index 811fe25fd..000000000
> --- a/debian/libxenomai1.xenomai.init
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -#!/bin/sh -e
> -### BEGIN INIT INFO
> -# Provides:          xenomai
> -# Required-Start:    mountkernfs
> -# Required-Stop:
> -# Default-Start:     2 3 4 5
> -# Default-Stop:      0 1 6
> -# Short-Description: Set Xenomai group
> -### END INIT INFO
> -
> -GROUP=xenomai
> -INITNAME=/etc/init.d/xenomai
> -FILENAME=/sys/module/xenomai/parameters/allowed_group
> -GID=$(getent group $GROUP | cut -d: -f3)
> -
> -test -e $FILENAME || exit 0
> -test -n "$GID" || exit 0
> -
> -case "$1" in
> -  start)
> -        echo "$GID" > $FILENAME
> -        ;;
> -  stop)
> -        echo "-1" > $FILENAME
> -        ;;
> -  restart|force-reload)
> -        $0 start
> -        ;;
> -  *)
> -        echo "Usage: $INITNAME {start|stop|restart|force-reload}"
> -        exit 1
> -        ;;
> -esac
> -
> -exit 0
> -
> diff --git a/debian/libxenomai1.xenomai.service b/debian/libxenomai1.xenomai.service
> new file mode 100644
> index 000000000..4494dc00c
> --- /dev/null
> +++ b/debian/libxenomai1.xenomai.service
> @@ -0,0 +1,13 @@
> +[Unit]
> +Description=Set Xenomai group
> +ConditionPathExists=/sys/module/xenomai/parameters/allowed_group
> +After=systemd-modules-load.service
> +
> +[Service]
> +Type=oneshot
> +RemainAfterExit=yes
> +ExecStart=/bin/sh -ec 'gid=$(/usr/bin/getent group xenomai | /usr/bin/cut -d: -f3); [ -n "$gid" ] && echo "$gid" > /sys/module/xenomai/parameters/allowed_group || true'
> +ExecStop=/bin/sh -ec 'echo -1 > /sys/module/xenomai/parameters/allowed_group || true'

Why "|| true"? Can't we detect the condition when we should not write
(like in the original script) and give the write the chance to properly
fail the unit? You may even use a script to deduplicate that part of the
logic.

BTW, how did you test this?

Jan

> +
> +[Install]
> +WantedBy=multi-user.target
> diff --git a/debian/rules b/debian/rules
> index 9e56de260..dd52cbaf0 100755
> --- a/debian/rules
> +++ b/debian/rules
> @@ -103,7 +103,7 @@ binary-indep: build install
>  binary-arch: build install
>  	dh_testdir -a
>  	dh_testroot -a
> -	dh_installinit -a --name=xenomai
> +	dh_installsystemd -a --name=xenomai
>  	dh_installman -a
>  	dh_installdocs -a -A README
>  	dh_link -a


-- 
Siemens AG, Foundational Technologies
Linux Expert Center