diff options
Diffstat (limited to 'aaabasicfs/rc')
-rwxr-xr-x | aaabasicfs/rc | 286 |
1 files changed, 200 insertions, 86 deletions
diff --git a/aaabasicfs/rc b/aaabasicfs/rc index 81736e9f5..0b201cbbf 100755 --- a/aaabasicfs/rc +++ b/aaabasicfs/rc @@ -1,112 +1,226 @@ #!/bin/sh ######################################################################## -# Begin $rc_base/init.d/rc +# Begin rc # # Description : Main Run Level Control Script # # Authors : Gerard Beekmans - gerard@linuxfromscratch.org +# : DJ Lucas - dj@linuxfromscratch.org +# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org # -# Version : 00.00 -# -# Notes : +# Version : LFS 7.0 # ######################################################################## -. /etc/sysconfig/rc -. ${rc_functions} +. /lib/lsb/init-functions + +print_error_msg() +{ + log_failure_msg + # $i is set when called + MSG="FAILURE:\n\nYou should not be reading this error message.\n\n" + MSG="${MSG}It means that an unforeseen error took place in\n" + MSG="${MSG}${i},\n" + MSG="${MSG}which exited with a return value of ${error_value}.\n" + + MSG="${MSG}If you're able to track this error down to a bug in one of\n" + MSG="${MSG}the files provided by the files provided by\n" + MSG="${MSG}the ${DISDRI_MINI} book, please be so kind to inform us at\n" + MSG="${MSG}${DISTRO_CONTACT}.\n" + log_failure_msg "${MSG}" + + log_info_msg "Press Enter to continue..." + wait_for_user +} -stty sane +check_script_status() +{ + # $i is set when called + if [ ! -f ${i} ]; then + log_warning_msg "${i} is not a valid symlink." + continue + fi + + if [ ! -x ${i} ]; then + log_warning_msg "${i} is not executable, skipping." + continue + fi +} + +run() +{ + if [ -z $interactive ]; then + ${1} ${2} + return $? + fi + + while true; do + read -p "Run ${1} ${2} (Yes/no/continue)? " -n 1 runit + echo + + case ${runit} in + c | C) + interactive="" + ${i} ${2} + ret=${?} + break; + ;; + + n | N) + return 0 + ;; + + y | Y) + ${i} ${2} + ret=${?} + break + ;; + esac + done + + return $ret +} +# Read any local settings/overrides +[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site + +DISTRO=${DISTRO:-"NuTyX"} +DISTRO_CONTACT=${DISTRO_CONTACT:-"http://nutyx.org/"} +DISTRO_MINI=${DISTRO_MINI:-"NuTyX"} +IPROMPT=${IPROMPT:-"no"} + +# These 3 signals will not cause our script to exit trap "" INT QUIT TSTP -[ "${1}" != "" ] && runlevel=${1} - -splashy_update_progress(){ - STEPS_DIR=/etc/splashy/steps_dir - [ -r "/etc/default/splashy" ] && . "/etc/default/splashy" - SPL_UPD=/sbin/splashy_update - SPL_PRG=$STEPS_DIR/${runlevel}-progress - # load some default variables - if ! ( pidof splashy > /dev/null ); then - /sbin/splashy boot 2>/dev/null - sleep 1 - else - PER=`sed -n 's+'${1}' ++ p' $SPL_PRG` - $SPL_UPD "progress $PER" - fi -} +[ "${1}" != "" ] && runlevel=${1} -if [ "${runlevel}" = "" ]; then - echo "Usage: ${0} <runlevel>" >&2 - exit 1 +if [ "${runlevel}" == "" ]; then + echo "Usage: ${0} <runlevel>" >&2 + exit 1 fi previous=${PREVLEVEL} -[ "${previous}" = "" ] && previous=N +[ "${previous}" == "" ] && previous=N -if [ ! -d ${rc_base}/rc${runlevel}.d ]; then - boot_mesg "${rc_base}/rc${runlevel}.d does not exist." ${WARNING} - boot_mesg_flush - exit 1 +if [ ! -d /etc/rc.d/rc${runlevel}.d ]; then + log_info_msg "/etc/rc.d/rc${runlevel}.d does not exist.\n" + exit 1 fi -# Attempt to stop all service started by previous runlevel, + +if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; then IPROMPT="no"; fi + +# Note: In ${LOGLEVEL:-7}, it is ':' 'dash' '7', not minus 7 +if [ "$runlevel" == "S" ]; then dmesg -n "${LOGLEVEL:-1}"; fi + +if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; then + # The total length of the distro welcome string, without escape codes + wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )} + welcome_message=${welcome_message:-"Welcome to ${INFO}${DISTRO}${NORMAL}"} + + # The total length of the interactive string, without escape codes + ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )} + i_message=${i_message:-"Press '${FAILURE}I${NORMAL}' to enter interactive startup"} + + + # dcol and icol are spaces before the message to center the message + # on screen. itime is the amount of wait time for the user to press a key + wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 )) + icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) + itime=${itime:-"3"} + + echo -e "\n\n" + echo -e "\\033[${wcol}G${welcome_message}" + echo -e "\\033[${icol}G${i_message}${NORMAL}" + echo "" + read -t "${itime}" -n 1 interactive 2>&1 > /dev/null +fi + +# Make lower case +[ "${interactive}" == "I" ] && interactive="i" +[ "${interactive}" != "i" ] && interactive="" + +# Read the state file if it exists from runlevel S +[ -r /var/run/interactive ] && source /var/run/interactive + +# Attempt to stop all services started by the previous runlevel, # and killed in this runlevel if [ "${previous}" != "N" ]; then - for i in $(ls -v ${rc_base}/rc${runlevel}.d/K* 2> /dev/null) - do - check_script_status - - suffix=${i#$rc_base/rc$runlevel.d/K[0-9][0-9]} - prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix - sysinit_start=$rc_base/rcsysinit.d/S[0-9][0-9]$suffix - - if [ "${runlevel}" != "0" ] && [ "${runlevel}" != "6" ]; then - if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then - boot_mesg -n "WARNING:\n\n${i} can't be" ${WARNING} - boot_mesg -n " executed because it was not" - boot_mesg -n " not started in the previous" - boot_mesg -n " runlevel (${previous})." - boot_mesg "" ${NORMAL} - boot_mesg_flush - continue - fi - fi - ${i} stop - error_value=${?} - - if [ "${error_value}" != "0" ]; then - print_error_msg - fi - done + for i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) + do + check_script_status + + suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} + prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix + sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix + + if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then + if [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; then + MSG="WARNING:\n\n${i} can't be " + MSG="${MSG}executed because it was not " + MSG="${MSG}not started in the previous " + MSG="${MSG}runlevel (${previous})." + log_warning_msg "$MSG" + continue + fi + fi + + run ${i} stop + error_value=${?} + + if [ "${error_value}" != "0" ]; then print_error_msg; fi + done +fi + +if [ "${previous}" == "N" ]; then export IN_BOOT=1; fi + +if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; then + touch /fastboot fi -#Start all functions in this runlevel -for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* 2> /dev/null) + +# Start all functions in this runlevel +for i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) do - if [ "${previous}" != "N" ]; then - suffix=${i#$rc_base/rc$runlevel.d/S[0-9][0-9]} - stop=$rc_base/rc$runlevel.d/K[0-9][0-9]$suffix - prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix - - [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue - fi - - check_script_status - - case ${runlevel} in - 0|6) - [ -f /sbin/splashy ] && splashy_update_progress ${i} - ${i} stop - ;; - *) - [ -f /sbin/splashy ] && splashy_update_progress ${i} - ${i} start - ;; - esac - error_value=${?} - - if [ "${error_value}" != "0" ]; then - print_error_msg - fi + if [ "${previous}" != "N" ]; then + suffix=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} + stop=/etc/rc.d/rc$runlevel.d/K[0-9][0-9]$suffix + prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix + + [ -f ${prev_start} -a ! -f ${stop} ] && continue + fi + + check_script_status + + case ${runlevel} in + 0|6) + run ${i} stop + ;; + *) + run ${i} start + ;; + esac + + error_value=${?} + + if [ "${error_value}" != "0" ]; then print_error_msg; fi done -# End $rc_base/init.d/rc + +# Store interactive variable on switch from runlevel S and remove if not +if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; then + echo "interactive=\"i\"" > /var/run/interactive +else + rm -f /var/run/interactive 2> /dev/null +fi + +# Copy the boot log on initial boot only +if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; then + cat /run/var/bootlog >> /var/log/boot.log + + # Mark the end of boot + echo "--------" >> /var/log/boot.log + + # Remove the temporary file + rm -f /run/var/bootlog 2> /dev/null +fi + +# End rc |