F.2.4. Il programma /sbin/init
Il programma
/sbin/init
(chiamato anche init
) coordina la fase restante del processo di avvio e configura l'ambiente per l'utente.
Quando il comando
init
viene eseguito, diventa il genitore di tutti i processi che si avviano automaticamente sul sistema. Innanzitutto esegue lo script /etc/rc.d/rc.sysinit
che imposta il percorso dell'ambiente, attiva lo swap, controlla i filesystem e si occupa di tutti i processi che vanno eseguiti per l'inizializzazione del sistema. Per esempio, la maggior parte dei sistemi utilizza un orologio, così rc.sysinit
legge il file di configurazione /etc/sysconfig/clock
per inizializzare l'orologio dell'hardware. Un altro esempio potrebbe essere quello con il quale è necessario inizializzare processi speciali per le porte seriali, rc.sysinit
può eseguire anche il file /etc/rc.serial
.
Il comando
init
esegue a sua volta i lavori nella directory /etc/event.d
, i quali descrivono come impostare il sistema in ogni SysV init runlevel. I runlevel sono uno stato, o una modalità, definiti dai servizi elencati nella directory SysV /etc/rc.d/rc<x>.d/
, dove <x> rappresenta il numero del runlevel. Per maggiori informazioni sui runlevel SysV init, consultare la Sezione F.4, «SysV Init Runlevels».
Successivamente il comando
init
imposta la libreria di funzione del sorgente, /etc/rc.d/init.d/functions
, per il sistema il quale a sua volta configura il modo di avvio o come eliminare e determinare il PID di un programma.
A questo punto il programma
init
avvia tutti i processi di background cercando nella relativa directory rc
, il runlevel specificato come predefinito in /etc/inittab
. Le directory rc
sono numerate in modo da corrispondere ai runlevel che rappresentano. Per esempio /etc/rc.d/rc5.d/
è la directory per il runlevel 5.
Quando si esegue l'avvio dal runlevel 5, il programma
init
và alla ricerca nella directory /etc/rc.d/rc5.d/
per determinare quali processi iniziare e quali arrestare.
Di seguito è riportato un esempio che illustra la directory
/etc/rc.d/rc5.d/
:
Come illustrato in questa lista, nessuno degli script che avviano e arrestano realmente i servizi si trova nella directory
/etc/rc.d/rc5.d/
. Tutti i file in /etc/rc.d/rc5.d/
sono link simbolici diretti a script che si trovano nella directory /etc/rc.d/init.d/
. I link simbolici sono utilizzati in ciascuna delle directory rc
per fare in modo che i runlevel possano essere riconfigurati creando, modificando ed eliminando i link simbolici senza influire sugli script a cui fanno riferimento.
Il nome di ciascun link simbolico inizia con
K
o S
. I link K
sono processi che vengono terminati, mentre quelli che iniziano con S
vengono avviati.
Il comando
init
arresta innanzitutto i link simbolici K
della directory eseguendo il comando /etc/rc.d/init.d/<command> stop
, in cui <command> è il processo da terminare. Avvia quindi tutti i link simbolici S
eseguendo il comando /etc/rc.d/init.d/<command> start
.
Nota
Una volta terminato il processo d'avvio del sistema, sarà possibile eseguire il login come utente root ed eseguire gli stessi script per avviare ed arrestare i servizi. Per esempio, il comando
/etc/rc.d/init.d/httpd stop
arresta il server HTTP di Apache.
Ciascuno dei link simbolici è numerato in modo da stabilire l'ordine di avvio. Potete modificare l'ordine in cui i servizi vengono avviati o interrotti cambiando questo numero. Più il numero è basso, prima il servizio corrispondente viene avviato. I link simbolici che presentano lo stesso numero, vengono avviati in base ad un ordine alfabetico.
Nota
Una delle ultime cose che il programma
init
esegue è il file /etc/rc.d/rc.local
. Il suddetto file è molto utile durante il processo di personalizzazione del sistema. Per maggiori informazioni su come utilizzare il file rc.local
, consultare la Sezione F.3, «Esecuzione di programmi aggiuntivi durante l'avvio».
Dopo che il comando
init
è passato attraverso la directory appropriata rc
del runlevel, Upstart dirama un processo /sbin/mingetty
per ogni console virtuale (prompt di login) assegnata al runlevel dalla definizione del lavoro nella directory /etc/event.d
. Dal runlevel 2 fino al 5 sono presenti tutte e sei le console virtuali, mentre il runlevel 1 (modalità utente singolo) ne ha solo una, ed i runlevel 0 e 6 non presentano alcuna console virtuale. Il processo /sbin/mingetty
apre alcuni percorsi di comunicazione per i dispositivi tty [16], imposta le rispettive modalità, stampa il prompt di login, accetta la password ed il nome utente ed inizializza il processo di login.
Nel runlevel 5, Upstart esegue uno script chiamato
/etc/X11/prefdm
. Lo script prefdm
esegue un X display manager preferito[17] — gdm
, kdm
, o xdm
, in base al contenuto del file /etc/sysconfig/desktop
.
Una volta terminato il sistema è operativo sul runlevel 5, e mostra anche una schermata di login.