Init runLevel

(su Ubuntu non non e' presente /etc/inittab ma si parte da /etc/init.d/...)

Un runlevel, tecnicamente parlando, e' una configurazione software del sistema che permette l'esistenza solo di un gruppo selezionato di processi. Piu' semplicemente, un runlevel e' uno stato del sistema in cui possono venire compiute solo determinate operazioni. I runlevel sono sette, enumerati da 0 a 6.

Come processo principale, init ha PID uguale ad uno; il PID (Process ID) e' un numero, assegnato automaticamente secondo sequenza dal sistema, che identifica univocamente un processo

Utilizzando il comando "ps", che visualizza i processi attivi, con l’opzione "x", che riporta i processi avviati senza terminale di controllo

PID TTY STAT TIME COMMAND 
1 ? S 0:05 init [2]

Le colonne che ci interessano sono PID, TTY (terminale su cui e' in esecuzione il programma), STAT (lo stato del programma stesso; S e' sinonimo di sleeping) e COMMAND, che ovviamente mostra il nome del programma.

L'init viene chiamato in causa all'avvio dopo il boot del kernel e, come prima cosa, legge il file /etc/inittab per trovare il runlevel di default al quale portare il sistema

il file /etc/inittab, nel quale sono presenti le righe:

l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 

Vediamo innanzitutto la sintassi di queste righe, riportabile al modello:

id:runlevel:azione:processo

Quindi, al runlevel che ci interessa esaminare, per esempio il secondo, viene invocata l'azione "wait", che indica ad init di avviare il processo ed attenderne la terminazione; il processo che viene avviato e' /etc/init.d/rc con un "2" come argomento. Cos'e' questo programma "rc" che viene richiamato? Esso non è altro che uno script di shell, che, dopo opportuni controlli ed accorgimenti, si porta nella directory /etc/rcX.d cioe' /etc/rc2.d

dir /etc/rc2.d

il cui output e':

S10sysklogd S20anacron S20gpm S20makedev S50proftpd S99rmnologin S12kerneld S20apmd S20inetd S20postgresql S89cron S14ppp S20exim S20logoutd S20xfs S91apache 

Come vedete, ogni file ha il nome composto da tre parti: una S o una K (in questo caso solo una S!) che indicano se il processo deve essere avviato (S = start) o interrotto (K = kill), un numero, che indica la priorita' con cui questi devono essere avviati ed il nome del processo.

per esempio S91apache cioe' start di apcahe con priorita' 91