diff options
Diffstat (limited to 'bootscripts/contrib/lsb-v3/init.d')
20 files changed, 1668 insertions, 0 deletions
diff --git a/bootscripts/contrib/lsb-v3/init.d/checkfs b/bootscripts/contrib/lsb-v3/init.d/checkfs new file mode 100644 index 000000000..5523d5e51 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/checkfs @@ -0,0 +1,105 @@ +#!/bin/sh +# Begin /etc/init.d/checkfs + +### BEGIN INIT INFO +# Provides: checkfs +# Required-Start: udev swap $time +# Should-Start: lvm +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# Default-Stop: +# Short-Description: Checks local filesystems before mounting. +# Description: Checks local filesystmes before mounting. +# X-LFS-Default-Start: S30 +# X-LFS-Default-Stop: +# 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 [ ${?} != 0 ] + then + log_failure_msg "Mounting root file system in read-only mode" + echo "${FAILURE}FAILURE:\n" + echo -n "${FIALURE}Cannot check root filesystem because it " + echo "${FAILURE}could not be mounted" + echo "${FAILURE}in read-only mode.\n\n" + echo -n "${FAILURE}After you press Enter, this system will be " + echo "${FAILURE}halted and powered off.\n" + echo "${INFO}Press enter to continue...${NORMAL}" + read ENTER + /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}" = 0 ] + then + log_success_msg "Checking file systems..." + elif [ "${error_value}" = 1 ] + then + log_warning_msg "Checking file systems..." + echo "${WARNING}WARNING:\n" + echo "${WARNING}File system errors were found and have been" + echo "${WARNING}corrected. You may want to double-check that" + echo "${WARNING}everything was fixed properly.${NORMAL}" + elif [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then + log_warning_msg "Checking file systems..." + echo "${WARNING}WARNING:\n" + echo "${WARNING}File system errors were found and have been been" + echo "${WARNING}corrected, but the nature of the errors require" + echo "${WARNING}this system to be rebooted.\n" + echo "After you press enter, this system will be rebooted.\n" + echo "${INFO}Press Enter to continue...${NORMAL}" + read ENTER + reboot -f + elif [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then + log_failure_msg "Checking file systems..." + echo "${FAILURE}FAILURE:\n" + echo "${FAILURE}File system errors were encountered that could" + echo "${FAILURE}not be fixed automatically. This system cannot" + echo "${FAILURE}continue to boot and will therefore be halted" + echo "${FAILURE}until those errors are fixed manually by a" + echo "${FAILURE}System Administrator.\n" + echo "${FAILURE}After you press Enter, this system will be" + echo "${FAILURE}halted and powered off.\n" + echo "${INFO}Press Enter to continue...${NORMAL}" + read ENTER + /etc/rc.d/init.d/halt stop + elif [ "${error_value}" -ge 16 ]; then + log_failure_msg "Checking file systems..." + echo "${FAILURE}FAILURE:\n" + echo "${FAILURE}Unexpected Failure running fsck. Exited with error" + echo "${FAILURE}code: ${error_value}.${NORMAL}" + exit ${error_value} + fi + ;; + *) + echo "Usage: ${0} {start}" + exit 1 + ;; +esac + +# End /etc/init.d/checkfs diff --git a/bootscripts/contrib/lsb-v3/init.d/cleanfs b/bootscripts/contrib/lsb-v3/init.d/cleanfs new file mode 100644 index 000000000..b160fbc22 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/cleanfs @@ -0,0 +1,113 @@ +#!/bin/sh +# Begin /etc/init.d/cleanfs + +### BEGIN INIT INFO +# Provides: cleanfs +# Required-Start: $local_fs +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# 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/sysconfig/createfiles. +# X-LFS-Default-Start: S50 +# X-LFS-Default-Stop: +# 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/sysconfig/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 -n "\n${WARNING}Unknown device type: ${dtype}" + echo "${NORMAL}" + ;; + esac + ;; + *) + echo "\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 + + message="${message} /var/lock" + find /var/lock -type f -exec rm -f {} \; || failed=1 + + message="${message} /var/run${NORMAL}" + find /var/run ! -type d ! -name utmp -exec rm -f {} \; || 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/sysconfig/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/bootscripts/contrib/lsb-v3/init.d/console b/bootscripts/contrib/lsb-v3/init.d/console new file mode 100644 index 000000000..87e392378 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/console @@ -0,0 +1,111 @@ +#!/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: sysinit +# 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/sysconfig/console. +# X-LFS-Default-Start: S70 +# X-LFS-Default-Stop: +# 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/sysconfig/console at all +if [ -f /etc/sysconfig/console ] +then + . /etc/sysconfig/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 + + # Linux kernel generates wrong bytes when composing + # in Unicode mode. That's why we disable dead keys in Unicode + # mode by default. If you need them, download and apply + # http://www.linuxfromscratch.org/~alexander/patches/linux-2.6.12.5-utf8_input-2.patch + # After patching, add "-m charset_of_your_keymap" to the FONT + # variable and set BROKEN_COMPOSE=false + # in /etc/sysconfig/console + + [ -n "$BROKEN_COMPOSE" ] || BROKEN_COMPOSE="$UNICODE" + ! is_true "$BROKEN_COMPOSE" || + echo "" | loadkeys -c >/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/bootscripts/contrib/lsb-v3/init.d/halt b/bootscripts/contrib/lsb-v3/init.d/halt new file mode 100644 index 000000000..22c14d6a4 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/halt @@ -0,0 +1,32 @@ +#!/bin/sh +# Begin $RC_BASE/init.d/halt + +### BEGIN INIT INFO +# Provides: halt +# Required-Start: +# Should-Start: +# Required-Stop: localnet +# Should-Stop: +# Default-Start: 0 +# Default-Stop: +# Short-Description: Halts the system. +# Description: Halts the System. +# X-LFS-Default-Start: +# X-LFS-Default-Stop: S99 +# 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/bootscripts/contrib/lsb-v3/init.d/lfs-functions b/bootscripts/contrib/lsb-v3/init.d/lfs-functions new file mode 100644 index 000000000..34dfeefdc --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/lfs-functions @@ -0,0 +1,215 @@ +# 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}" = "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}" = "0" ] + then + log_success_msg "${message}${MESSAGE} " + return "${error_value}" + else + log_failure_msg "${message}${MESSAGE} " + return "${error_value}" + fi +} + diff --git a/bootscripts/contrib/lsb-v3/init.d/localnet b/bootscripts/contrib/lsb-v3/init.d/localnet new file mode 100644 index 000000000..1a68fe3a2 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/localnet @@ -0,0 +1,84 @@ +#!/bin/sh +# Begin /etc/init.d/localnet + +### BEGIN INIT INFO +# Provides: localnet +# Required-Start: $local_fs +# Should-Start: +# Required-Stop: $network +# Should-Stop: swap +# Default-Start: sysinit 0 6 +# Default-Stop: +# Short-Description: Starts the local network. +# Description: Sets the hostname of the machine and starts the +# loopback interface. +# X-LFS-Default-Start: S80 +# X-LFS-Default-Stop: S90 +# X-LFS-Provided-By: LFS +### END INIT INFO + +. /lib/lsb/init-functions +. /etc/sysconfig/network + +case "${1}" in + start) + ip addr add 127.0.0.1/8 label lo dev lo + ip link set lo up + if [ "${?}" = "0" ] + then + log_success_msg "Bringing up the loopback interface..." + else + log_failure_msg "Bringing up the loopback interface..." + fi + + hostname "${HOSTNAME}" + if [ "${?}" = "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 [ "${?}" = "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}" = "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/bootscripts/contrib/lsb-v3/init.d/modules b/bootscripts/contrib/lsb-v3/init.d/modules new file mode 100644 index 000000000..d5e1ad646 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/modules @@ -0,0 +1,99 @@ +#!/bin/sh +# Begin /etc/init.d/modules + +### BEGIN INIT INFO +# Provides: modules +# Required-Start: mountkernfs +# Should-Start: sysctl +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# Default-Stop: +# Short-Description: Loads required modules. +# Description: Loads modules listed in /etc/sysconfig/modules. +# X-LFS-Default-Start: S10 +# X-LFS-Default-Stop: +# 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/sysconfig/modules ] && + egrep -qv '^($|#)' /etc/sysconfig/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/sysconfig/modules 2>/dev/null + then + + # Read in the configuration file. + exec 9>&0 < /etc/sysconfig/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/bootscripts/contrib/lsb-v3/init.d/mountfs b/bootscripts/contrib/lsb-v3/init.d/mountfs new file mode 100644 index 000000000..eb9a728eb --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/mountfs @@ -0,0 +1,60 @@ +#!/bin/sh +# Begin /etc/init.d/mountfs + +### BEGIN INIT INFO +# Provides: $local_fs +# Required-Start: udev checkfs +# Should-Start: lvm +# Required-Stop: sendsignals +# Should-Stop: +# Default-Start: sysinit 0 6 +# Default-Stop: +# Short-Description: Mounts and unmounts all local filesystems. +# Description: Remounts root filesystem read/write and mounts all +# remaining local filesystems defined in /etc/fstab on +# start. Rmounts root filesystem read-only and unmounts +# remaining filesystems on stop. +# X-LFS-Default-Start: S40 +# X-LFS-Default-Stop: S70 +# 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 + (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/bootscripts/contrib/lsb-v3/init.d/mountkernfs b/bootscripts/contrib/lsb-v3/init.d/mountkernfs new file mode 100644 index 000000000..6362b3db9 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/mountkernfs @@ -0,0 +1,45 @@ +#!/bin/sh +# Begin /etc/init.d/mountkernfs + +### BEGIN INIT INFO +# Provides: mountkernfs +# Required-Start: +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# Default-Stop: +# Short-Description: Mounts /sys and /proc virtual (kernel) filesystems. +# Description: Mounts /sys and /proc virtual (kernel) filesystems. +# X-LFS-Default-Start: S00 +# X-LFS-Default-Stop: +# X-LFS-Provided-By: LFS +### END INIT INFO + +. /lib/lsb/init-functions + +case "${1}" in + start) + message="Mounting kernel-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 + + (exit ${failed}) + evaluate_retval standard + ;; + + *) + echo "Usage: ${0} {start}" + exit 1 + ;; +esac + +# End /etc/init.d/mountkernfs diff --git a/bootscripts/contrib/lsb-v3/init.d/network b/bootscripts/contrib/lsb-v3/init.d/network new file mode 100644 index 000000000..799f1861c --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/network @@ -0,0 +1,74 @@ +#!/bin/sh +# Begin /etc/init.d/network + +### BEGIN INIT INFO +# Provides: $network +# Required-Start: $syslog +# Should-Start: +# Required-Stop: +# Should-Stop: $remote_fs +# 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-Default-Start: S20 +# X-LFS-Default-Stop: K80 +# X-LFS-Provided-By: LFS +### END INIT INFO + +. /lib/lsb/init-functions +. /etc/sysconfig/network + +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 ${NETWORK_DEVICES}/ifup ${interface} + done + ;; + + stop) + # Reverse list + FILES="" + for file in ${NETWORK_DEVICES}/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 ${NETWORK_DEVICES}/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/bootscripts/contrib/lsb-v3/init.d/rc b/bootscripts/contrib/lsb-v3/init.d/rc new file mode 100644 index 000000000..c9a0aa51e --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/rc @@ -0,0 +1,193 @@ +#!/bin/sh +# Begin $RC_BASE/init.d/rc + +# Get the configuration file +# All changes are to occur in the config file +. /etc/sysconfig/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 (sysinit) 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 a tmpfs to store boot accounting information +if [ "${runlevel}" = "sysinit" -a "${TEMPFS_MOUNT}" != "" ]; then + mount -n -t tmpfs tmpfs "${TEMPFS_MOUNT}" -o mode=600 +fi + +# Provide an interactive prompt (if requested) +if [ "${runlevel}" = "sysinit" -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" > "${TEMPFS_MOUNT}/.interactive-start" + fi + fi +fi + + +# Verify that the directory exists +if [ ! -d "${RC_BASE}/rc${runlevel}.d" ]; then + echo -n "${WARNING}${RC_BASE}/rc${runlevel}.d does not exist." + echo "${NORMAL}" + exit 1 +fi + +# Source the interactive state file if it exists +if [ "${runlevel}" != "sysinit" -a -f "${TEMPFS_MOUNT}/.interactive-start" ]; then + . "${TEMPFS_MOUNT}/.interactive-start" +fi + +# Prompt for interactive startup after completing sysinit +if [ "${interactive}" = "I" -a "${runlevel}" != "sysinit" -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 + sysinit_start=$RC_BASE/rcsysinit.d/S[0-9][0-9]$script + + if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then + if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_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}" != "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 "${TEMPFS_MOUNT}/.bootlog" -a "${runlevel}" != "sysinit" ]; then + # Remove any color codes from the temp log file + sed -i 's@\\033\[[0-9];[0-9][0-9]m@@g' "${TEMPFS_MOUNT}/.bootlog" + #Fix the time and hostname + BTIMESPEC=$(echo `date +"%b %d %T"` `hostname`) + sed -i "s@^bootlog:@${BTIMESPEC} bootlog:@" "${TEMPFS_MOUNT}/.bootlog" + cat "${TEMPFS_MOUNT}/.bootlog" >> /var/log/boot.log + rm -f "${TEMPFS_MOUNT}/.bootlog" +fi + +# End $RC_BASE/init.d/rc diff --git a/bootscripts/contrib/lsb-v3/init.d/reboot b/bootscripts/contrib/lsb-v3/init.d/reboot new file mode 100644 index 000000000..6e6b71f8b --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/reboot @@ -0,0 +1,34 @@ +#!/bin/sh +# Begin /etc/init.d/reboot + +### BEGIN INIT INFO +# Provides: reboot +# Required-Start: +# Should-Start: +# Required-Stop: localnet +# Should-Stop: +# Default-Start: 6 +# Default-Stop: +# Short-Description: Reboots the system. +# Description: Reboots the System. +# X-LFS-Default-Start: +# X-LFS-Default-Stop: S99 +# 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/bootscripts/contrib/lsb-v3/init.d/sendsignals b/bootscripts/contrib/lsb-v3/init.d/sendsignals new file mode 100644 index 000000000..152cbfb2a --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/sendsignals @@ -0,0 +1,49 @@ +#!/bin/sh +# Begin /etc/init.d/sendsignals + +### BEGIN INIT INFO +# Provides: sendsignals +# Required-Start: +# Should-Start: +# Required-Stop: $syslog +# Should-Stop: +# Default-Start: 0 6 +# Default-Stop: +# Short-Description: Attempts to kill remaining processes. +# Description: Attempts to kill remaining processes. +# X-LFS-Default-Start: +# X-LFS-Default-Stop: S60 +# 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=${?} + + sleep 3 + + (exit ${error_value}) + evaluate_retval standard + + message="Sending all processes the KILL signal..." + killall5 -9 + error_value=${?} + + sleep 3 + + (exit ${error_value}) + evaluate_retval standard + ;; + + *) + echo "Usage: ${0} {stop}" + exit 1 + ;; + +esac + +# End /etc/init.d/sendsignals diff --git a/bootscripts/contrib/lsb-v3/init.d/setclock b/bootscripts/contrib/lsb-v3/init.d/setclock new file mode 100644 index 000000000..a5237e9cb --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/setclock @@ -0,0 +1,61 @@ +#!/bin/sh +# Begin /etc/init.d/setclock + +### BEGIN INIT INFO +# Provides: $time +# Required-Start: udev +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# 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-Default-Start: S25 +# X-LFS-Default-Stop: +# X-LFS-Provided-By: LFS +### END INIT INFO + +. /lib/lsb/init-functions + +BIN_FILE="/sbin/hwclock" +CONFIGFILE="/etc/sysconfig/clock" + +chk_stat + +. "${CONFIGFILE}" + +CLOCKPARAMS= + +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/bootscripts/contrib/lsb-v3/init.d/swap b/bootscripts/contrib/lsb-v3/init.d/swap new file mode 100644 index 000000000..87c5f61c2 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/swap @@ -0,0 +1,57 @@ +#!/bin/sh +# Begin /etc/init.d/swap + +### BEGIN INIT INFO +# Provides: swap +# Required-Start: mountkernfs udev +# Should-Start: lvm +# Required-Stop: $local_fs +# Should-Stop: +# Default-Start: sysinit 0 6 +# Default-Stop: +# Short-Description: Mounts and unmounts swap partitions. +# Description: Mounts and unmounts swap partitions defined in +# /etc/fstab. +# X-LFS-Default-Start: S20 +# X-LFS-Default-Stop: S80 +# 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/bootscripts/contrib/lsb-v3/init.d/sysctl b/bootscripts/contrib/lsb-v3/init.d/sysctl new file mode 100644 index 000000000..ae9efb8f5 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/sysctl @@ -0,0 +1,41 @@ +#!/bin/sh +# Begin /etc/init.d/sysctl + +### BEGIN INIT INFO +# Provides: sysctl +# Required-Start: udev +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# 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-Default-Start: S05 +# X-LFS-Default-Stop: +# 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/bootscripts/contrib/lsb-v3/init.d/sysklogd b/bootscripts/contrib/lsb-v3/init.d/sysklogd new file mode 100644 index 000000000..329349e81 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/sysklogd @@ -0,0 +1,71 @@ +#!/bin/sh +# Begin /etc/init.d/sysklogd + +### BEGIN INIT INFO +# Provides: $syslog +# Required-Start: localnet +# Should-Start: +# Required-Stop: $network +# 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-Default-Start: S10 +# X-LFS-Default-Stop: K90 +# X-LFS-Provided-By: LFS +### END INIT INFO + +. /lib/lsb/init-functions + +case "${1}" in + start) + MESSAGE="system log daemon..." + start_daemon /usr/sbin/syslogd -m 0 + evaluate_retval start + + MESSAGE="kernel log daemon..." + start_daemon /usr/sbin/klogd + evaluate_retval start + ;; + + stop) + MESSAGE="kernel log daemon..." + killproc /usr/sbin/klogd + evaluate_retval stop + + MESSAGE="system log daemon..." + killproc /usr/sbin/syslogd + evaluate_retval stop + ;; + + force-reload) + MESSAGE="system log daemon config file..." + killproc -HUP `/usr/sbin/syslogd` + evaluate_retval reload + ;; + + restart) + MESSAGE="system and kernel log deamons..." + failed=0 + killproc /usr/sbin/klogd || failed=1 + killproc /usr/sbin/syslogd || failed=1 + start_daemon /usr/sbin/syslogd -m 0 || failed=1 + start_daemon /usr/sbin/klogd || failed=1 + (exit ${failed}) + evaluate_retval restart + ;; + + status) + statusproc /usr/sbin/syslogd + statusproc /usr/sbin/klogd + ;; + + *) + echo "Usage: ${0} {start|stop|force-reload|restart|status}" + exit 1 + ;; +esac + +# End /etc/init.d/sysklogd diff --git a/bootscripts/contrib/lsb-v3/init.d/template b/bootscripts/contrib/lsb-v3/init.d/template new file mode 100644 index 000000000..24a9e7f93 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/template @@ -0,0 +1,92 @@ +#!/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-Default-Start: +# X-LFS-Default-Stop: +# 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/sysconfig/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/bootscripts/contrib/lsb-v3/init.d/udev b/bootscripts/contrib/lsb-v3/init.d/udev new file mode 100644 index 000000000..1aa80a3ef --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/udev @@ -0,0 +1,81 @@ +#!/bin/sh +# Begin $rc_base/init.d/udev + +### BEGIN INIT INFO +# Provides: udev +# Required-Start: mountkernfs +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: sysinit +# 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-Default-Start: S15 +# X-LFS-Default-Stop: +# 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} + read ENTER + /etc/rc.d/init.d/halt stop + fi + + # 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'). + mount -n -t tmpfs tmpfs /dev -o mode=755 + if [ ${?} != 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} + read ENTER + /etc/rc.d/init.d/halt stop + fi + + # Udev handles uevents itself, so we don't need to have + # the kernel call out to any binary in response to them + echo > /proc/sys/kernel/hotplug + + # Copy static device nodes to /dev + cp -a /lib/udev/devices/* /dev + + # 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 + + # 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/bootscripts/contrib/lsb-v3/init.d/udev_retry b/bootscripts/contrib/lsb-v3/init.d/udev_retry new file mode 100644 index 000000000..b87a7b3e9 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/init.d/udev_retry @@ -0,0 +1,51 @@ +#!/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: sysinit +# 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-Default-Start: S45 +# X-LFS-Default-Stop: +# 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 --retry-failed + + # 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 |