7.3. Come funziona il processo di boot con questi script?

Linux utilizza uno speciale servizio di boot chiamato SysVinit, basato sul concetto dei run-level. Può essere estremamente differente da un sistema ad un altro, perciò non possiamo assumere che se le cose funzionano in <inserire nome distribuzione> esse funzioneranno anche in LFS. LFS ha la sua maniera di fare le cose, ma rispetta gli standard generalmente accettati.

SysVinit (che chiameremo “init” da adesso in poi) funziona utilizzando uno schema a run-level. Ci sono 7 (da 0 a 6) run-level (attualmente ci sono più run-level, ma sono per casi speciali e generalmente non sono utilizzati. La pagina manuale di init descrive questi dettagli), ed ognuno di essi corrisponde alle cose che il computer dovrebbe fare quando si avvia. Il run-level predefinito è il 3. Qui sono elencati i differenti livelli con una descrizione di come sono solitamente implementati:

0: spegne il computer
1: modalità singolo utente
2: modalità multi-utente senza rete
3: modalità multi-utente con rete
4: riservato per la personalizzazione, altrimenti lo stesso del livello 3
5: come il livello 4, è solitamente utilizzato per il login grafico (come con  xdm per X o  kdm per KDE)
6: riavvia il computer

Il comando utilizzato per cambiare livello è init [run-level] dove [run-level] è il run-level di destinazione. Per esempio, per riavviare il computer, un utente lancerebbe il comando init 6. Il comando reboot è solo un alias per esso, così come il comando halt è un alias per init 0.

Ci sono un certo numero di directory in /etc/rc.d con nomi del tipo rc?.d (dove ? è il numero di run-level) e rcsysinit.d contenenti una serie di link simbolici. Alcuni iniziano con la lettera K, gli altri con la lettera S, e tutti hanno due numeri dopo la prima lettera. La lettera K specifica di fermare (kill) un servizio, e la S significa far partire un servizio. I numeri determinano l'ordine con cui gli script vengono avviati, da 00 a 99; più basso è il numero prima lo script verrà eseguito. Quando init cambia run-level, i servizi specificati vengono fermati e altri vengono avviati.

Gli script reali sono in /etc/rc.d/init.d. Essi eseguono tutti il lavoro e tutti i link simbolici puntano ad essi. I link di avvio e di stop dei servizi puntano entrami allo stesso script in /etc/rc.d/init.d. Questo perché gli script possono essere chiamati con parametri differenti, come start, stop, restart, reload, status. Quando si incontra un link K, lo script appropriato viene lanciato con l'argomento stop. Quando si incontra un link S, lo script appropriato viene lanciato con l'argomento start.

C'è un'eccezione. I link che iniziano con la lettera S nelle directory rc0.d e rc6.d non causano l'avvio di nessuno script. Essi vengono chiamati con il parametro stop per fermare qualche cosa. La logica dietro a questo comportamento è che durante il riavvio o lo spegnimento del sistema non deve essere avviato nulla. Il sistema deve solo essere fermato.

Queste sono le descrizioni di cosa gli argomenti fanno fare agli script:

start

Il servizio viene avviato.

stop

Il servizio viene fermato.

restart

Il servizio viene fermato e poi avviato.

reload

La configurazione del servizio viene aggiornata. E' utilizzato dopo che il file di configurazione di un servizio viene modificato e il servizio non necessita di essere riavviato.

status

Specifica se il servizio sta funzionando e con quale PID.

Sentitevi liberi di modificare il modo in cui funziona il processo di avvio (dopotutto, è il vostro sistema LFS). I file forniti sono solamente un esempio di come può essere fatto.