INIT E RUNLEVELS

Precedente
Programma
Seguente
Bastard Operator From Hell!
cat /etc/inittab
  Per verificare gli script lanciati all'avvio e quale runlevel viene utilizzato di default
ls -l /etc/rc.d/
  Lista dei file delle directory che contengono i vari script lanciati al boot
pstree
  Visualizza i processi con uno schema ad albero. Senza argomenti prende INIT come processo di partenza ed evidenzia come tutti gli altri processi discendono da lui.
chkconfig --list
  Visualizza per ogni servizio, se viene avviato o no nei diversi runlevel.
chkconfig --level 35 httpd on
  Configura l'avvio del servizio httpd nei runlevel 3 e 5
Tips & Tricks

Per fare il shutdown del sistema digitare init 0

E' necessario agire su /etc/inittab per far partire il proprio sistema in modalità grafica o testuale. La parola chiave initdefault indica il runlevel di default, se si inserisce 5 il sistema parte in modalità grafica, se si inserisce 3 parte in modalità testuale:
id:3:initdefault
NON inserire valori come 0 o 6!!!
Il sistema non riuscirebbe mai a partire correttamente.

In linea di comando digitare il comando pstree per verificare che tutti i processi nascono da init.

All'avvio del sistema è possibile schiacciando la lettera i sulla tastiera entrare in modalità interattiva cioè vi verrà chiesto servizio per servizio se dovrà essere attivato.

Molte distribuzioni Linux utilizzano path diversi per il loro script di startup, questo può disorientare l'utente e costringerlo a cercare scritp di startup e file in troppi luoghi diversi.
NON è necessario. Tutto parte da init e init si configura in /etc/inittab. Leggendo questo file è possibile ricostruire l'intero processo di boot del sistema e vedere dove risiedono tutti gli script di statup.

In ultima analisi TUTTO il mondo Linux (dagli script di gestione e avvio allo stesso codice sorgente del kernel e dei vari programmi) è visualizzabile in file ASCII editabili con VI.
Questo principio è grandioso e notevole, permettendo all'utente esperto il controllo completo del sistema.

INIT e /etc/inittab

Init è il padre di tutti i processi, il suo ruolo principale consiste nel gestire il lancio di tutti i programmi necessari per rendere il sistema attivo creare i processi a partire da uno script in /etc/inittab.
Nell'inittab vengono definite le directory con gli script di avvio per i diversi runlevel (stati del sistema, in cui possono girare determinati programmi), il runlevel di default, altri script e comandi che vengono eseguiti al boot o in condizioni particolari.

Il primo script lanciato da inittab è (su RedHat) /etc/rc.d/rc.sysinit: che esegue varie operazioni tra cui:
Impostazioni di alcuni path generali nella variabile $PATH; Configurazione dell'ambiente di rete; Avvio swap per la memoria virtuale; Impostazione del nome dell'host; Check del filesystem root; Check delle quote di spazio assegnate agli utenti, se previste; Mount del filesystem root in modalità scrittura/lettura; Preparazione del sistema per caricamento dei moduli; Check delle dipendenze dei moduli; Check di tutti i filesystem ed eventuali riparazioni; Mount di tutti i filesystem; Pulizia di file di supporto al boot e di processi non più attivi; Umount dell'initrd; Impostazione dell'orologio; Attivazione dello swapping; Inizializzazione delle porte seriali; Caricamento Moduli; Attivazione dei servizi del runlevel.
Durante la fase di file system check, se si trovano errori che non possono essere riparati automaticamente è possibile che il processo di boot si blocchi. In questo caso viene richiesta la password di root e si può da bash fare un file system check manuale. Verificare su quale partizione il kernel si è fermato e scrivere (si considera che la partizione sia /dev/hda5 e abbia ext2 come file system): fsck.ext2 /dev/hda5.
Rispondere SI a tutte le lugubri domande sulla correzione di file danneggiati.

Runlevels

Nel mondo Unix ci sono 2 principali approcci al processo di startup del sistema: quello usato da Unix System V e quello, meno complesso ma meno flessibile, usato dai BSD Unix.
Linux utilizza il primo metodo, che si basa su differenti runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi.
In genere su Linux sono utilizzati i seguenti livelli:

Runlevel 0 : /etc/rc.d/rc0.d Questo runlevel avvia la sequenza di arresto del sistema (shutdown)
Runlevel 1: /etc/rc.d/rc1.d Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato.
Runlevel 2: /etc/rc.d/rc2.d Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing.
Runlevel 3: /etc/rc.d/rc3.d In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.
Runlevel 4: /etc/rc.d/rc4.d Inutilizzato. Può essere dedicato ad usi personali
Runlevel 5: /etc/rc.d/rc5.d E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica
Runlevel 6: /etc/rc.d/rc6.d Il runlevel 6 è quello di reboot.

Lo script /etc/rc.d/rc gestisce quali processi far partire a seconda del runlevel, andando ad analizzare le singole directory /etc/rc.d/rc#.d. In queste directory esistono una serie di symlink con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/rc.d/init.d/syslog o /etc/rc.d/init.d/identd.
/etc/rc.d/rc a seconda della directory corrispondente al runlevel da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.
Gli script che di fatto permettono di gestire l'avvio o lo stop di un servizio sono quindi nella directory /etc/rc.d/init.d/ e possono essere utilizzati direttamente dall'utente per gestire i singoli processi.
Per esempio: /etc/rc.d/init.d/httpd start fa partire il server Web e /etc/rc.d/init.d/stop lo fa stoppare.
Se abbiamo il file (link a ../init/httpd ) /etc/rc.d/rc3.d/S85httpd, quindi, avremo un server web avviato quando la macchina è al run-level3 (runlevel di default per un server, che non ha bisogno di Xwindows).
Se vogliamo evitare che venga avviato un server web, bastera rinominare il file, sostituendo la K alla S:
mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd
Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l'ordine di esecuzione degli script.

Gestione dei servizi al boot
La soluzione sopra esposta per gestire quali servizi deve offrire il nostro server è effettivamente poco immediata (ma, come si è visto, piuttosto flessibile). Esistono tool che permettono di gestire più facilmente quali servizi avviare al boot.
Per esempio, su distribuzioni RedHat, utilizzando il comando ntsysv è possibile accedere ad un tool grafico (su interfaccia testuale) dedicato.
I processi identificati da un star (*) e dal nome del servizio indicano che il processo verrà attivato al boot, altrimenti i processi identificati solo dal nome del servizio e da una casella vuota indicano i processi che non verranno fatti partire.
Alternativamente si può usare il comando serviceconf su interfaccia grafica o il comando shell chkconfig.
E' molto importante disattivare tutti i processi e servizi inutili per evitare sprechi delle risorse del sistema.
WEB RESOURCES
http://www.linux.org/docs/ldp/howto/Bootdisk-HOWTO/index.html Linux bootdisk How-To e analisi del processo di boot
http://www.linux.org/docs/ldp/howto/LILO-crash-rescue-HOWTO.html Linux boot crash rescue
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/ref-guide/s1-init-boot-shutdown-init.html Red Hat Linux 7.2: The Official Red Hat Linux Reference Guide: Boot Process, Init, and Shutdown