|
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 |
|
|
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. |
|