Project Contact Files

                    System V Hierarchical InitScript
          (c) 2005 Laurent Vivier ,LaurentVivier@wanadoo.fr
                     Released under GPL, version 2


	System V Hierarchical InitScript allows to parallelize the start of 
services in a given System V runlevel by defining dependencies between them.
The goal is to reduce the time to boot by executing several scripts at the 
same time.

System V defines different runlevels. The default runlevel is defined in 
/etc/inittab. For each runlevel, /etc/inittab defines command to execute.

For instance, on debian, default runlevel is 2.
/etc/inittab defines for runlevel 2 to execute the command "/etc/init.d/rc 2".
This command executes alphabetically and sequentially all scripts in the 
directory /etc/rc2.d/.

This project proposes to install a new script, Hrc, to replace rc. This new 
script allows to start parallely all services. To be able to do that, we create 
a new directory, /etc/Hrc2.d/, with the same scripts as in rc2.d but with some 
files to defines dependencies between services and to create a "HIERARCHY" 
between them.
A script, create_Hrc, creates automatically Hrc2.d from rc2.d. In this step 
each script depends on the previous one in the alphabetical order and thus the 
start is sequential.
Once you checked the sequential Hrc always works, you can edit manually 
dependencies files to define hierarchy between scripts and to parallelize them.

Example:

# mkdir /var/boot
# echo "USE_VT100=yes" > /etc/default/Hrc
# cp etc/init.d/Hrc etc/init.d/HrcS etc/init.d/Hrc_functions /etc/init.d/
# patch /etc/init.d/rc and /etc/init.d/rcS with rc.patch and rcS.patch
# ls /etc/rc2.d/
K11anacron   S20inetd              S20timidity     S89atd
S10sysklogd  S20irda               S20xfs          S89cron
S11klogd     S20lpd                S20xfstt        S99gdm
S14ppp       S20makedev            S20xprint       S99kdm
S18portmap   S20nfs-kernel-server  S21nfs-common   S99rmnologin
S20apmd      S20pbbuttonsd         S25bluez-utils  S99stop-bootlogd
S20dbus-1    S20pcmcia             S80noflushd     S99xdm
S20exim      S20ssh                S89anacron
# ./create_Hrc S
# ./create_Hrc 2
# ls /etc/Hrc2.d/
K11anacron.d   S20inetd.d              S20timidity.d     S89atd.d
S10sysklogd.d  S20irda.d               S20xfs.d          S89cron.d
S11klogd.d     S20lpd.d                S20xfstt.d        S99gdm.d
S14ppp.d       S20makedev.d            S20xprint.d       S99kdm.d
S18portmap.d   S20nfs-kernel-server.d  S21nfs-common.d   S99rmnologin.d
S20apmd.d      S20pbbuttonsd.d         S25bluez-utils.d  S99stop-bootlogd.d
S20dbus-1.d    S20pcmcia.d             S80noflushd.d     S99xdm.d
S20exim.d      S20ssh.d   
---- check sequential boot always works
#shutdown -r 0

Now you can define dependencies and parallelize (see below for my configuration)

Once you have defined dependencies, you should check it with:

# check_Hrc S
# check_Hrc 2

My configuration is:

# find /etc/Hrc2.d/ -name required -print -exec cat {} \;
/etc/Hrc2.d/S10sysklogd.d/required

/etc/Hrc2.d/S11klogd.d/required

/etc/Hrc2.d/S14ppp.d/required
sysklogd.d klogd
/etc/Hrc2.d/S18portmap.d/required
sysklogd
/etc/Hrc2.d/S20apmd.d/required
sysklogd
/etc/Hrc2.d/S20dbus-1.d/required
sysklogd
/etc/Hrc2.d/S20exim.d/required
sysklogd
/etc/Hrc2.d/S20inetd.d/required
sysklogd
/etc/Hrc2.d/S20irda.d/required
sysklogd
/etc/Hrc2.d/S20lpd.d/required
sysklogd irda
/etc/Hrc2.d/S20makedev.d/required

/etc/Hrc2.d/S20nfs-kernel-server.d/required
sysklogd
/etc/Hrc2.d/S20pbbuttonsd.d/required
sysklogd
/etc/Hrc2.d/S20pcmcia.d/required
sysklogd
/etc/Hrc2.d/S20ssh.d/required
sysklogd
/etc/Hrc2.d/S20timidity.d/required
sysklogd
/etc/Hrc2.d/S20xfs.d/required
sysklogd
/etc/Hrc2.d/S20xfstt.d/required
xfs
/etc/Hrc2.d/S20xprint.d/required
xfstt
/etc/Hrc2.d/S21nfs-common.d/required
nfs-kernel-server
/etc/Hrc2.d/S25bluez-utils.d/required
pcmcia
/etc/Hrc2.d/S80noflushd.d/required
pcmcia
/etc/Hrc2.d/S89anacron.d/required
noflushd
/etc/Hrc2.d/S89atd.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd
/etc/Hrc2.d/S89cron.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd
/etc/Hrc2.d/S99gdm.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd atd cron
/etc/Hrc2.d/S99kdm.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd atd cron
/etc/Hrc2.d/S99rmnologin.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd atd cron
/etc/Hrc2.d/S99stop-bootlogd.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd atd cron
/etc/Hrc2.d/S99xdm.d/required
sysklogd klogd ppp portmap apmd dbus-1 exim inetd irda lpd makedev nfs-kernel-server pbbuttonsd pcmcia ssh timidity xfs xfstt xprint nfs-common bluez-utils noflushd atd cron
/etc/Hrc2.d/K11anacron.d/required
xdm