summaryrefslogblamecommitdiffstats
path: root/initramfs/distro-specs/suse/files-default/etc/init.d/boot
blob: 8012f28764c5de39b8f9e9049b0d14eb5be1ee28 (plain) (tree)
1
2
3
4
5
6
7





                                                                   
                                                               















































                                                                      
                                    



















                                                                  

















































































































































































































                                                                      
#!/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 <dirk@goe.net>, 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 <ro@suse.de>, 1996-2002
#         Werner Fink <werner@suse.de>, 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