[Pkg-sysvinit-devel] Bug#695751: depending on a script that depends on $all (including by not having LSB headers) creates loop

roucaries bastien roucaries.bastien+debian at gmail.com
Thu Nov 6 18:29:52 UTC 2014


On Thu, Nov 6, 2014 at 5:32 PM, Lucas Nussbaum <lucas at debian.org> wrote:
> Hi,
>
> On 06/11/14 at 09:17 +0100, Petter Reinholdtsen wrote:
>> Thank you for looking at this issue again. :)
>>
>> [Lucas Nussbaum]
>> > There are two relevant lintian checks:
>> > https://lintian.debian.org/tags/init.d-script-missing-lsb-section.html
>> > https://lintian.debian.org/tags/init.d-script-depends-on-all-virtual-facility.html
>>
>> This last lintian check have a strange description:
>>
>> > The given init script declares a dependency on the virtual facility "$all".
>> >
>> > This virtual facility is reserved for local scripts.
>> >
>> > Moreover, using $all in more than one init.d script is totally broken.
>>
>> The $all virtual facility is not reserved for local scripts (who came
>> up with that idea?  It is not from me, who introduced $all to Debian).
>> And $all is only broken with systemd, as it will ignore the setting.
>> With sysvinit/startpar/insserv, the value causes scripts to be placed
>> first/last in the boot/shutdown sequence.  The implementation is
>> slightly confusing, but it is not totally broken.
>>
>> The test is good, but as I believe we need a way to scripts to get
>> started last during boot and first during shutdown, I believe the
>> proper fix is for systemd to be fixed to implement support for $all
>> instead of pretending that the feature is useless and reserved for
>> local scripts.
>
> Bastien added it in
> http://anonscm.debian.org/cgit/lintian/lintian.git/commit/?id=f8a60da5ba1f30b5d7d96fd846a3f2cb9d6dcd32

The problem is that semantic is not well defined: if they are more
than one $all script we do not know that is the last to execute. At
least a local admin could shoot in its own foot but for general
packaging it is more problematic.

For instance for initscripts 2.88dsf-57 it could race between
 etc/init.d/rmnologin required-start and some local script and lead to
some strange behavior.

Bootsplash could also say boot is finished whereas local script or
etc/init.d/watchdog required-start is going to be initialised (this is
an esthetic race but nevertheless a race).

BTW this bug was not open by a systemd supporter but by someone that
was hit by a race between a local script and a packaged script...

You could add some clarification about this race.

About the different warnings:
- bootchart*/plymouth : should run even after local script
- bootlogd: run after local script and bootchart/plymouth
- cardstories/dhcp-probe/monit/xy*: after network
- readahead-fedora: after network mount
- reniced: early in boot
- dtc-* after or before network
- cloud-init/debian-edu-install
- torque-scheduler: after some torque jobs
- watchdog: really early

So only only bootchart/plymouth and bootlogd could be for me
overriden. But even in this case we are hit by $all order limitation

Bastien














> Ccing him.
>
> Lucas



More information about the Pkg-sysvinit-devel mailing list