Adding Runlevels
From ArchWiki
First method
To create another runlevel in Arch:
# cd /etc # cp rc.multi rc.multi5 # sed -i "s/DAEMONS/DAEMONS5/g" /etc/rc.multi5
Then add it to /etc/inittab by changing:
rm:2345:wait:/etc/rc.multi
to
rm:234:wait:/etc/rc.multi rm:5:wait:/etc/rc.multi5
Then put daemons into DAEMONS5=() in your /etc/rc.conf.
This setup will not be clobbered by any further system updates, though it might be nice if someone packaged it up, with /etc/rc.multi5 and an /etc/inittab.example
Another way, without adding any symlink
With a simple modification on /etc/rc.multi, runlevels can be simply added by adding a new DAEMONS line in /etc/rc.conf. (Check out the files at [1])
Here's the patch:
--- rc.multi 2008-06-22 23:58:29.000000000 +0200
+++ rc.multi.new 2008-06-23 00:14:05.000000000 +0200
@@ -11,8 +11,25 @@
# Load sysctl variables if sysctl.conf is present
[ -r /etc/sysctl.conf ] && /sbin/sysctl -q -p &>/dev/null
+# Load the appropriate DAEMONS array according to runlevel specified in the kernel boot cmdline
+RUNLEVEL=""
+FINAL_DAEMONS=()
+
+for param in `cat /proc/cmdline`; do
+ param_rl=`echo $param | grep ^runlevel`
+ if [ ! "$param_rl" = "" ]; then
+ RUNLEVEL=`echo $param_rl | sed -r -e "s#runlevel=(.+)#\1#"`
+ fi
+done;
+
+if [ "${RUNLEVEL}" = "" ]; then
+ eval FINAL_DAEMONS=(${DAEMONS[@]})
+else
+ eval FINAL_DAEMONS=(\${DAEMONS_${RUNLEVEL}[@]})
+ if [ "${#FINAL_DAEMONS[@]}" = "0" ]; then
+ eval FINAL_DAEMONS=(${DAEMONS[@]})
+ fi
+fi
+
# Start daemons
-for daemon in "${DAEMONS[@]}"; do
+for daemon in "${FINAL_DAEMONS[@]}"; do
if [ "$daemon" = "${daemon#!}" ]; then
if [ "$daemon" = "${daemon#@}" ]; then
/etc/rc.d/$daemon start
Now, to add a runlevel, add a new array in /etc/rc.conf (in this example I named it FOO):
DAEMONS_FOO=( ...whatever... )
and to run the system with this runlevel, simply add runlevel=FOO to your boot arguments in LILO or GRUB.