Create the directories and master files

We need to start by creating a few extra directories that are used by the boot scripts. Create these directories by running:



root:~# cd /etc
root:etc# mkdir rc0.d rc1.d rc2.d rc3.d
root:etc# mkdir rc4.d rc5.d rc6.d init.d rcS.d

The first main bootscript is the /etc/init.d/rc script. Create a new file /etc/init.d/rc containing the following:



#!/bin/sh
# Begin /etc/init.d/rc
#
# By Jason Pearce  - [email protected]
#

# Un-comment the following for debugging.
# debug=echo

#
# Start script or program.

startup() {
case "$1" in
*.sh)
$debug sh "$@"
;;
*)
$debug "$@"
;;
esac
}   

# Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
trap ":" INT QUIT TSTP

# Set onlcr to avoid staircase effect.
stty onlcr 0>&1

# Now find out what the current and what the previous runlevel are.
runlevel=$RUNLEVEL
# Get first argument. Set new runlevel to this argument.

[ "$1" != "" ] && runlevel=$1
if [ "$runlevel" = "" ]
then
echo "Usage: $0 <runlevel>" >&2
exit 1
fi

previous=$PREVLEVEL
[ "$previous" = "" ] && previous=N

export runlevel previous

# Is there an rc directory for this new runlevel?

if [ -d /etc/rc$runlevel.d ]
then
# First, run the KILL scripts for this runlevel.
if [ $previous != N ]
then
for i in /etc/rc$runlevel.d/K*
do
[ ! -f $i ] && continue

suffix=${i#/etc/rc$runlevel.d/K[0-9][0-9]}
previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix

# Stop the service if there is a start script
# in the previous run level.
[ ! -f $previous_start ] && continue

startup $i stop
done
fi

# Now run the START scripts for this runlevel.
for i in /etc/rc$runlevel.d/S*
do
[ ! -f $i ] && continue

if [ $previous != N ]
then
# Find start script in previous runlevel and
# stop script in this runlevel.
suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]}
stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix
previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix

# If there is a start script in the previous
# level
# and _no_ stop script in this level, we don't
# have to re-start the service.
[ -f $previous_start ] && [ ! -f $stop ] && continue
fi

case "$runlevel" in
0|6)
startup $i stop
;;
*)
startup $i start
;;
esac
done
fi

# End /etc/init.d/rc

The second main bootscript is the rcS script. Create a new file /etc/init.d/rcS containing the following:



#!/bin/sh
# Begin /etc/init.d/rcS

runlevel=S
prevlevel=N
umask 022
export runlevel prevlevel

trap ":" INT QUIT TSTP

for i in /etc/rcS.d/S??*
do
[ ! -f  "$i" ] && continue;
$i start
done

# End /etc/init.d/rcS