aboutsummaryrefslogtreecommitdiffstats
path: root/lsb-bootscripts/etc
diff options
context:
space:
mode:
authorDJ Lucas <dj@linuxfromscratch.org>2011-05-15 03:17:07 +0000
committerDJ Lucas <dj@linuxfromscratch.org>2011-05-15 03:17:07 +0000
commit63a2c2d454e05553cb83f3656108838f46975ba6 (patch)
tree1a025d83023b0dcd87259c0b78818b3e2c338692 /lsb-bootscripts/etc
parentdcae1d7df3deb6ae9a24b90d83f66feff49c93b0 (diff)
Moved BOOK/bootscripts/contrib/lsb-v3 to BOOK/lsb-bootscripts.
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@9538 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
Diffstat (limited to 'lsb-bootscripts/etc')
-rw-r--r--lsb-bootscripts/etc/default/createfiles28
-rw-r--r--lsb-bootscripts/etc/default/modules18
-rw-r--r--lsb-bootscripts/etc/default/rc44
-rw-r--r--lsb-bootscripts/etc/default/rc.site77
-rw-r--r--lsb-bootscripts/etc/init.d/checkfs103
-rw-r--r--lsb-bootscripts/etc/init.d/cleanfs106
-rw-r--r--lsb-bootscripts/etc/init.d/console96
-rw-r--r--lsb-bootscripts/etc/init.d/halt30
-rw-r--r--lsb-bootscripts/etc/init.d/lfs-functions214
-rw-r--r--lsb-bootscripts/etc/init.d/localnet81
-rw-r--r--lsb-bootscripts/etc/init.d/modules97
-rw-r--r--lsb-bootscripts/etc/init.d/mountfs59
-rw-r--r--lsb-bootscripts/etc/init.d/mountvirtfs46
-rw-r--r--lsb-bootscripts/etc/init.d/network70
-rw-r--r--lsb-bootscripts/etc/init.d/rc201
-rw-r--r--lsb-bootscripts/etc/init.d/reboot32
-rw-r--r--lsb-bootscripts/etc/init.d/sendsignals54
-rw-r--r--lsb-bootscripts/etc/init.d/setclock54
-rw-r--r--lsb-bootscripts/etc/init.d/swap55
-rw-r--r--lsb-bootscripts/etc/init.d/sysctl39
-rw-r--r--lsb-bootscripts/etc/init.d/sysklogd69
-rw-r--r--lsb-bootscripts/etc/init.d/template90
-rw-r--r--lsb-bootscripts/etc/init.d/udev89
-rw-r--r--lsb-bootscripts/etc/init.d/udev_retry49
-rw-r--r--lsb-bootscripts/etc/inittab26
25 files changed, 1827 insertions, 0 deletions
diff --git a/lsb-bootscripts/etc/default/createfiles b/lsb-bootscripts/etc/default/createfiles
new file mode 100644
index 000000000..c4c2428cb
--- /dev/null
+++ b/lsb-bootscripts/etc/default/createfiles
@@ -0,0 +1,28 @@
+########################################################################
+# Begin /etc/default/createfiles
+#
+# Description : Createfiles script config file
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# if type is equal to "file" or "dir"
+# <filename> <type> <permissions> <user> <group>
+# if type is equal to "dev"
+# <filename> <type> <permissions> <user> <group> <devtype> <major> <minor>
+#
+# <filename> is the name of the file which is to be created
+# <type> is either file, dir, or dev.
+# file creates a new file
+# dir creates a new directory
+# dev creates a new device
+# <devtype> is either block, char or pipe
+# block creates a block device
+# char creates a character deivce
+# pipe creates a pipe, this will ignore the <major> and <minor> fields
+# <major> and <minor> are the major and minor numbers used for the device.
+########################################################################
+
+# End /etc/sysconfig/createfiles
diff --git a/lsb-bootscripts/etc/default/modules b/lsb-bootscripts/etc/default/modules
new file mode 100644
index 000000000..40d1894c9
--- /dev/null
+++ b/lsb-bootscripts/etc/default/modules
@@ -0,0 +1,18 @@
+########################################################################
+# Begin /etc/default/modules
+#
+# Description : Module auto-loading configuration
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# <module> [<arg1> <arg2> ...]
+#
+# Each module should be on it's own line, and any options that you want
+# passed to the module should follow it. The line deliminator is either
+# a space or a tab.
+########################################################################
+
+# End /etc/default/modules
diff --git a/lsb-bootscripts/etc/default/rc b/lsb-bootscripts/etc/default/rc
new file mode 100644
index 000000000..96bd476d9
--- /dev/null
+++ b/lsb-bootscripts/etc/default/rc
@@ -0,0 +1,44 @@
+# Begin /etc/default/rc
+
+# Author: DJ Lucas - dj@linuxfromscratch.org
+# Version: 1.0 LSB V.3.1
+
+# Global variable inherited by initscripts are in caps
+# Local variables for the rc script are in lowercase
+
+# Source site specific rc configuration
+. /etc/default/rc.site
+
+# This sets default terminal options.
+# stty sane - this has been removed as nobody recalls
+# the reason for it in the first place - if no problems arize,
+# then it will be removed completely at a later date.
+
+# Setup default values for the environment
+umask 022
+PATH="/bin:/sbin"
+
+# Find current screen size
+if [ -z "${COLUMNS}" ]; then
+ COLUMNS=$(stty size)
+ COLUMNS=${COLUMNS##* }
+fi
+
+# When using remote connections, such as a serial port, stty size returns 0
+if [ "${COLUMNS}" = "0" ]; then
+ COLUMNS=80
+fi
+
+## Measurements for positioning result messages
+COL=$((${COLUMNS} - 8))
+WCOL=$((${COL} - 2))
+
+# Set Cursur Position Commands, used via echo -e
+SET_COL="\\033[${COL}G" # at the $COL char
+SET_WCOL="\\033[${WCOL}G" # at the $WCOL char
+CURS_UP="\\033[1A\\033[0G" # Up one line, at the 0'th char
+
+# Export the environment variables so they are inherited by the scripts
+export PATH SET_COL SET_WCOL CURS_UP BOOTLOG_ENAB
+
+# End /etc/default/rc
diff --git a/lsb-bootscripts/etc/default/rc.site b/lsb-bootscripts/etc/default/rc.site
new file mode 100644
index 000000000..f617c16cb
--- /dev/null
+++ b/lsb-bootscripts/etc/default/rc.site
@@ -0,0 +1,77 @@
+# Set base directory information
+RC_BASE="/etc"
+RC_FUNCTIONS="${RC_BASE}/init.d/lfs-functions"
+
+# Location of network device scripts and config files
+NETWORK_DEVICES="/etc/network"
+
+# Bootlogging (requires a tempfs mount)
+BOOTLOG_ENAB="yes"
+
+# Hostname
+HOSTNAME=<lfs>
+
+# System time variables
+UTC=1
+CLOCKPARAMS=
+
+# Manual input is not appropriate on remote systems. Define what happens when
+# an error is encountered that interupts the boot/shutdown proceess
+FAILURE_ACTION="read ENTER"
+
+# Distro Information
+DISTRO="Linux From Scratch" # The distro name
+DISTRO_CONTACT="lfs-dev@linuxfromscratch.org" # Bug report address
+DISTRO_MINI="lfs" # Short name used in filenames for distro config
+
+# Define custom colors used in messages printed to the screen
+BRACKET="\\033[1;34m" # Blue
+FAILURE="\\033[1;31m" # Red
+INFO="\\033[1;36m" # Cyan
+NORMAL="\\033[0;39m" # Grey
+SUCCESS="\\033[1;32m" # Green
+WARNING="\\033[1;33m" # Yellow
+
+# Prefix boot messages for easier reading on framebuffer consoles
+PREFIX_SUCCESS=" ${SUCCESS}*${NORMAL} "
+PREFIX_WARNING="${WARNING}**${NORMAL} "
+PREFIX_FAILURE="${FAILURE}***${NORMAL}"
+
+# Export varialbles so that they are inherited by the initscripts
+export RC_BASE RC_FUNCTIONS NETWORK_DEVICES BOOTLOG_ENAB
+export HOSTNAME UTC CLOCKPARAMS FAILURE_ACTION
+export DISTRO DISTRO_CONTACT DISTRO_MINI
+export BRACKET FAILURE INFO NORMAL SUCCESS WARNING
+export PREFIX_SUCCESS PREFIX_WARNING PREFIX_FAILURE
+
+# Interactive startup
+iprompt="yes" # Wether to display the interactive boot promp
+itime="2" # The ammount of time (in seconds) to display the prompt
+dlen="29" # The total length of the distro welcome string
+ilen="38" # The total length of the interactive message
+welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}"
+i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup"
+
+# Error message displayed when a script's exit value is not zero
+print_error_msg()
+{
+ # ${link} and ${error_value} are defined by the rc script
+ echo -e "${FAILURE}FAILURE: You should not be reading this error message."
+ echo -e ""
+ echo -e -n "${FAILURE}It means that an unforseen error took place in"
+ echo -e -n "${INFO} ${link}"
+ echo -e "${FAILURE},"
+ echo -e "${FAILURE}which exited with a return value of ${error_value}."
+ echo -e ""
+ echo -e -n "${FAILURE}If you are able to track this error down to a bug"
+ echo -e "${FAILURE}in one of the files"
+ echo -e -n "provided by ${INFO}${DISTRO}${FAILURE}, "
+ echo -e -n "${FAILURE}please be so kind to inform us at "
+ echo -e "${INFO}${DISTRO_CONTACT}${FAILURE}.${NORMAL}"
+ echo -e ""
+ echo -e "${INFO}Press Enter to continue..."
+ echo -e "${NORMAL}"
+ $FAILURE_ACTION
+}
+
+
diff --git a/lsb-bootscripts/etc/init.d/checkfs b/lsb-bootscripts/etc/init.d/checkfs
new file mode 100644
index 000000000..1e3efed9b
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/checkfs
@@ -0,0 +1,103 @@
+#!/bin/sh
+# Begin /etc/init.d/checkfs
+
+### BEGIN INIT INFO
+# Provides: checkfs
+# Required-Start: udev swap
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Checks local filesystems before mounting.
+# Description: Checks local filesystmes before mounting.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ if [ -f /fastboot ]; then
+ echo "${INFO}/fastboot found!"
+ log_success_msg "Will not perform file system checks as requested."
+ exit 0
+ fi
+
+ mount -n -o remount,ro / >/dev/null
+ if [ ${?} -ne 0 ]
+ then
+ log_failure_msg "Mounting root file system in read-only mode"
+ echo -e "${FAILURE}FAILURE:\n"
+ echo -e -n "${FAILURE}Cannot check root filesystem because it "
+ echo -e "${FAILURE}could not be mounted"
+ echo -e "${FAILURE}in read-only mode.\n\n"
+ echo -e -n "${FAILURE}After you press Enter, this system will be "
+ echo -e "${FAILURE}halted and powered off.\n"
+ echo -e "${INFO}Press enter to continue...${NORMAL}"
+ $FAILURE_ACTION
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ if [ -f /forcefsck ]
+ then
+ echo "${INFO}/forcefsck found!"
+ log_success_msg "${INFO}Forcing file system checks as requested."
+ options="-f"
+ else
+ options=""
+ fi
+
+ # Note: -a option used to be -p; but this fails e.g.
+ # on fsck.minix
+ fsck ${options} -a -A -C -T
+ error_value=${?}
+
+ if [ "${error_value}" -eq 0 ]
+ then
+ log_success_msg "Checking file systems..."
+ elif [ "${error_value}" -eq 1 ]
+ then
+ log_warning_msg "Checking file systems..."
+ echo -e "${WARNING}WARNING:\n"
+ echo -e "${WARNING}File system errors were found and have been"
+ echo -e "${WARNING}corrected. You may want to double-check that"
+ echo -e "${WARNING}everything was fixed properly.${NORMAL}"
+ elif [ "${error_value}" -eq 2 -o "${error_value}" -eq 3 ]; then
+ log_warning_msg "Checking file systems..."
+ echo -e "${WARNING}WARNING:\n"
+ echo -e "${WARNING}File system errors were found and have been been"
+ echo -e "${WARNING}corrected, but the nature of the errors require"
+ echo -e "${WARNING}this system to be rebooted.\n"
+ echo -e "After you press enter, this system will be rebooted.\n"
+ echo -e "${INFO}Press Enter to continue...${NORMAL}"
+ $FAILURE_ACTION
+ reboot -f
+ elif [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
+ log_failure_msg "Checking file systems..."
+ echo -e "${FAILURE}FAILURE:\n"
+ echo -e "${FAILURE}File system errors were encountered that could"
+ echo -e "${FAILURE}not be fixed automatically. This system cannot"
+ echo -e "${FAILURE}continue to boot and will therefore be halted"
+ echo -e "${FAILURE}until those errors are fixed manually by a"
+ echo -e "${FAILURE}System Administrator.\n"
+ echo -e "${FAILURE}After you press Enter, this system will be"
+ echo -e "${FAILURE}halted and powered off.\n"
+ echo -e "${INFO}Press Enter to continue...${NORMAL}"
+ $FAILURE_ACTION
+ /etc/rc.d/init.d/halt stop
+ elif [ "${error_value}" -ge 16 ]; then
+ log_failure_msg "Checking file systems..."
+ echo -e "${FAILURE}FAILURE:\n"
+ echo -e "${FAILURE}Unexpected Failure running fsck. Exited with error"
+ echo -e "${FAILURE}code: ${error_value}.${NORMAL}"
+ exit ${error_value}
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/checkfs
diff --git a/lsb-bootscripts/etc/init.d/cleanfs b/lsb-bootscripts/etc/init.d/cleanfs
new file mode 100644
index 000000000..2e71456ee
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/cleanfs
@@ -0,0 +1,106 @@
+#!/bin/sh
+# Begin /etc/init.d/cleanfs
+
+### BEGIN INIT INFO
+# Provides: cleanfs
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Cleans temporary directories early in the boot process.
+# Description: Cleans temporary directories /var/run, /var/lock, and
+# /tmp. cleanfs also creates /var/run/utmp and any files
+# defined in /etc/default/createfiles.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Function to create files/directory on boot.
+create_files()
+{
+ # Read in the configuration file.
+ exec 9>&0 < /etc/default/createfiles
+ while read name type perm usr grp dtype maj min junk
+ do
+ # Ignore comments and blank lines.
+ case "${name}" in
+ ""|\#*) continue ;;
+ esac
+
+ # Ignore existing files.
+ if [ ! -e "${name}" ]
+ then
+ # Create stuff based on its type.
+ case "${type}" in
+ dir)
+ mkdir "${name}"
+ ;;
+ file)
+ :> "${name}"
+ ;;
+ dev)
+ case "${dtype}" in
+ char)
+ mknod "${name}" c ${maj} ${min}
+ ;;
+ block)
+ mknod "${name}" b ${maj} ${min}
+ ;;
+ pipe)
+ mknod "${name}" p
+ ;;
+ *)
+ echo -e -n "\n${WARNING}Unknown device type: ${dtype}"
+ echo -e "${NORMAL}"
+ ;;
+ esac
+ ;;
+ *)
+ echo -e "\n${WARNING}Unknown type: ${type}${NORMAL}"
+ continue
+ ;;
+ esac
+
+ # Set up the permissions, too.
+ chown ${usr}:${grp} "${name}"
+ chmod ${perm} "${name}"
+ fi
+ done
+ exec 0>&9 9>&-
+}
+
+case "${1}" in
+ start)
+ message="Cleaning file systems: "
+
+ message="${message}${INFO} /tmp"
+ find /tmp -xdev -mindepth 1 ! -name lost+found \
+ -delete || failed=1
+
+ > /var/run/utmp
+ if grep -q '^utmp:' /etc/group ; then
+ chmod 664 /var/run/utmp
+ chgrp utmp /var/run/utmp
+ fi
+
+ (exit ${failed})
+ evaluate_retval standard
+
+ if egrep -qv '^(#|$)' /etc/default/createfiles 2>/dev/null
+ then
+ message="Creating files and directories..."
+ create_files
+ evaluate_retval standard
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/cleanfs
+
diff --git a/lsb-bootscripts/etc/init.d/console b/lsb-bootscripts/etc/init.d/console
new file mode 100644
index 000000000..45c87b6dd
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/console
@@ -0,0 +1,96 @@
+#!/bin/sh
+# Begin $rc_base/init.d/console
+
+### BEGIN INIT INFO
+# Provides: console
+# Required-Start:
+# Should-Start: $local_fs
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Sets up a localised console.
+# Description: Sets up fonts and language settings for the user's
+# local as defined by /etc/default/console.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Setting up Linux console..."
+
+# Native English speakers probably don't have /etc/default/console at all
+if [ -f /etc/default/console ]
+then
+ . /etc/default/console
+fi
+
+is_true() {
+ [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ]
+}
+
+failed=0
+
+case "${1}" in
+ start)
+ # There should be no bogus failures below this line!
+
+ # Figure out if a framebuffer console is used
+ [ -d /sys/class/graphics/fb0 ] && USE_FB=1 || USE_FB=0
+
+ # Figure out the command to set the console into the
+ # desired mode
+ is_true "${UNICODE}" &&
+ MODE_COMMAND="echo -en '\033%G' && kbd_mode -u" ||
+ MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
+
+ # On framebuffer consoles, font has to be set for each vt in
+ # UTF-8 mode. This doesn't hurt in non-UTF-8 mode also.
+
+ ! is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ MODE_COMMAND="${MODE_COMMAND} && setfont ${FONT}"
+
+ # Apply that command to all consoles mentioned in
+ # /etc/inittab. Important: in the UTF-8 mode this should
+ # happen before setfont, otherwise a kernel bug will
+ # show up and the unicode map of the font will not be
+ # used.
+ # FIXME: Fedora Core also initializes two spare consoles
+ # - do we want that?
+
+ for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab |
+ grep -o '\btty[[:digit:]]*\b'`
+ do
+ openvt -f -w -c ${TTY#tty} -- \
+ /bin/sh -c "${MODE_COMMAND}" || failed=1
+ done
+
+ # Set the font (if not already set above) and the keymap
+ is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ setfont $FONT ||
+ failed=1
+ [ -z "${KEYMAP}" ] ||
+ loadkeys ${KEYMAP} >/dev/null 2>&1 ||
+ failed=1
+ [ -z "${KEYMAP_CORRECTIONS}" ] ||
+ loadkeys ${KEYMAP_CORRECTIONS} >/dev/null 2>&1 ||
+ failed=1
+
+ # Convert the keymap from $LEGACY_CHARSET to UTF-8
+ [ -z "$LEGACY_CHARSET" ] ||
+ dumpkeys -c "$LEGACY_CHARSET" |
+ loadkeys -u >/dev/null 2>&1 ||
+ failed=1
+
+ # If any of the commands above failed, the trap at the
+ # top would set $failed to 1
+ ( exit $failed )
+ evaluate_retval standard
+ ;;
+ *)
+ echo $"Usage:" "${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/console
diff --git a/lsb-bootscripts/etc/init.d/halt b/lsb-bootscripts/etc/init.d/halt
new file mode 100644
index 000000000..cdcd90778
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/halt
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Begin $RC_BASE/init.d/halt
+
+### BEGIN INIT INFO
+# Provides: halt
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: 0
+# Default-Stop:
+# Short-Description: Halts the system.
+# Description: Halts the System.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ log_success_msg "Halting System..."
+ halt -d -f -i -p
+ ;;
+ *)
+ echo "Usage: {stop}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/halt
diff --git a/lsb-bootscripts/etc/init.d/lfs-functions b/lsb-bootscripts/etc/init.d/lfs-functions
new file mode 100644
index 000000000..b0fef4c29
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/lfs-functions
@@ -0,0 +1,214 @@
+# Begin /etc/init.d/lfs-functions
+# Provides LFS specific functions for LSB style bootscripts
+
+################################# chkstat() ###################################
+# chk_stat checks the status of a script by checking for both a binary file #
+# to execute, and if set, a config file that may be needed for the program #
+# to run successfully. The calling script will exit with a return value of 5 #
+# if the binary does not exist, and a value of 6 if the needed config file is #
+# unavailable as per LSB requirements. This function accepts zero, one, or #
+# two string arguments. If arguments are passed, the first must be a bin #
+# file. If a second argument is passed, it is interpreted as the config #
+# file. Optionally, zero arguments can be passed if BIN_FILE, and optinally #
+# CONFIG_FILE are set in the calling script. #
+###############################################################################
+chk_stat()
+{
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ if [ -z "${2}" ]; then
+ CONFIG_FILE=""
+ else
+ CONFIG_FILE="${2}"
+ fi
+ elif [ -z "${BIN_FILE}" ]; then
+ echo "Usage: 'chk_stat BIN_FILE CONFIG_FILE'"
+ exit 1 # Generic Error
+ fi
+
+ if [ ! -e "${BIN_FILE}" ]; then
+ log_failure_msg "${BIN_FILE} not installed" &&
+ exit 5
+ fi
+
+ if [ ! -z "${CONFIG_FILE}" ]; then
+ if [ ! -e "${CONFIG_FILE}" ]; then
+ log_failure_msg "${CONFIG_FILE} does not exist" &&
+ exit 6
+ fi
+ fi
+}
+
+################################ loadproc() ###################################
+# loadproc is just a wraper to start_daemon for simple scripts, which will #
+# require no arguments if $BIN_FILE is set. #
+###############################################################################
+loadproc()
+{
+ start_daemon "${BIN_FILE}" "${@}"
+}
+
+################################ endproc() ####################################
+# endproc, like loadproc, is just a wraper to killproc for simplicity and is #
+# dependent on $BIN_FILE being set. #
+###############################################################################
+endproc()
+{
+ killproc "${BIN_FILE}" "${@}"
+}
+
+############################### statusproc() ##################################
+# statusproc checks the status of a particular binary and displays the #
+# appropriate message (running or not running) and exits on the return value #
+# of pidofproc. This function accepts two string arguments or zero arguments #
+# if BIN_FILE and MESSAGE are set, else it requires the bin file as the first #
+# argument, and the message as the second. Both must be enclosed in quotes. #
+###############################################################################
+statusproc()
+{
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ MESSAGE="${2}"
+ elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
+ echo "Usage: 'statusproc BIN_FILE MESSAGE'"
+ exit 1 # Generic Error
+ fi
+
+ pidlist=`pidofproc "${BIN_FILE}"`
+ STATUS=$?
+ echo "Checking ${MESSAGE} status:"
+ if [ "${STATUS}" -eq "0" ]; then
+ log_success_msg "Running with PID(s) ${pidlist}"
+ else
+ log_warning_msg "Not running!"
+ fi
+
+ return "${STATUS}"
+}
+
+############################### reloadproc() ##################################
+# reloadproc sends a HUP signal to the running program (relaod configuration) #
+# It optionally, using the -force switch, checks the status of a particular #
+# program and starts it if it is not already running. This function accepts #
+# one optional switch (must be the first argument), and either two, or zero #
+# string arguments. If BIN_FILE and MESSAGE are set in the script's #
+# environment, it will use those values, else it requires the bin file as #
+# the first argument (following -force if used), and the message as the #
+# second. Both must be enclosed in quotes. If the force option is used, it #
+# follows the LSB definition of 'force-reload' - the program is started if #
+# not already running. #
+###############################################################################
+reloadproc()
+{
+ local force="0"
+ if [ "${#}" -gt "0" -a "${1}" = "-force" ]; then
+ force="1"
+ shift 1
+ fi
+
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ MESSAGE="${2}"
+ elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
+ echo "Usage: 'reloadproc BIN_FILE MESSAGE'"
+ exit 1 # Generic Error
+ fi
+
+
+
+}
+
+############################## evaluate_retval() ###############################
+# evaluate_retval requires that you pass exactly one evaluation parameter of #
+# (start, stop, other) based on the previous action that is being evaluated. #
+# This function is intended for use with start_daemon and killproc to #
+# interpret the LSB exit codes properly, othewise the checks only for success #
+# or failure. #
+################################################################################
+evaluate_retval()
+{
+ local error_value="${?}"
+
+ # Handle LSB defined return values
+ case "${1}" in
+
+ start)
+ case "${error_value}" in
+ 0)
+ log_success_msg "Starting ${MESSAGE} "
+ return "${error_value}"
+ ;;
+ 2)
+ log_failure_msg "Starting ${MESSAGE} Error: Invalid argument!"
+ return "${error_value}"
+ ;;
+ 5)
+ log_failure_msg "Starting ${MESSAGE} Error: Not available!"
+ return "${error_value}"
+ ;;
+ *)
+ log_failure_msg "Starting ${MESSAGE} Error: General failure!"
+ return "${error_value}"
+ ;;
+ esac
+ ;;
+
+ stop)
+ case "${error_value}" in
+ 0)
+ log_success_msg "Stopping ${MESSAGE} "
+ return "${error_value}"
+ ;;
+ 2)
+ log_failure_msg "Stopping ${MESSAGE} Error: Invalid argument!"
+ return "${error_value}"
+ ;;
+ 5)
+ log_failure_msg "Stopping ${MESSAGE} Error: Not available!"
+ return "${error_value}"
+ ;;
+ 7)
+ log_warning_msg "Stopping ${MESSAGE} Warning: Not running!"
+ return "${error_value}"
+ ;;
+ *)
+ log_failure_msg "Stopping ${MESSAGE} Error: General failure!"
+ return "${error_value}"
+ ;;
+ esac
+ ;;
+
+ force-reload)
+ message="Forcefully reloading "
+ ;;
+
+ reload)
+ message="Reloading "
+ ;;
+
+ restart)
+ message="Restarting "
+ ;;
+
+ try-restart)
+ message="Trying restart "
+ ;;
+
+ standard)
+ # $message or $MESSAGE must be set, but not both in order
+ # to use the 'standard' target.
+ ;;
+ esac
+
+ # Print messages for the generic force-reload, reload, restart,
+ # and try-restart targets
+ if [ "${error_value}" -eq "0" ]
+ then
+ log_success_msg "${message}${MESSAGE} "
+ return "${error_value}"
+ else
+ log_failure_msg "${message}${MESSAGE} "
+ return "${error_value}"
+ fi
+}
+
diff --git a/lsb-bootscripts/etc/init.d/localnet b/lsb-bootscripts/etc/init.d/localnet
new file mode 100644
index 000000000..322bb8749
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/localnet
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Begin /etc/init.d/localnet
+
+### BEGIN INIT INFO
+# Provides: localnet
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: Starts the local network.
+# Description: Sets the hostname of the machine and starts the
+# loopback interface.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ ip addr add 127.0.0.1/8 label lo dev lo
+ ip link set lo up
+ if [ "${?}" -eq "0" ]
+ then
+ log_success_msg "Bringing up the loopback interface..."
+ else
+ log_failure_msg "Bringing up the loopback interface..."
+ fi
+
+ hostname "${HOSTNAME}"
+ if [ "${?}" -eq "0" ]
+ then
+ log_success_msg "Setting hostname to ${HOSTNAME}..."
+ else
+ log_failure_msg "Setting hostname to ${HOSTNAME}..."
+ fi
+
+ ;;
+
+ stop)
+ ip link set lo down
+ if [ "${?}" -eq "0" ]
+ then
+ log_success_msg "Bringing down the loopback interface..."
+ else
+ log_failure_msg "Bringing down the loopback interface..."
+ fi
+
+ ;;
+
+ restart)
+ ip link set lo down
+ retval="${?}"
+ sleep 1
+ ip addr add 127.0.0.1/8 label lo dev lo
+ retval=$(( "${retval}" + "${?}" ))
+ ip link set lo up
+ retval=$(( "${retval}" + "${?}" ))
+ hostname "${HOSTNAME}"
+ retval=$(( "${retval}" + "${?}" ))
+ if [ "${retval}" -eq "0" ]
+ then
+ log_success_msg "Restarting local network..."
+ else
+ log_failure_msg "Restarting local network..."
+ fi
+ ;;
+
+ status)
+ log_success_msg "Hostname is: ${INFO}$(hostname)${NORMAL}"
+ ip link show lo
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/localnet
diff --git a/lsb-bootscripts/etc/init.d/modules b/lsb-bootscripts/etc/init.d/modules
new file mode 100644
index 000000000..18febfbc0
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/modules
@@ -0,0 +1,97 @@
+#!/bin/sh
+# Begin /etc/init.d/modules
+
+### BEGIN INIT INFO
+# Provides: modules
+# Required-Start: mountvirtfs sysctl
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Loads required modules.
+# Description: Loads modules listed in /etc/default/modules.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Assure that the kernel has module support.
+[ -e /proc/ksyms -o -e /proc/modules ] || exit 0
+
+case "${1}" in
+ start)
+
+ # Exit if there's no modules file or there are no
+ # valid entries
+ [ -r /etc/default/modules ] &&
+ egrep -qv '^($|#)' /etc/default/modules ||
+ exit 0
+
+ # If proc is mounted, find the current kernel
+ # message level
+ if [ -f /proc/sys/kernel/printk ]; then
+ prev_msg=`cat /proc/sys/kernel/printk | \
+ sed 'l 1' | sed -n '2~0p' | \
+ sed 's/\\\//'`
+ else
+ prev_msg="6"
+ fi
+
+ # Now set the message level to 1 so not to make too
+ # much noise when loading modules
+ dmesg -n 1
+
+ # Only try to load modules if the user has actually given us
+ # some modules to load.
+ if egrep -qv '^(#|$)' /etc/default/modules 2>/dev/null
+ then
+
+ # Read in the configuration file.
+ exec 9>&0 < /etc/default/modules
+
+ message="${INFO}Loading modules:"
+
+ while read module args
+ do
+ # Ignore comments and blank lines.
+ case "${module}" in
+ ""|\#*) continue ;;
+ esac
+
+ # Attempt to load the module, making
+ # sure to pass any arguments provided.
+ modprobe ${module} ${args} > /dev/null
+
+ # Print the module name if successful,
+ # otherwise take note.
+ if [ ${?} -eq 0 ]; then
+ message="${message}${NORMAL} ${module}"
+ else
+ failedmod="${failedmod} ${module}"
+ fi
+ done
+
+ # Print a message about successfully loaded
+ # modules on the correct line.
+ log_success_msg "${message}"
+
+ # Print a failure message with a list of any
+ # modules that may have failed to load.
+ if [ "${failedmod}" ]; then
+ log_failure_msg "${FAILURE}Failed to load modules:${failedmod}"
+ fi
+
+ exec 0>&9 9>&-
+
+ fi
+ # Set the kernel message level back to it's previous value.
+ dmesg -n "${prev_msg}"
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/modules
diff --git a/lsb-bootscripts/etc/init.d/mountfs b/lsb-bootscripts/etc/init.d/mountfs
new file mode 100644
index 000000000..562db546a
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/mountfs
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Begin /etc/init.d/mountfs
+
+### BEGIN INIT INFO
+# Provides: $local_fs
+# Required-Start: udev checkfs
+# Should-Start:
+# Required-Stop: swap
+# Should-Stop:
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: Mounts/unmounts local filesystems defined in /etc/fstab.
+# Description: Remounts root filesystem read/write and mounts all
+# remaining local filesystems defined in /etc/fstab on
+# start. Remounts root filesystem read-only and unmounts
+# remaining filesystems on stop.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Remounting root file system in read-write mode..."
+ mount -n -o remount,rw / >/dev/null
+ evaluate_retval standard
+
+ # Remove fsck-related file system watermarks.
+ rm -f /fastboot /forcefsck
+
+ message="Recording existing mounts in /etc/mtab..."
+ > /etc/mtab
+ mount -f / || failed=1
+ mount -f /proc || failed=1
+ mount -f /sys || failed=1
+ mount -f /run || failed=1
+ (exit ${failed})
+ evaluate_retval standard
+
+ # This will mount all filesystems that do not have _netdev in
+ # their option list. _netdev denotes a network filesystem.
+ message="Mounting remaining file systems..."
+ mount -a -O no_netdev >/dev/null
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Unmounting all other currently mounted file systems..."
+ umount -a -d -r >/dev/null
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/mountfs
diff --git a/lsb-bootscripts/etc/init.d/mountvirtfs b/lsb-bootscripts/etc/init.d/mountvirtfs
new file mode 100644
index 000000000..994976934
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/mountvirtfs
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Begin /etc/init.d/mountvirtfs
+
+### BEGIN INIT INFO
+# Provides: mountvirtfs
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Mounts /sys, /proc, and /run virtual (virtel) filesystems.
+# Description: Mounts /sys, /proc, and run virtual (virtel) filesystems.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Mounting virtel-based file systems:"
+
+ if ! mountpoint /proc > /dev/null; then
+ message="${message}${INFO} /proc${NORMAL}"
+ mount -n /proc || failed=1
+ fi
+
+ if ! mountpoint /sys > /dev/null; then
+ message="${message}${INFO} /sys${NORMAL}"
+ mount -n /sys || failed=1
+ fi
+
+ # create needed directories in /run
+ mkdir /run/{var,lock,shm} || failed=1
+
+ (exit ${failed})
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/mountvirtfs
diff --git a/lsb-bootscripts/etc/init.d/network b/lsb-bootscripts/etc/init.d/network
new file mode 100644
index 000000000..ec11d5e38
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/network
@@ -0,0 +1,70 @@
+#!/bin/sh
+# Begin /etc/init.d/network
+
+### BEGIN INIT INFO
+# Provides: $network
+# Required-Start: $local_fs swap localnet
+# Should-Start: $syslog
+# Required-Stop: $local_fs swap localnet
+# Should-Stop: $syslog
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Starts and configures network interfaces.
+# Description: Starts and configures network interfaces.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ # Start all network interfaces
+ for file in ${NETWORK_DEVICES}/ifconfig.*
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+ IN_BOOT=1 /sbin/ifup ${interface}
+ done
+ ;;
+
+ stop)
+ # Reverse list
+ FILES=""
+ for file in /run/network/ifconfig.*
+ do
+ FILES="${file} ${FILES}"
+ done
+
+ # Stop all network interfaces
+ for file in ${FILES}
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+
+ IN_BOOT=1 /sbin/ifdown ${interface}
+ done
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/network
diff --git a/lsb-bootscripts/etc/init.d/rc b/lsb-bootscripts/etc/init.d/rc
new file mode 100644
index 000000000..edad963a5
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/rc
@@ -0,0 +1,201 @@
+#!/bin/sh
+# Begin $RC_BASE/init.d/rc
+
+# Get the configuration file
+# All changes are to occur in the config file
+. /etc/default/rc
+
+# These 3 signals will not cause our script to exit
+trap "" INT QUIT TSTP
+
+# Simple sanity check - rc only takes one argument
+if [ "${#}" -ne 1 ]; then
+ echo "Usage: ${0} <runlevel>" >&2
+ exit 1
+fi
+
+# Do not use the RUNLEVEL and PREVLEVEL variables provided by init so
+# that they can be modified and alternate directories (S) can
+# be used without affecting init
+runlevel="${1}"
+prevlevel="${PREVLEVEL}"
+
+# Just in case - some flavors of init don't set PREVLEVEL to 'N'
+if [ "${prevlevel}" = "" ]; then
+ prevlevel="N"
+fi
+
+# Mount /run
+if [ "${runlevel}" = "S" ]; then
+ mount -n -t tmpfs tmpfs /run
+fi
+
+# Provide an interactive prompt (if requested)
+if [ "${runlevel}" = "S" -a "${iprompt}" = "yes" ]; then
+ # ash does not accept t and n flags for read
+ ls -l /bin/sh | grep "/ash"
+ if [ "${?}" -eq "0" ]; then
+ # We are using ash
+ echo -e -n "${WARNING}WARNING: Either bash or zsh is required"
+ echo -e "${WARNING} for interactive startup.\n"
+ sleep 3
+ else
+ echo ""
+ # dcol and icol are spaces before the message to center the
+ # message on screen.
+ dcol=$(( $(( ${COLUMNS} - ${dlen} )) / 2 ))
+ icol=$(( $(( ${COLUMNS} - ${ilen} )) / 2 ))
+ echo -e "\\033[${dcol}G${welcome_message}"
+ echo -e "\\033[${icol}G${i_message}${NORMAL}"
+ echo ""
+ read -t "${itime}" -n 1 interactive 2>&1 > /dev/null
+ if [ "${interactive}" = "I" -o "${interactive}" = "i" ]; then
+ echo -n -e "${CURS_UP}"
+ echo -e "${INFO}Interactive boot selected...${NORMAL}"
+ echo "interactive=I" > /run/.interactive-start
+ fi
+ fi
+fi
+
+
+# Verify that the directory exists
+if [ ! -d "${RC_BASE}/rc${runlevel}.d" ]; then
+ echo -n -e "${WARNING}${RC_BASE}/rc${runlevel}.d does not exist."
+ echo -e "${NORMAL}"
+ exit 1
+fi
+
+# Source the interactive state file if it exists
+if [ "${runlevel}" != "S" -a -f /run/.interactive-start ]; then
+ . /run/.interactive-start
+fi
+
+# Prompt for interactive startup after completing S
+if [ "${interactive}" = "I" -a "${runlevel}" != "S" -a \
+ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+ echo -n -e "Proceed with interactive starup of runlevel "
+ echo -n -e "${INFO}${runlevel}${NORMAL}?"
+ echo -n -e "(${FAILURE}y${NORMAL})es/(${FAILURE}n${NORMAL})o "
+ read -n 1 go_on
+ echo ""
+ if [ "${go_on}" = "n" ]; then
+ # don't continue
+ exit 0
+ fi
+fi
+
+
+# Attempt to stop all services started in the previous runlevel,
+# that are stopped in this runlevel
+if [ "${prevlevel}" != "N" ]; then
+ for link in $(ls -v ${RC_BASE}/rc${runlevel}.d/K* 2> /dev/null)
+ do
+ # Check to see if link is a valid symlink
+ if [ ! -f ${link} ]; then
+ echo -e "${WARNING}${link} is not a valid symlink."
+ continue # go on to the next K* link
+ fi
+
+ # Check to see if link is executable
+ if [ ! -x ${link} ]; then
+ echo -e "${WARNING}${link} is not executable, skipping."
+ continue # go on to the next K* link
+ fi
+
+ script=${link#$RC_BASE/rc$runlevel.d/K[0-9][0-9]}
+ prev_start=$RC_BASE/rc$prevlevel.d/S[0-9][0-9]$script
+ S_start=$RC_BASE/rcS.d/S[0-9][0-9]$script
+
+ if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+ if [ ! -f ${prev_start} ] && [ ! -f ${S_start} ]; then
+ echo -e -n "${WARNING}WARNING:\n\n${link} can't be"
+ echo -e "${WARNING} executed because it was not"
+ echo -e -n "${WARNING} not started in the previous"
+ echo -e "${WARNING} runlevel (${prevlevel})."
+ echo -e "${NORMAL}"
+ continue
+ fi
+ fi
+ ${link} stop
+ error_value=${?}
+
+ if [ "${error_value}" -ne "0" ]; then
+ print_error_msg
+ fi
+ done
+fi
+
+# Start all functions in this runlevel if they weren't started in
+# the previous runlevel
+for link in $(ls -v ${RC_BASE}/rc${runlevel}.d/S* 2> /dev/null)
+do
+ if [ "${prevlevel}" != "N" ]; then
+ script=${link#$RC_BASE/rc$runlevel.d/S[0-9][0-9]}
+ stop=$RC_BASE/rc$runlevel.d/K[0-9][0-9]$script
+ prev_start=$RC_BASE/rc$prevlevel.d/S[0-9][0-9]$script
+
+ [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue
+ fi
+
+ # Check to see if link is a valid symlink
+ if [ ! -f ${link} ]; then
+ echo -e "${WARNING}${link} is not a valid symlink."
+ continue # go on to the next K* link
+ fi
+
+ # Check to see if link is executable
+ if [ ! -x ${link} ]; then
+ echo -e "${WARNING}${link} is not executable, skipping."
+ continue # go on to the next K* link
+ fi
+
+ case ${runlevel} in
+ 0|6)
+ ${link} stop
+ ;;
+
+ *)
+ if [ "${interactive}" = "I" -o "${interactive}" = "i" ]; then
+ echo -e -n "${WARNING}Start ${INFO}${link} ${WARNING}?"
+ echo -e -n "${NORMAL}(${FAILURE}y${NORMAL})es/(${FAILURE}n${NORMAL})o "
+ read -n 1 startit 2>&1 > /dev/null
+ echo ""
+ if [ "${startit}" = "y" -o "${startit}" = "Y" ]; then
+ ${link} start
+ else
+ echo -e -n "${WARNING}Not starting ${INFO}${link}"
+ echo -e "${WARNING}.${NORMAL}\n"
+ fi
+ else
+ ${link} start
+ fi
+ ;;
+ esac
+ error_value=${?}
+
+ if [ "${error_value}" -gt "1" ]; then
+ print_error_msg
+ fi
+done
+
+# Strip apply time to the logs, strip out any color codes and dump
+# the log to /var/log/boot.log
+if [ -f /run/.bootlog -a "${runlevel}" != "S" ]; then
+ # Remove any color codes from the temp log file
+ sed -i 's@\\033\[[0-9];[0-9][0-9]m@@g' /run/.bootlog
+ #Fix the time and hostname
+ BTIMESPEC=$(echo `date +"%b %d %T"` `hostname`)
+ sed -i "s@^bootlog:@${BTIMESPEC} bootlog:@" /run/.bootlog
+ # Don't try and write in 0 and 6, this is a 'boot' log
+ if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+ cat /run/.bootlog >> /var/log/boot.log
+ rm -f /run/.bootlog
+ fi
+fi
+
+# Remove interactive boot temp file
+if [ -f /run/.interactive-start -a "${runlevel}" != "S" ]; then
+ rm -f /run/.interactive-start
+fi
+
+# End $RC_BASE/init.d/rc
diff --git a/lsb-bootscripts/etc/init.d/reboot b/lsb-bootscripts/etc/init.d/reboot
new file mode 100644
index 000000000..56e948a3f
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/reboot
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Begin /etc/init.d/reboot
+
+### BEGIN INIT INFO
+# Provides: reboot
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: 6
+# Default-Stop:
+# Short-Description: Reboots the system.
+# Description: Reboots the System.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ log_success_msg "Restarting system..."
+ reboot -d -f -i
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End /etc/init.d/reboot
diff --git a/lsb-bootscripts/etc/init.d/sendsignals b/lsb-bootscripts/etc/init.d/sendsignals
new file mode 100644
index 000000000..2cd9df84a
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/sendsignals
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Begin /etc/init.d/sendsignals
+
+### BEGIN INIT INFO
+# Provides: sendsignals
+# Required-Start:
+# Should-Start:
+# Required-Stop: $local_fs swap localnet
+# Should-Stop:
+# Default-Start:
+# Default-Stop: 0 6
+# Short-Description: Attempts to kill remaining processes.
+# Description: Attempts to kill remaining processes.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ message="Sending all processes the TERM signal..."
+ killall5 -15
+ error_value=${?}
+ # Account for successful return value of 2
+ if [ ${error_value} -eq 2 ]; then
+ error_value=0
+ fi
+ sleep 3
+
+ (exit ${error_value})
+ evaluate_retval standard
+
+ message="Sending all processes the KILL signal..."
+ killall5 -9
+ error_value=${?}
+ # Account for successful return value of 2
+ if [ ${error_value} -eq 2 ]; then
+ error_value=0
+ fi
+
+ sleep 3
+
+ (exit ${error_value})
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End /etc/init.d/sendsignals
diff --git a/lsb-bootscripts/etc/init.d/setclock b/lsb-bootscripts/etc/init.d/setclock
new file mode 100644
index 000000000..5d47b8dc8
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/setclock
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Begin /etc/init.d/setclock
+
+### BEGIN INIT INFO
+# Provides: hwclock
+# Required-Start:
+# Should-Start: modules
+# Required-Stop:
+# Should-Stop: $syslog
+# Default-Start:
+# Default-Stop:
+# Short-Description: Stores and restores time from the hardware clock
+# Description: On boot, system time is obtained from hwclock. The
+# hardware clock can also be set on shutdown.
+# X-LFS-Provided-By: LFS BLFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+BIN_FILE="/sbin/hwclock"
+
+chk_stat
+
+case "${UTC}" in
+ yes|true|1)
+ CLOCKPARAMS="${CLOCKPARAMS} --utc"
+ ;;
+
+ no|false|0)
+ CLOCKPARAMS="${CLOCKPARAMS} --localtime"
+ ;;
+
+esac
+
+case ${1} in
+ start)
+ message="Setting system clock..."
+ ${BIN_FILE} --hctosys ${CLOCKPARAMS} >/dev/null
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Setting hardware clock..."
+ ${BIN_FILE} --systohc ${CLOCKPARAMS} >/dev/null
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ ;;
+
+esac
+
+# End /etc/init.d/setclock
diff --git a/lsb-bootscripts/etc/init.d/swap b/lsb-bootscripts/etc/init.d/swap
new file mode 100644
index 000000000..31e5591e5
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/swap
@@ -0,0 +1,55 @@
+#!/bin/sh
+# Begin /etc/init.d/swap
+
+### BEGIN INIT INFO
+# Provides: swap
+# Required-Start: udev
+# Should-Start: modules
+# Required-Stop: localnet
+# Should-Stop:
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: Mounts and unmounts swap partitions.
+# Description: Mounts and unmounts swap partitions defined in
+# /etc/fstab.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Activating all swap files/partitions..."
+ swapon -a
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Deactivating all swap files/partitions..."
+ swapoff -a
+ evaluate_retval standard
+ ;;
+
+ restart)
+ swapoff -a
+ error_level="${?}"
+ sleep 1
+ swapon -a
+ error_level="$(( ${error_level} + ${?} ))"
+ (exit "${error_level}")
+ evaluate_retval restart
+ ;;
+
+ status)
+ log_success_msg "Retrieving swap status..."
+ echo
+ swapon -s
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/swap
diff --git a/lsb-bootscripts/etc/init.d/sysctl b/lsb-bootscripts/etc/init.d/sysctl
new file mode 100644
index 000000000..cccff126e
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/sysctl
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Begin /etc/init.d/sysctl
+
+### BEGIN INIT INFO
+# Provides: sysctl
+# Required-Start: mountvirtfs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Makes changes to the proc filesystem
+# Description: Makes changes to the proc filesystem as defined in
+# /etc/sysctl.conf. See 'man sysctl(8)'.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ if [ -f "/etc/sysctl.conf" ]; then
+ message="Setting kernel runtime parameters..."
+ sysctl -q -p
+ evaluate_retval standard
+ fi
+ ;;
+
+ status)
+ sysctl -a
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/sysctl
diff --git a/lsb-bootscripts/etc/init.d/sysklogd b/lsb-bootscripts/etc/init.d/sysklogd
new file mode 100644
index 000000000..dc8829f07
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/sysklogd
@@ -0,0 +1,69 @@
+#!/bin/sh
+# Begin /etc/init.d/sysklogd
+
+### BEGIN INIT INFO
+# Provides: $syslog
+# Required-Start: localnet
+# Should-Start:
+# Required-Stop: $local_fs sendsignals
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts kernel and system log daemons.
+# Description: Starts kernel and system log daemons.
+# /etc/fstab.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ MESSAGE="system log daemon..."
+ start_daemon /sbin/syslogd -m 0
+ evaluate_retval start
+
+ MESSAGE="kernel log daemon..."
+ start_daemon /sbin/klogd
+ evaluate_retval start
+ ;;
+
+ stop)
+ MESSAGE="kernel log daemon..."
+ killproc /sbin/klogd
+ evaluate_retval stop
+
+ MESSAGE="system log daemon..."
+ killproc /sbin/syslogd
+ evaluate_retval stop
+ ;;
+
+ force-reload)
+ MESSAGE="system log daemon config file..."
+ killproc -HUP `/sbin/syslogd`
+ evaluate_retval reload
+ ;;
+
+ restart)
+ MESSAGE="system and kernel log deamons..."
+ failed=0
+ killproc /sbin/klogd || failed=1
+ killproc /sbin/syslogd || failed=1
+ start_daemon /sbin/syslogd -m 0 || failed=1
+ start_daemon /sbin/klogd || failed=1
+ (exit ${failed})
+ evaluate_retval restart
+ ;;
+
+ status)
+ statusproc /sbin/syslogd
+ statusproc /sbin/klogd
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|force-reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/sysklogd
diff --git a/lsb-bootscripts/etc/init.d/template b/lsb-bootscripts/etc/init.d/template
new file mode 100644
index 000000000..d10d98c56
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/template
@@ -0,0 +1,90 @@
+#!/bin/sh
+# Begin /etc/init.d/template
+
+### BEGIN INIT INFO
+# Provides: template
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:
+# Default-Stop:
+# Short-Description:
+# Description:
+# X-LFS-Provided-By:
+### END INIT INFO
+
+# Source the LSB init-functions, ours are pulled in from there.
+. /lib/lsb/init-functions
+
+# These are optional, but required for chk_stat. They will be used in
+# the rest of the functions if defined, else you must provide a program
+# name to control, and a message ('Starting Template Service...'
+# or 'Stoping Template Service...') to evauate_retval. See the
+# documentaion in the lfs-fucntions file for more information.
+MESSAGE="Template Service"
+BIN_FILE="/some/path/to/template"
+CONFIGFILE="/etc/default/template.conf"
+
+# check that $BIN_FILE exists and is executable, and $CONFIGFILE exists.
+chk_stat
+
+# LSB Defined functions require that at least $BIN_FILE be passed to them,
+# where as lfs-functions will use the $BIN_FILE environment variable.
+# loadproc() and endproc() are just wrappers that pass everything on to
+# the LSB defined functions.
+
+case "${1}" in
+ start)
+ #start_daemon "${BIN_FILE}" -arg1 -arg2 #... or:
+ loadproc -arg1 -arg2 -arg3 #...
+ evaluate_retval start
+ ;;
+
+ stop)
+ #killproc -TERM "${BIN_FILE}" or:
+ endproc
+ evaluate_retval stop
+ ;;
+
+ force-reload)
+ reloadproc -force
+ evaluate_retval force-reload
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ ;;
+
+ status)
+ statusproc
+ ;;
+
+# reload and try-restart are optional per LSB requirements
+ reload)
+ reloadproc
+ evaluate_retval reload
+ ;;
+
+ try-restart)
+ # Since this is optional there is no lfs-function for this one...
+ # might be at a later time if used enough, but I doubt it usefullness.
+ pidofproc "${BIN_FILE}" > /dev/null
+ if [ "${?}" -ne "0" ]; then
+ MESSAGE="${MESSAGE}: Not Running"
+ else
+ $0 stop
+ $0 start
+ exit 0
+ fi
+ evaluate_retval try-restart
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|{force-}reload|{try-}restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/template
diff --git a/lsb-bootscripts/etc/init.d/udev b/lsb-bootscripts/etc/init.d/udev
new file mode 100644
index 000000000..fd17b5e94
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/udev
@@ -0,0 +1,89 @@
+#!/bin/sh
+# Begin $rc_base/init.d/udev
+
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start:
+# Should-Start: modules
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Populated /dev with device nodes.
+# Description: Mounts a tempfs on /dev and starts the udevd daemon.
+# Device nodes are created as defined by udev.
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Populating /dev with device nodes..."
+
+case "${1}" in
+ start)
+ if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nUnable to create" ${FAILURE}
+ boot_mesg -n " devices without a SysFS filesystem"
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ $FAILURE_ACTION
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # If not using DEVTMPFS mount a temporary file system over
+ # /dev, so that any devices made or removed during this boot
+ # don't affect the next one. The reason we don't write to mtab
+ # is because we don't ever want /dev to be unavailable (such as
+ # by `umount -a').
+ if ! mountpoint /dev > /dev/null; then
+ mount -n -t tmpfs tmpfs /dev -o mode=755
+ fi
+ if [ ${?} -ne 0 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nCannot mount a tmpfs" ${FAILURE}
+ boot_mesg -n " onto /dev, this system will be halted."
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ $FAILURE_ACTION
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # Create a symlink for POSIX shared memory
+ ln -s /run/shm /dev/shm
+
+ # Udev handles uevents itself, so we don't need to have
+ # the kernel call out to any binary in response to them
+ # This is a failsafe and should be done in kernel config
+ echo > /proc/sys/kernel/hotplug
+
+ # Copy the only static device node that Udev >= 155 doesn't
+ # handle to /dev (handled by default with DEVTMPFS)
+ if [ ! -f /dev/null ]; then
+ cp -a /lib/udev/devices/null /dev
+ fi
+
+ # Start the udev daemon to continually watch for, and act on,
+ # uevents
+ /sbin/udevd --daemon
+
+ # Now traverse /sys in order to "coldplug" devices that have
+ # already been discovered
+ /sbin/udevadm trigger --action=add
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev
diff --git a/lsb-bootscripts/etc/init.d/udev_retry b/lsb-bootscripts/etc/init.d/udev_retry
new file mode 100644
index 000000000..24b956ae0
--- /dev/null
+++ b/lsb-bootscripts/etc/init.d/udev_retry
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Begin $rc_base/init.d/udev_retry
+
+### BEGIN INIT INFO
+# Provides: udev_retry
+# Required-Start: udev
+# Should-Start: $local_fs
+# Required-Stop:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Replays failed uevents and creates additonal devices.
+# Description: Replays any failed uevents that were skipped due to
+# slow hardware initialization, and creates those needed
+# device nodes
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Retrying failed uevents, if any..."
+
+case "${1}" in
+ start)
+
+ # From Debian: "copy the rules generated before / was mounted
+ # read-write":
+ for file in /dev/.udev/tmp-rules--*; do
+ dest=${file##*tmp-rules--}
+ [ "$dest" = '*' ] && break
+ cat $file >> /etc/udev/rules.d/$dest
+ rm -f $file
+ done
+
+ # Re-trigger the failed uevents in hope they will succeed now
+ /sbin/udevadm trigger --type=failed --action=add
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev_retry
diff --git a/lsb-bootscripts/etc/inittab b/lsb-bootscripts/etc/inittab
new file mode 100644
index 000000000..c718c0584
--- /dev/null
+++ b/lsb-bootscripts/etc/inittab
@@ -0,0 +1,26 @@
+# Begin /etc/inittab
+
+id:3:initdefault:
+
+si::sysinit:/etc/init.d/rc S
+
+l0:0:wait:/etc/init.d/rc 0
+l1:S1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+
+ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+
+su:S016:once:/sbin/sulogin
+
+1:2345:respawn:/sbin/agetty tty1 9600
+2:2345:respawn:/sbin/agetty tty2 9600
+3:2345:respawn:/sbin/agetty tty3 9600
+4:2345:respawn:/sbin/agetty tty4 9600
+5:2345:respawn:/sbin/agetty tty5 9600
+6:2345:respawn:/sbin/agetty tty6 9600
+
+# End /etc/inittab