diff options
-rw-r--r-- | dev/todo/boot-sequencing.mdwn | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/dev/todo/boot-sequencing.mdwn b/dev/todo/boot-sequencing.mdwn new file mode 100644 index 0000000..d09cc7e --- /dev/null +++ b/dev/todo/boot-sequencing.mdwn @@ -0,0 +1,50 @@ +[[!meta field="title" param="Boot Sequencing"]] + +Currently, service init scripts are provided by the monolithic `initscripts` +binary package. These init scripts are executed in the lexicographic order of +the symbolic links matching `/etc/rc.d/S*` that target them. The names of these +symbolic links are currently hardcoded in [the `build` makefile][bf-build] of +the `basefiles` source package. This monolithic packaging and hardcoding of +link names is a temporary and poor technical solution that doesn't scale with +the number and selection of services that can be installed on a system. Init +scripts should instead be provided by the packages that provide the relevant +system services. The order in which init scripts are executed should be +determined by dynamic boot sequencing based on inter-service dependency +metadata. + +This boot sequencing can be done when the system boots or after a new system +service is installed. For reference, NetBSD [uses a program called +"rcorder"][rcorder-doc] to determine a boot sequence at boot time. Many +GNU/Linux distributions follow (to some degree) the Linux Standard Base (LSB) +specification, which defines ["Comment Conventions" for dependency +metadata][lsb-initscrcomconv] and [a method for installing sequentially-named +symbolic links][lsb-initsrcinstrm]. Conforming implementations perform boot +sequencing at the time of service installation. Because boot sequencing at boot +time can slow down system booting, it is better to perform boot sequencing at +install time. + +Thus, generally speaking, the solution to be adopted in this system is to make +packages that provide system services also include the necessary init scripts +(installed in `/etc/init.d`), to include inter-service dependency metadata in +init scripts, and to use a tool at the time of service package installation to +generate sequentially-named symoblic links in `/etc/rc.d`. + +An obvious boot sequencing tool is ["insserv"][insserv] maintained by Werner +Fink and used by Debian and openSUSE. However, this C program (in compliance +with the LSB) assumes the use of runlevels. This operating system uses the init +daemon of BusyBox, which [doesn't support runlevels][bb-init.c]. Therefore, +we'll need to either modify insserv to work without runlevels or write our own +tool for installing symbolic links to init scripts. + +Additionally, we need to decide how completely we'll conform, if at all, with +the LSB in this area. + +Hopefully, this can get done by September 2012. + + +[bf-build]: http://git.os.pehjota.net/pkg/basefiles.git/tree/build?id=0ae24516#n43 +[rcorder-doc]: http://www.netbsd.org/docs/guide/en/chap-rc.html#chap-rc-rcorder +[lsb-initscrcomconv]: http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html +[lsb-initsrcinstrm]: http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initsrcinstrm.html +[insserv]: http://svn.savannah.nongnu.org/viewvc/insserv/trunk/?root=sysvinit +[bb-init.c]: http://git.busybox.net/busybox/tree/init/init.c?id=3da46c81#n1221 |