Capitolo 7. init

Sommario
init prima di tutto
Configurazione di init per inizializzare le getty: il file /etc/inittab
I runlevel
Configurazioni speciali in /etc/inittab
Fare il boot in modalità utente singolo

"Uuno on numero yksi" (Slogan da una serie di film finlandesi.)

Questo capitolo descrive init, che è il primo processo a livello utente inizializzato dal kernel. init ha molti compiti importanti, come inizializzare le getty (in modo che gli utenti si possano collegare), implementare i runlevel e prendersi cura dei processi orfani. Questo capitolo spiega come si configura init e come si possano usare i diversi runlevel.

init prima di tutto

init è uno di quei programmi essenziali per il funzionamento di un sistema Linux, ma che si possono quasi sempre ignorare. Una buona distribuzione di Linux avrà una configurazione di init che funzioni con la maggior parte dei sistemi e su questi non ci sarà bisogno di fargli niente. Di solito preoccuparsi di init serve solo se agganciate terminali seriali, modem in ingresso (non in uscita) o se volete cambiare il runlevel di default.

Quando il kernel si è avviato (cioè quando è stato caricato in memoria, si è inizializzato ed ha inizializzato tutti i driver di device, le strutture dati e cose del genere) finisce la sua parte del processo di boot facendo partire un programma a livello utente: init. init è quindi sempre il primo processo (e il suo numero di processo è sempre 1).

Il kernel cerca init in alcuni posti in cui viene tenuto storicamente, ma il suo posto corretto (su un sistema Linux) è /sbin/init. Se il kernel non trova init prova ad avviare /bin/sh e se non riesce a fare neanche quello l'avvio del sistema fallisce.

Quando init parte completa il processo di boot portando a termine diversi compiti di amministrazione, come il controllo dei filesystem, la pulizia di /tmp, l'avvio di svariati servizi e di una getty per ogni terminale e console virtuale a cui si possano collegare gli utenti (vedere il Capitolo 8).

Dopo che il sistema è partito correttamente, ogni volta che un utente si scollega init fa ripartire una getty nel terminale corrispondente (in modo che l'utente successivo possa ricollegarsi). init adotta anche i processi orfani: quando un processo avvia un processo figlio e muore prima di esso, quest'ultimo diventa figlio di init; è importante per varie ragioni tecniche, ma è bene saperlo, perché facilita la comprensione degli elenchi e degli alberi dei processi[1]. Sono disponibili anche alcune varianti di init: la maggior parte dei sistemi Linux usano sysvinit (scritto da Miquel van Smoorenburg), che è basato sull'init del System V. Le versioni BSD di Unix hanno un init diverso. La differenza principale sono i runlevel: il BSD non ce l'ha (almeno tradizionalmente), ma non è una differenza essenziale. Noi vedremo solo il sysvinit.

Note

[1]

init non può morire: non si può uccidere nemmeno con SIGKILL.