Bug#827376: init-system-helpers: invoke-rc.d unconditionally uses /sbin/runlevel without depending on a package providing it

Andreas Beckmann anbe at debian.org
Wed Jun 15 15:49:00 BST 2016


On 2016-06-15 15:15, Michael Biebl wrote:
> We recently changed "init" to no longer be essential. This means
> /sbin/runlevel is no longer guaranteed to be around.
> In case of invoke-rc.d it's probably best to have a sensible fallback if
> runlevel can't be found.
> 
> That said, we probably have more places where those binaries provided by
> systemd-sysv (halt, telinit, runlevel etc) are used. So there might be
> some more fallout from that change.
> 
> Any idea how we can *identify* users of
> https://packages.debian.org/sid/alpha/systemd-sysv/filelist

In this list of binaries probably only runlevel is really interesting
and maybe telinit. I don't expect the other commands to be used from
maintainer scripts (or inside chroots at all).

/sbin/halt
/sbin/init
/sbin/poweroff
/sbin/reboot
/sbin/runlevel
/sbin/shutdown
/sbin/telinit


We could use piuparts :-)

dpkg-divert runlevel and telinit (and maybe everything else, too) and
replace them all with a script that, if called, checks if the divertee
exists and execs it. Otherwise throw a big fat warning in a way that
cannot be ignored by the package (writing to a piuparts-internal logfile
inside the chroot) and make the piuparts test fail afterwards.
Will create false positives on scripts doing
if [ -x /sbin/$cmd ]; then
  $cmd
else
  do_something --without $cmd
fi

That should be manageable with two new custom scripts, thereafter rerun
sid, experimental, jessie2stretch ...
But invoke-rc.d needs to be fixed first, otherwise (nearly) everything
will fail. And fixing invoke-rc.d might produce false positives
globally, so nothing gained.


Or maybe runlevel should just find a new home and stay essential. That's
something that probably should be available (and independent from the
actual init system being used).

The codesearch results for "telinit" seem manageable for manual checking
  https://codesearch.debian.net/results/telinit
while "runlevel" is just a common word, and seldom a command.


Andreas




More information about the Pkg-systemd-maintainers mailing list