summaryrefslogtreecommitdiffstats
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/todo/boot-sequencing.mdwn50
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