<Precedenti | Contenuti | Succ.>
D.1. /etc/rc.d/init.d/rc
. rc script è il primo script chiamato da init e avvia il processo di avvio.
#! / Bin / bash
################################################# ######################
# Inizia rc
#
# Descrizione: Script di controllo del livello di esecuzione principale
#
# Autori: Gerard Beekmans - [email protected]
# : DJ Lucas - [email protected]
# Aggiornamento: Bruce Dubbs - [email protected]
#
# Versione: LFS 7.0
#
################################################# ######################
. /lib/lsb/init-functions print_error_msg()
{
log_failure_msg
# $i viene impostato quando viene chiamato
MSG="FAILURE:\n\nNon dovresti leggere questo messaggio di errore.\n\n" MSG="${MSG}Significa che si è verificato un errore imprevisto in\n" MSG="${MSG}${ in"
MSG="${MSG}che è uscito con un valore di ritorno di ${error_value}.\n"
MSG="${MSG}Se riesci a ricondurre questo errore a un bug in uno dei\n" MSG="${MSG}file forniti dal libro ${DISTRO_MINI},\n" MSG=" ${MSG}si prega di essere così gentile da informarci su ${DISTRO_CONTACT}.\n" log_failure_msg "${MSG}"
log_info_msg "Premi Invio per continuare..." wait_for_user
}
check_script_status()
{
# $i viene impostato quando viene chiamato if [ ! -f ${i} ]; poi
log_warning_msg "${i} non è un collegamento simbolico valido." SCRIPT_STAT="1"
fi
Se [ ! -x ${i} ]; poi
log_warning_msg "${i} non è eseguibile, salta." SCRIPT_STAT="1"
fi
}
correre()
{
if [ -z $interattivo ]; poi
${1} ${2}
restituire $?
fi
mentre vero; fare
read -p "Esegui ${1} ${2} (Sì/no/continua)? " -n 1 runit echo
caso ${runit} in c | C)
interattivo=""
${i} ${2}
ret=${?} pausa;
;;
n | N)
ritorna 0
;;
sì | sì)
${i} ${2}
ret=${?} pausa
;;
esac fatto
restituire $re
}
# Leggi eventuali impostazioni/sostituzioni locali
[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site
DISTRO=${DISTRO:-"Linux da zero"}
DISTRO_CONTACT=${DISTRO_CONTACT:-"[email protected] (Registrazione richiesta)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}
IPROMPT=${IPROMPT:-"no"}
# Questi 3 segnali non faranno uscire il nostro script dalla trap "" INT QUIT TSTP
[ "${1}" != "" ] && runlevel=${1}
if [ "${runlevel}" == "" ]; poi echo "Utilizzo: ${0} " >&2 uscita 1
fi
precedente=${LIVELLO PRECEDENTE}
[ "${precedente}" == "" ] && precedente=N
Se [ ! -d /etc/rc.d/rc${runlevel}.d ]; poi
log_info_msg "/etc/rc.d/rc${runlevel}.d non esiste.\n" exit 1
fi
if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; quindi IPROMPT="no"; fi
# Nota: in ${LOGLEVEL:-7}, è ':' 'trattino' '7', non meno 7 if [ "$runlevel" == "S" ]; poi
[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"
fi
if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; poi
# La lunghezza totale della stringa di benvenuto della distro, senza codici di escape wlen=${wlen:-$(echo "Benvenuto in ${DISTRO}" | wc -c )} messaggio_di_benvenuto=${messaggio_di_benvenuto:-"Benvenuto in ${INFO }${DISTRO}${NORMALE}"}
# La lunghezza totale della stringa interattiva, senza codici di escape ilen=${ilen:-$(echo "Premi 'I' per accedere all'avvio interattivo" | wc -c )}
i_message=${i_message:-"Premi '${FAILURE}I${NORMAL}' per accedere all'avvio interattivo"}
# dcol e icol sono spazi prima del messaggio per centrare il messaggio
# sullo schermo. itime è la quantità di tempo di attesa per l'utente per premere un tasto wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))
icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}
echo -e "\n\n"
echo -e "\\033[${wcol}G${messaggio_di_benvenuto}" echo -e "\\033[${icol}G${i_messaggio}${NORMALE}" echo ""
read -t "${itime}" -n 1 interattivo 2>&1 > /dev/null
fi
# Crea minuscolo
[ "${interattivo}" == "io" ] && interattivo="i" [ "${interattivo}" != "i" ] && interattivo=""
# Legge il file di stato se esiste dal runlevel S
[ -r /var/esegui/interattivo ] && source /var/esegui/interattivo
# Tentativo di interrompere tutti i servizi avviati dal precedente runlevel,
# e ucciso in questo runlevel
if [ "${precedente}" != "N" ]; poi
for i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) do
controlla_script_status
if [ "${SCRIPT_STAT}" == "1" ]; quindi SCRIPT_STAT="0"
continua
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 [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; poi
Se [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; quindi MSG="ATTENZIONE:\n\n${i} non può essere "
MSG="${MSG}eseguito perché non era " MSG="${MSG}non avviato nel precedente " MSG="${MSG}runlevel (${precedente})." log_warning_msg "$MSG"
continua
fi
fi
esegui ${i} ferma error_value=${?}
if [ "${valore_errore}" != "0" ]; quindi print_error_msg; fi fatto
fi
if [ "${precedente}" == "N" ]; quindi esporta IN_BOOT=1; fi
if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; quindi tocca /fastboot
fi
# Avvia tutte le funzioni in questo runlevel
for i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) do
if [ "${precedente}" != "N" ]; poi suffisso=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc.d/rc$runlevel.d/K[0 -9][0-9]$suffisso prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffisso
[ -f ${inizio_precedente} -a ! -f ${stop} ] && continua
fi
controlla_script_status
if [ "${SCRIPT_STAT}" == "1" ]; quindi SCRIPT_STAT="0"
continua
fi
caso ${runlevel} in 0|6)
corri ${i} fermati
;;
*)
che C
corri ${i} inizia
;;
errore_valore=${?}
if [ "${valore_errore}" != "0" ]; quindi print_error_msg; fi fatto
# Memorizza la variabile interattiva allo switch dal runlevel S e rimuove se no if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; poi
echo "interactive=\"i\"" > /var/run/interactive
altro
rm -f /var/run/interactive 2> /dev/null
fi
# Copia il log di avvio solo all'avvio iniziale
if [ "${precedente}" == "N" -a "${runlevel}" != "S" ]; quindi cat $BOOTLOG >> /var/log/boot.log
# Segna la fine dell'avvio
echo "--------" >> /var/log/boot.log
# Rimuove il file temporaneo rm -f $BOOTLOG 2> /dev/null
fi
# Fine rc
if [ "${valore_errore}" != "0" ]; quindi print_error_msg; fi fatto
# Memorizza la variabile interattiva allo switch dal runlevel S e rimuove se no if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; poi
echo "interactive=\"i\"" > /var/run/interactive
altro
rm -f /var/run/interactive 2> /dev/null
fi
# Copia il log di avvio solo all'avvio iniziale
if [ "${precedente}" == "N" -a "${runlevel}" != "S" ]; quindi cat $BOOTLOG >> /var/log/boot.log
# Segna la fine dell'avvio
echo "--------" >> /var/log/boot.log
# Rimuove il file temporaneo rm -f $BOOTLOG 2> /dev/null
fi
# Fine rc
:Gerard Beekmans- [email protected]
: DJ Lucas - [email protected]
:Bruce Dubbs- [email protected]
:Gerard Beekmans- [email protected]
: DJ Lucas - [email protected]
:Bruce Dubbs- [email protected]
:LFS 7.0
: Con codice basato su simpleinit-msb di Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
Il file dovrebbe trovarsi in /lib/lsb
:LFS 7.0
: Con codice basato su simpleinit-msb di Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
Il file dovrebbe trovarsi in /lib/lsb