Jump to content
Compatible Support Forums
Sign in to follow this  
news

The future of the boot system in Debian

Recommended Posts

-----BEGIN PGP SIGNED MESSAGE-----

Hash: SHA1

 

The future of the boot system in Debian

=======================================

 

Over the last few years, the boot system in Debian has progressively

deteriorated due to changes in the Linux kernel which make the kernel

more and more event based. For example, the kernel and its drivers no

longer block all processing while detecting disks, network interfaces

and other hardware, making the once trusty old boot system in Debian

increasingly fragile. During the current boot sequence device files in

/dev/ are often missing when fsck or mount are looking for them, or

the network is not available when the boot system tries to mount NFS

entries because network interfaces were slow to initialise, or audio

devices are missing when audio settings should be set. The problem is

fundamental to the way we boot Debian today - sequentially, and a

solution needs to address this fundamental problem. We believe the

solution is to migrate to an event based boot system.

 

In addition to this, there are long lasting problems with the boot

sequence of the existing init.d scripts, for some combination of

packages. The boot sequence is wrong in these cases, and to solve it

one needs to change the sequence numbers of all the immediate forward

and reverse dependencies of the init.d script in question - and their

forward and reverse dependencies and so forth until the boot sequence

is correct. In some cases the change needs to happen to several

scripts in different packages at the same time, which is impossible

with the old way of ordering init.d scripts. Previously the ordering

was done by asking the package maintainers to guess on and update

sequence numbers, a process that tended to introduce new problems and

took a long time to be solved properly. The solution to this problem

is to change how we order boot scripts. Change it from static sequence

numbers to calculate the boot sequence using dependency information

provided in the init.d scripts themselves. Since 2009-07-27 this is

the default in Debian unstable, and it will be the way init.d scripts

are ordered in Squeeze. Switching to a dependency based boot

sequencing allows us to ensure its correctness, detect and fix

dependency loops, and in general fix a set of bugs in the distribution

that have been very hard to fix before. Other solved problems with

the new system are incorrect stop sequences (the default should have

been S20/K80, not S20/K20), and the misleading runlevels 0 and 6,

where start symlinks are called with 'stop' as the argument to the

scripts. All of these problems are solved when Debian now moves to

dependency based boot sequencing.

 

It will take longer to solve the fundamental problem. It requires a

rewrite of how we handle the boot, and can not be done by just

modifying the boot sequence framework.

 

Before explaining the current plan, some background information. The

current boot system can be seen as consisting of three different parts:

 

1. The implementation of /sbin/init, reading /etc/inittab and

starting the script implementing part 2 (/etc/init.d/rc). This is

normally done using the sysvinit package, but other replacements

are available, like initng and upstart.

 

2. The implementation of /etc/init.d/rc, which is responsible for

calling the init.d scripts in the correct sequence. This is

normally done using the sysv-rc package. An alternative is the

file-rc package, which uses a file /etc/runlevel.conf instead of

symlinks in /etc/rc?.d/ to decide what to execute and in which

order.

 

3. The individual init.d scripts, taking care of the tasks that need

to be done during boot. The basic framework is provided by the

initscripts package, and the rest is handled by individual

packages like udev, netbase, ifupdown, apache, etc. :) There are

approximately 850 packages with init.d scripts in Debian unstable.

 

Part 2 (sysv-rc) and 3 have been changed to use dependency based boot

sequencing. This was a release goal for Lenny and the continued work

is a release goal for Squeeze. The init.d scripts have seen review

with regard to dependency based ordering for more than 3 years. New

installs will use dependency based boot sequencing. For upgrades, a

critical debconf question will give the default option to migrate if

testing find no issues with the existing scripts or for now keep the

legacy boot ordering.

 

To solve the fundamental problem, the plan is to replace /sbin/init

with an implementation that is able to handle kernel events. It will

allow us to modify the boot system for the early boot to become event

based, while keeping the existing boot stuff working. We could rewrite

sysvinit to become event based, or have a look at the existing boot

systems that handle kernel events. After checking the options and the

systems used in other distributions, upstart seems like the most

promising candidate. It is used by Ubuntu and Fedora at the moment,

and solves the problem in a backwards compatible way. The plan is to

change upstart to actually use /etc/inittab, to ease the switch

between sysvinit and upstart. We will also change the init.d script

handling to treat upstart jobs as init.d scripts, to provide an

alternative for architectures lacking upstart support. These changes

should make it transparent for the users which package provides

/sbin/init, and thus make it easier to migrate from sysvinit to

upstart.

 

When /sbin/init is changed to an event based framework, the next step

is to rewrite the early boot system to use these events when

available, and behave the traditional way when there are no

events. When this step is finished the fundamental problem will be

solved, and the boot will be robust and should work correctly even in

edge cases with slow device buses.

 

The planned time frame for this is to replace /sbin/init with upstart

for Squeeze, and see if we manage to change the very early boot to

become event based in time for Squeeze too, fixing the most pressing

of the current boot problems (failing fsck and mount with USB

disks). For Squeeze+1, more of the early boot system will be

converted, to handle more of the existing problems.

 

According to the Linux Software Base specification, all LSB compliant

distributions must handle packages with init.d scripts. As Debian

plans to continue to follow the LSB, this mean the boot system needs

to continue to handle init.d scripts. Because of this, we need a boot

system in debian that is both event based for the early boot, and

which also calls init.d scripts at the appropriate time.

 

References:

http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot

 

Petter Reinholdtsen, Kel Modderman, Armin Berres

 

-----BEGIN PGP SIGNATURE-----

Version: GnuPG v1.4.6 (GNU/Linux)

 

iD8DBQFKoklo20zMSyow1ykRAkvfAJ4+kofKHP+sYOQndZlBhe/mC7nTvQCdE8af

YZEQ67miKPOCeMbC0Ephx1w=

=bA+k

-----END PGP SIGNATURE-----

 

 

--

To UNSUBSCRIBE, email to debian-devel-announce-REQUEST ( -at -) lists.debian.org

with a subject of "unsubscribe". Trouble? Contact listmaster ( -at -) lists.debian.org

 

 

 

Share this post


Link to post

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×