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