[Pkg-sysvinit-devel] Bug#339955: debian-policy: do not require /etc/init.d/*.sh scripts to be sourced
kel at otaku42.de
Mon Feb 2 19:13:58 UTC 2009
Hi Debian Policy maintainers,
It is the opinion of myself and Petter Reinholdtsen, maintainers of the
sysvinit package, that the last sentence of §9.3.1 of policy is no longer
relevant and should be removed:
"""Also, if the script name ends in .sh, the script will be sourced in
runlevel S rather than being run in a forked subprocess, but will be
explicitly run by sh in all other runlevels."""
The reasons for which it should be removed are:
* /etc/init.d/rc has not supported this for an extremely long time, probably
never, because the system would be unbootable due to .sh scripts calling
'exit' [0, 1].
* the reason why .sh scripts should be sourced is not clear. A popular
theory is that it was an optimisation to avoid forking shells and reduce
boot time . It may have been an interface to allow scripts to "set
an environment variable which would propogate through to subsequent
These days, sourcing .sh scripts instead of executing them is not so
much of an optimisation; we have a lightweight shell dash which can be
used as /bin/sh and has been measured to improve boot time . startpar
has been hacked on to work better with the Debian boot system and we hope
to use it for parrallel execution of initscripts in the future without
contradicting policy (it a C program which uses execlp() to execute
Passing enviroment variables around by sourcing .sh scripts is not a
supported interface: .sh scripts have not been sourced for years
and nobody has cared.
* it would be nice to clean up /etc/init.d/rc in the absence of this
requirement. Trying to support the sourcing of /etc/init.d/*.sh
scripts makes the code much uglier to maintain.
More information about the Pkg-sysvinit-devel