30.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
.
The
init
command then runs the /etc/inittab
script, which describes how the system should be set up in each SysV init runlevel. Runlevels are a state, or mode, defined by the services listed in the SysV /etc/rc.d/rc<x>.d/
directory, where <x> is the number of the runlevel. For more information on SysV init runlevels, refer to Sezione 30.4, «SysV Init Runlevels».
Successivamente il comando
init
imposta la libreria di funzione della 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
cerca nella directory /etc/rc.d/rc5.d/
per determinare quali processi iniziare e quali da arrestare.
Di seguito è riportato un esempio che illustra la directory
/etc/rc.d/rc5.d/
:
Nessuno degli script che avvia e arresta 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.
The
init
command first stops all of the K
symbolic links in the directory by issuing the /etc/rc.d/init.d/<command> stop
command, where <command> is the process to be killed. It then starts all of the S
symbolic links by issuing /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
One of the last things the
init
program executes is the /etc/rc.d/rc.local
file. This file is useful for system customization. Refer to Sezione 30.3, «Esecuzione di programmi aggiuntivi durante l'avvio» for more information about using the rc.local
file.
After the
init
command has progressed through the appropriate rc
directory for the runlevel, the /etc/inittab
script forks an /sbin/mingetty
process for each virtual console (login prompt) allocated to the runlevel. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty
process opens communication pathways to tty devices[14], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
Nel runlevel 5,
/etc/inittab
esegue lo script /etc/X11/prefdm
. Lo script prefdm
esegue l'X display manager preferito[15] — gdm
, kdm
, o xdm
, a seconda dei contenuti del file /etc/sysconfig/desktop
.
Una volta terminato, il sistema è operativo sul runlevel 5, mostrando anche una schermata di login.