Quando Linux viene avviato, il kernel si prende cura di avviare il processo init, a partire dal quale vengono poi generati tutti gli altri. Di solito si utilizza un meccanismo di inizializzazione derivato dallo UNIX System V.
init determina quali siano i processi da avviare successivamente, in base al contenuto di /etc/inittab il quale a sua volta fa riferimento a una serie di script normalmente contenuti all'interno della directory /etc/rc.d/.
All'interno di /etc/inittab si distinguono azioni diverse in funzione del ``livello di esecuzione'', di solito un numero da 0 a 6. Per convenzione, il livello 0 identifica solitamente le azioni necessarie per fermare l'attività del sistema, in modo da permetterne lo spegnimento; il livello 6 normalmente riavvia il sistema; il livello 1 mette il sistema in condizione di funzionare in modalità monoutente.
<!> Le distribuzioni Linux più sofisticate e confortevoli permettono di configurare il sistema attraverso dei programmi che guidano l'utente. Ciò significa che questi programmi sono in grado di produrre automaticamente script e file di configurazione tradizionali, ma per fare questo devono gestire un proprio sistema di file di configurazione che non appartiene allo standard generale.
init è il processo principale che genera tutti gli altri. All'avviamento del sistema legge il file /etc/inittab il quale contiene le informazioni per attivare gli altri processi necessari per il sistema compresa la gestione dei terminali. Per prima cosa viene determinato il livello iniziale di esecuzione (run level), ottenendo l'informazione dalla riga initdefault di /etc/inittab. Quindi vengono attivati i processi di attivazione del sistema ed infine i processi che combaciano con il livello di esecuzione attivato.
init [<opzioni>]
Durante il funzionamento del sistema, init può essere invocato per cambiare il livello di esecuzione.
-
t <secondi>
Stabilisce il numero di secondi di attesa prima di cambiare il livello di esecuzione. In mancanza si intende 20 secondi.
0 | 1 | 2 | 3 | 4 | 5 | 6
Un numero da 0 a 6 stabilisce il livello di esecuzione.
a | b | c
Una lettera a, b o c indica a init di eseguire soltanto i processi indicati all'interno di /etc/inittab che hanno un livello di esecuzione pari alla lettera specificata. In pratica, una lettera non indica un livello di esecuzione vero e proprio; si tratta di una possibilità di configurazione del file /etc/inittab per definire i cosiddetti livelli ``a richiesta'' (on demand).
Q | q
Indica a init di riesaminare il file /etc/inittab.
S | s
Indica a init di passare alla modalità monoutente (single user), ma non è pensato per essere utilizzato direttamente.
#
init 1
Pone il sistema al livello di esecuzione 1: monoutente.
#
init 0
Pone il sistema al livello di esecuzione 0: system halt.
Equivale (in linea di massima) all'esecuzione di
shutdown -
h now.
#
init 6
Pone il sistema al livello di esecuzione 6: riavvio.
Equivale (in linea di massima) all'esecuzione di
shutdown -
r now.
Il file inittab descrive quali processi vengono avviati al momento del boot del sistema e durante il funzionamento normale del sistema stesso. init, il processo principale, distingue diversi livelli di esecuzione (run level), per ognuno dei quali può essere stabilito un gruppo diverso di processi da avviare.
La struttura del record di questo file può essere schematizzata nel modo seguente.
<id>:<livelli-di-esecuzione>:<azione>:<processo>
Se il nome del processo inizia con un simbolo +, init non eseguirà l'aggiornamento di utmp e wtmp per quel processo; ciò è utile quando il processo stesso provvede da solo a questa operazione.
Il penultimo campo, identifica l'azione da compiere. Questa viene identificata da una parola chiave.
Quando il processo termina, viene riavviato.
Il processo viene avviato una volta (sempre che il livello di esecuzione lo consenta) e init attende che termini prima di eseguirne degli altri.
Il processo viene eseguito una volta quando il livello di esecuzione lo consente.
Il processo viene eseguito al momento del boot del sistema. Il campo del livello di esecuzione viene ignorato.
Il processo viene eseguito al momento del boot del sistema e init attende la fine del processo prima di proseguire. Il campo del livello di esecuzione viene ignorato.
Non fa alcunché.
Si tratta dei record cosiddetti ``a richiesta'' che vengono presi in considerazione quando viene eseguito init seguito da una lettera a, b o c che rappresentano appunto tre livelli possibili di esecuzione on demand. a, b o c non sono livelli di esecuzione, ma solo un modo per selezionare una serie di processi on demand indicati all'interno del file inittab.
Permette di definire il livello di esecuzione automaticamente definito all'avviamento del sistema. Se non viene specificato, init richiede l'inserimento di questo valore attraverso la console.
Il processo viene eseguito al momento del boot del sistema, prima di quelli indicati come boot e bootwait. Il campo del livello di esecuzione viene ignorato.
Il processo viene eseguito quando init riceve il segnale SIGPWR che indica un problema con l'alimentazione elettrica. init attende la fine del processo prima di proseguire.
Il processo viene eseguito quando init riceve il segnale SIGPWR che indica un problema con l'alimentazione elettrica. init non attende la fine del processo.
Il processo viene eseguito quando init ha ricevuto il segnale SIGPWR che indica un problema con l'alimentazione elettrica, e, contemporaneamente, è presente il file /etc/powerstatus contenente la parola OK. Ciò significa che l'alimentazione elettrica è tornata allo stato di normalità.
Il processo viene eseguito quando
init riceve il segnale SIGINT.
Ciò significa che è stata premuta la
combinazione di tasti
Il processo viene eseguito quando init riceve un segnale dal gestore della tastiera che sta ad indicare la pressione di una combinazione speciale di tasti sulla tastiera della console.
Il campo dei livelli di esecuzione può contenere diversi caratteri che stanno a indicare diversi possibili livelli di esecuzione. Per esempio, 123 indica che il processo specificato verrà eseguito indifferentemente per tutti i livelli di esecuzione da 1 a 3. Questo campo può contenere anche una lettera dell'alfabeto: a, b o c che sta a indicare un livello on demand. Nel caso di azioni del tipo sysint, boot e bootwait, il campo del livello di esecuzione viene ignorato.
Negli esempi seguenti, si mostra prima un record del file /etc/inittab e quindi, sotto, la sua descrizione.
---------
id:5:initdefault:
Definisce il livello iniziale di esecuzione: 5.
si::sysinit:/etc/rc.d/rc.sysinit
Inizializzazione del sistema: è la prima cosa a essere eseguita dopo l'avvio del sistema stesso. In pratica viene avviato lo script /etc/rc.d/rc.sysinit (RedHat).
l1:1:wait:/etc/rc.d/rc 1
Indica di eseguire /etc/rc.d/rc 1 nel caso in cui il livello di esecuzione sia pari a 1: singolo utente (RedHat)
rc:123456:wait:/etc/rc.d/rc.M
Indica lo script (/etc/rc.d/rc.M) da eseguire per tutti i livelli di esecuzione da 1 a 6 (Slackware).
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
Indica il programma da eseguire in caso di pressione
della combinazione
l0:0:wait:/etc/rc.d/rc 0
Indica di eseguire /etc/rc.d/rc 0 nel caso in cui il livello di esecuzione sia pari a 0: system halt (RedHat).
l6:6:wait:/etc/rc.d/rc 6
Indica di eseguire /etc/rc.d/rc 6 nel caso in cui il livello di esecuzione sia pari a 6: riavvio (RedHat).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
Indica il programma da eseguire quando si verifica un problema con l'alimentazione elettrica (Slackware).
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
Indica il programma da eseguire se l'alimentazione elettrica torna normale prima del completamento del processo avviato quando si era verificato il problema (Slackware).
1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
Si tratta dell'elenco di console virtuali utilizzabili. La prime si attiva per tutti i livelli di esecuzione da 1 a 5, le altre solo per i livelli superiori ad 1. Responsabile dell'attivazione delle console, come della connessione di tutti i terminali, è, in questo caso, mingetty (RedHat).
s1:45:respawn:/sbin/agetty 19200 ttyS0 vt100
Indica l'attivazione di un terminale connesso sulla prima porta seriale. Si attiva solo con i livelli di esecuzione 4 o 5 (Slackware).
d2:45:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100
Indica l'attivazione di un terminale remoto connesso via modem sulla seconda porta seriale. Si attiva solo con i livelli di esecuzione 4 o 5 (Slackware).
x:5:respawn:/usr/bin/X11/xdm -nodaemon
Nel caso il livello di esecuzione sia pari a 5, esegue /usr/bin/X11/xdm che si occupa di avviare un login all'interno dell'ambiente grafico X Window System (RedHat).
Quando lo script di shell /etc/initscript esiste, viene utilizzato da init per avviare i processi indicati all'interno del file /etc/inittab. Di solito questo script non è presente.
Si tratta di una serie di script di shell eseguiti direttamente o indirettamente attraverso le indicazioni contenute nel file /etc/inittab. Questo gruppo di script può essere diverso da un sistema all'altro a seconda della distribuzione di Linux o a seconda della versione.
Una convenzione diffusa fa sì che questo script faccia parte della procedura di avvio della maggior parte delle distribuzioni Linux. Questo script viene eseguito alla fine della procedura stessa ed è per questo disponibile per le variazioni locali da apportare al sistema. Volendo fare un'associazione con il sistema Dos, si potrebbe paragonare questo script al file AUTOEXEC.BAT.
1997.10.26 - Scritto da Daniele Giacomini daniele@calion.com (vedi copyright: Appunti Linux).