<Poprzedni | Spis treści | Następne>
D.1. /etc/rc.d/init.d/rc
rc skrypt jest pierwszym skryptem wywoływanym przez init i inicjującym proces rozruchu.
#! / bin / bash
################################################## ######################
# Rozpocznij RC
#
# Opis: Skrypt sterujący poziomem głównego uruchomienia
#
# Autorzy: Gerard Beekmans - [email chroniony]
#: DJ Lucas - [email chroniony]
# Aktualizacja: Bruce Dubbs - [email chroniony]
#
# Wersja: LFS 7.0
#
################################################## ######################
. /lib/lsb/init-functions print_error_msg()
{
log_failure_msg
# $i jest ustawiane po wywołaniu
MSG="FAILURE:\n\nNie powinieneś czytać tego komunikatu o błędzie.\n\n" MSG="${MSG}Oznacza to, że wystąpił nieprzewidziany błąd w\n" MSG="${MSG}${ W"
MSG="${MSG}, które zakończyło się z wartością zwracaną ${error_value}.\n"
MSG="${MSG}Jeśli jesteś w stanie prześledzić ten błąd aż do błędu w jednym z\n" MSG="${MSG}plików dostarczonych w książce ${DISTRO_MINI},\n" MSG=" ${MSG}proszę być tak miłym i poinformować nas o ${DISTRO_CONTACT}.\n" log_failure_msg "${MSG}"
log_info_msg "Naciśnij Enter, aby kontynuować..." wait_for_user
}
check_script_status()
{
# $i jest ustawiane po wywołaniu if [ ! -f ${i} ]; Następnie
log_warning_msg "${i} nie jest prawidłowym dowiązaniem symbolicznym." SCRIPT_STAT="1"
fi
Jeśli [ ! -x ${i}]; Następnie
log_warning_msg "${i} nie jest wykonywalny, pomijam." SCRIPT_STAT="1"
fi
}
biegać()
{
jeśli [ -z $interaktywny ]; Następnie
${1} ${2}
zwrócić $?
fi
podczas gdy prawda; robić
read -p "Uruchom ${1} ${2} (Tak/nie/kontynuuj)? " -n 1 runit echo
przypadek ${runit} w c | C)
interaktywne=""
${i} ${2}
ret=${?} przerwa;
;;
n | N)
zwróć 0
;;
y | T)
${i} ${2}
ret=${?} przerwa
;;
Esac zrobione!
zwróć $ret
}
# Przeczytaj wszelkie ustawienia/zastąpienia lokalne
[ -r /etc/sysconfig/rc.site ] && źródło /etc/sysconfig/rc.site
DISTRO=${DISTRO:-"Linux od zera"}
DISTRO_CONTACT=${DISTRO_CONTACT:-"[email chroniony] (Wymagana rejestracja)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}
IPROMPT=${IPROMPT:-"nie"}
# Te 3 sygnały nie spowodują, że nasz skrypt wyjdzie z pułapki "" INT QUIT TSTP
[ "${1}" != "" ] && poziom pracy=${1}
if [ "${poziom działania}" == "" ]; następnie powtórz echo „Użycie: ${0} " >&2 wyjście 1
fi
poprzedni=${PRZEDNI POZIOM}
[ "${poprzedni}" == "" ] && poprzedni=N
Jeśli [ ! -d /etc/rc.d/rc${poziom działania}.d ]; Następnie
log_info_msg "/etc/rc.d/rc${runlevel}.d nie istnieje.\n" wyjście 1
fi
if [ "$poziom pracy" == "6" -o "$poziom pracy" == "0" ]; następnie IPROMPT="nie"; fi
# Uwaga: w ${LOGLEVEL:-7} jest to ':' 'myślnik' '7', a nie minus 7 if [ "$runlevel" == "S" ]; Następnie
[ -r /etc/sysconfig/console ] && źródło /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"
fi
if [ "${IPROMPT}" == "tak" -a "${poziom pracy}" == "S" ]; Następnie
# Całkowita długość łańcucha powitalnego dystrybucji, bez kodów ucieczki wlen=${wlen:-$(echo "Witamy w ${DISTRO}" | wc -c )} Welcome_message=${welcome_message:-"Witamy w ${INFO }${DISTRO}${NORMALNY}"}
# Całkowita długość łańcucha interaktywnego, bez kodów ucieczki ilen=${ilen:-$(echo "Naciśnij 'I', aby rozpocząć interaktywne uruchamianie" | wc -c)}
i_message=${i_message:-"Naciśnij '${FAILURE}I${NORMAL}', aby przejść do interaktywnego uruchamiania"}
# dcol i icol to spacje przed wiadomością, służące do jej wyśrodkowania
# na ekranie. itime to czas oczekiwania użytkownika na naciśnięcie klawisza 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}${NORMALNY}" echo ""
czytaj -t "${itime}" -n 1 interaktywny 2>&1 > /dev/null
fi
# Utwórz małe litery
[ "${interaktywny}" == "I" ] && interaktywny="i" [ "${interaktywny}" != "i" ] && interaktywny=""
# Przeczytaj plik stanu, jeśli istnieje z poziomu działania S
[ -r /var/run/interactive ] && źródło /var/run/interactive
# Próba zatrzymania wszystkich usług uruchomionych na poprzednim poziomie działania,
# i zabity na tym poziomie działania
if [ "${poprzedni}" != "N" ]; Następnie
for i w $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) wykonaj
stan_skryptu_sprawdzania
if [ "${SCRIPT_STAT}" == "1" ]; następnie SCRIPT_STAT="0"
kontynuować
fi
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 [ "${poziom pracy}" != "0" -a "${poziom pracy}" != "6" ]; Następnie
Jeśli [ ! -f ${poprzedni_start} -a ! -f ${sysinit_start}]; wtedy MSG="OSTRZEŻENIE:\n\n${i} nie może być "
MSG="${MSG}wykonano, ponieważ nie zostało " MSG="${MSG}nie zostało uruchomione na poprzednim " MSG="${MSG}poziomie działania (${previous})." log_warning_msg "$MSG"
kontynuować
fi
fi
uruchom ${i} zatrzymaj wartość_błędu=${?}
if [ "${wartość_błędu}" != "0" ]; następnie print_error_msg; gotowe
fi
if [ "${poprzedni}" == "N" ]; następnie eksportuj IN_BOOT=1; fi
if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; następnie dotknij /fastboot
fi
# Uruchom wszystkie funkcje na tym poziomie działania
for i w $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) wykonaj
if [ "${poprzedni}" != "N" ]; następnie przyrostek=${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 ${poprzedni_start} -a ! -f ${stop} ] && kontynuuj
fi
stan_skryptu_sprawdzania
if [ "${SCRIPT_STAT}" == "1" ]; następnie SCRIPT_STAT="0"
kontynuować
fi
przypadek ${poziom działania} w 0|6)
uruchom ${i} zatrzymaj się
;;
*)
to C
uruchom ${i} start
;;
wartość_błędu=${?}
if [ "${wartość_błędu}" != "0" ]; następnie print_error_msg; gotowe
# Zapisz zmienną interaktywną na przełączniku z poziomu pracy S i usuń, jeśli nie, if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; Następnie
echo "interactive=\"i\"" > /var/run/interactive
więcej
rm -f /var/run/interactive 2> /dev/null
fi
# Skopiuj dziennik rozruchu tylko przy pierwszym uruchomieniu
if [ "${poprzedni}" == "N" -a "${poziom pracy}" != "S" ]; następnie cat $BOOTLOG >> /var/log/boot.log
# Zaznacz koniec rozruchu
echo "--------" >> /var/log/boot.log
# Usuń plik tymczasowy rm -f $BOOTLOG 2> /dev/null
fi
# Zakończ RC
if [ "${wartość_błędu}" != "0" ]; następnie print_error_msg; gotowe
# Zapisz zmienną interaktywną na przełączniku z poziomu pracy S i usuń, jeśli nie, if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; Następnie
echo "interactive=\"i\"" > /var/run/interactive
więcej
rm -f /var/run/interactive 2> /dev/null
fi
# Skopiuj dziennik rozruchu tylko przy pierwszym uruchomieniu
if [ "${poprzedni}" == "N" -a "${poziom pracy}" != "S" ]; następnie cat $BOOTLOG >> /var/log/boot.log
# Zaznacz koniec rozruchu
echo "--------" >> /var/log/boot.log
# Usuń plik tymczasowy rm -f $BOOTLOG 2> /dev/null
fi
# Zakończ RC
: Gerard Beekmans - [email chroniony]
: DJ Lucas - [email chroniony]
: Bruce Dubbs - [email chroniony]
: Gerard Beekmans - [email chroniony]
: DJ Lucas - [email chroniony]
: Bruce Dubbs - [email chroniony]
: LFS 7.0
: Z kodem opartym na Simpleinit-msb Matthiasa Benkmanna http://winterdrache.de/linux/newboot/index.html
Plik powinien znajdować się w katalogu /lib/lsb
: LFS 7.0
: Z kodem opartym na Simpleinit-msb Matthiasa Benkmanna http://winterdrache.de/linux/newboot/index.html
Plik powinien znajdować się w katalogu /lib/lsb