7.3. Come funziona il processo di avvio 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 una particolare distribuzione Linux, esse funzioneranno anche in LFS. LFS ha il suo modo 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. Vedere init(8) per maggiori 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 quale è solo un alias del comando reboot. Così come il comando init 0 è un alias per il comando halt .

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, dipendendo dal runlevel scelto.

Gli script reali sono in /etc/rc.d/init.d. Essi eseguono 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, e 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 a questa spiegazione. 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. È 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.

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