#!/bin/sh # # Description: Modificated /etc/init.d/boot for use with Diskless # X Stations (v4.0) -> replaces /etc/init.d/boot # simply copied over the original file in initrd # # Author(s): Dirk von Suchodoletz , 08-04-2006 # Copyright: (c) 2003, 2006 - RZ Universitaet Freiburg # # Version: 0.0.2b # # Some parts taken from /etc/init.d/boot by # # Copyright (c) 1996-2004 SuSE Linux AG, Nuernberg, Germany. # All rights reserved. # # Author: Ruediger Oertel , 1996-2002 # Werner Fink , 1996-2003 # Burchard Steinbild, 1996-2000 # Florian La Roche, 1996 # # first script to be executed from init on system startup # # Most of preparation is done within the initial ramdisk # ################################################################ LD_LIBRARY_PATH=/usr/lib # Before we do anything else, try at first to activate SELinux support test -d /selinux && mount -n -t selinuxfs none /selinux &>/dev/null # Configuration and coloring of the boot messages . /etc/rc.status . /etc/sysconfig/boot . /etc/sysconfig/logfile # Avoid be interrupted by child or keyboard trap "echo" SIGINT SIGSEGV SIGQUIT set +e # reasonable start values for bootsplash progress export progress=0 export sscripts=45 export kscripts=45 echo -n "System Boot Control: " echo "Running $0" ################################################################ # # some important (un)mounts rc_reset echo -n "Mounting /proc, /sys and /dev/pts filesystems" # file /etc/fstab in some scenarios not available mount -t proc proc /proc &>/dev/null rc_status -v -r echo -n "Mounting /dev/pts" mount -t devpts -o mode=0620,gid=5 devpts /dev/pts rc_status -v -r if [ -d /sys ] ; then while read a b c ; do case "$b" in sysfs) echo -n "Mounting /sys filesystem" echo -e "sysfs\t\t/sys\t\tsysfs\t\trw\t\t 0 0\n" \ >>/etc/fstab mount -t sysfs sysfs /sys rc_status -v -r break ;; esac done < /proc/filesystems fi # Start blogd, requires /proc and /dev/pts. # Export the real device in variable REDIRECT. test -x /sbin/blogd -a -n "$REDIRECT" && /sbin/blogd $REDIRECT if test -z "$REDIRECT" ; then if (echo -n > /dev/tty) 2>/dev/null ; then REDIRECT=/dev/tty else REDIRECT=/dev/console fi fi ################################################################ # # Save old terminal settings and set -nl to avoid staircase # effect, do not lock scrolling, and avoid break characters. otty=$(stty -g) if test "$FLOW_CONTROL" = "yes" ; then stty -nl ixon ignbrk -brkint else stty -nl -ixon ignbrk -brkint fi ################################################################ # # Should we ask for interactive boot mode DO_CONFIRM="" read -t 2 check < /proc/cmdline 2> /dev/null case "$check" in *confirm*) DO_CONFIRM=yes ;; esac test -z "$CONFIRM_PROMPT_TIMEOUT" && CONFIRM_PROMPT_TIMEOUT=5 if test "$PROMPT_FOR_CONFIRM" = "yes" -a "$DO_CONFIRM" != "yes" ; then echo -en "${extd}Enter Interactive startup mode?${norm}" rc_timer_on "$CONFIRM_PROMPT_TIMEOUT" 37 read -t "$CONFIRM_PROMPT_TIMEOUT" -n 1 \ -p " ${extd}y${norm}/[${extd}n${norm}]\ ("${CONFIRM_PROMPT_TIMEOUT}s") " answer rc_timer_off case "$answer" in [yYiI]) DO_CONFIRM=yes ;; *) DO_CONFIRM= ;; esac unset answer echo fi export DO_CONFIRM ################################################################ # # Common used variables bootrc=/etc/init.d/boot.d rex="[0-9][0-9]" failed="" skipped="" callord="" # # Initialize boosplash progressbar variables # . /etc/rc.splash B splashtrigger "rlchange B" ################################################################ # # Do we stop/start script in parallel? startpar=$(type -p startpar) test "$RUN_PARALLEL" = "yes" || startpar="" test "$DO_CONFIRM" = "yes" && startpar="" # Start bootup client scripts. if test -d ${bootrc}/ ; then for i in ${bootrc}/S*; do test -f $i || continue B=${i##*/} script=${B#*S$rex} B=${B%$script} rc_splash "$script start" if test "$DO_CONFIRM" = "yes" ; then rc_confirm -t 5 "Start bootup script ${script}" \ < $REDIRECT > $REDIRECT 2>&1 case "$?" in 0) true ;; 1) continue ;; 2) DO_CONFIRM="" esac fi if test -z "$startpar" ; then blogger "$script start" if test -x "$i" ; then $i start else echo Running $i /bin/sh $i b rc_status -v1 -r fi status=$? echo -en "$rc_reset" case $status in [1-4]) failed="${failed:+$failed }$script" ;; [56]) skipped="${skipped:+$skipped }$script" ;; [07]|*) ;; esac blogger "'$script start' exits with status $status" else # Parallel boot only for valid scripts test -x $i || continue # Current vector eval cur=\${$B} test -n "$cur" || callord="${callord:+$callord }$B" # Remember scripts eval $B="\${cur:+$i }\${cur:-$i}" fi done fi ################################################################ # # Call the scripts in correct order if test -n "$startpar" ; then declare -i s for p in $callord ; do vect=$p eval p=(\${$p}) blogger "run boot scripts (${p[@]##*S$rex})" if test ${#p[@]} -eq 1 ; then ${p} start status=($?) else status=($($startpar -t 30 -T 3 -a start ${p[@]})) fi echo -en "$rc_reset" blogger "exit status of (${p[@]##*S$rex}) is (${status[@]})" s=0 for script in ${p[@]##*S$rex} ; do case "${status[$s]}" in [1-4]) failed="${failed:+$failed }$script" ;; [56]) skipped="${skipped:+$skipped }$script" ;; 0|*) ;; esac : $((s++)) done done fi ################################################################ # # Be verbose and print stats echo -n "System Boot Control: " echo -e "The system has been ${stat}${extd}set up${norm}" if test -n "$failed" ; then n=$((${#failed} + 7)) echo -n "Failed features: " test $n -lt 47 && echo -en "\033[${COLUMNS}C\033[${n}D" echo -e "${warn}${failed}${norm}" fi if test -n "$skipped" ; then n=$((${#skipped} + 7)) echo -n "Skipped features: " test $n -lt 47 && echo -en "\033[${COLUMNS}C\033[${n}D" echo -e "${attn}${skipped}${norm}" fi ################################################################ # # Check for boot cycle detection test -s /lib/bootcycle/stats && . /lib/bootcycle/stats # Remember for master resource script if test "$DO_CONFIRM" = "yes" ; then touch /var/run/do_confirm fi # Restore old terminal settings stty $otty ################################################################ # # Let zic set timezone - if present (from boot.ldconfig). if test -n "$TIMEZONE" -a -x /usr/sbin/zic ; then echo -n Setting up timezone data /usr/sbin/zic -l $TIMEZONE rc_status -v -r fi ################################################################ # # start user defined bootup script. if test -f /etc/init.d/boot.local ; then ECHO_RETURN=$rc_done_up echo "Running /etc/init.d/boot.local" /bin/sh /etc/init.d/boot.local || rc_failed rc_status -v1; rc_reset rc_splash "boot.local start" fi rc_reset exit 0