Download Amministrare GNU/Linux

Transcript
5.3. LA GESTIONE DELL’AVVIO DEL SISTEMA
311
specifico runlevel (rispettivamente il 6 e lo 0) vedremo anche i vari comandi che si possono
utilizzare per eseguire queste due operazioni.
Una delle modalità in cui si può modificare il runlevel su cui una macchina viene avviata è
quella che prevede il passaggio tramite il bootloader delle opportune opzioni di avvio per il kernel
(quelle illustrate in sez. 5.3.1); alcune di queste infatti vengono passate direttamente ad init,
in particolare il passaggio di un valore numerico porta nel relativo runlevel, ed è inoltre possibile
usare l’opzione single per avviarsi in single user mode. Ovviamente questo tipo di indicazione,
fintanto che non viene impostata in maniera permanente nella configurazione del bootloader,181
vale soltanto per il singolo avvio.
Nelle operazioni ordinarie, una volta portatisi nel runlevel di default, normalmente non c’è
la necessità di dover passare dall’uno all’altro. Può capitare però di essere partiti in single user
mode, o di esservi arrivati a causa di problemi nella fase si avvio, e che una volta che si siano
completati i compiti amministrativi o si sia risolto il problema, si voglia passare ad un runlevel
ordinario. Oppure, in seguito all’insorgere di problemi, ci si può voler portare in single user
mode.
In tal caso il comando usato per cambiare runlevel è telinit; questo però non è altro che
un link allo stesso init, per cui si può usare anche direttamente quest’ultimo per compiere le
stesse operazioni. Il comando prende come argomento il numero di runlevel su cui ci si vuole
portare, e semplicemente notifica ad init, inteso qui come il processo in esecuzione con PID 1,
la richiesta di cambiamento di runlevel.182 A questo punto sarà compito di init registrare in
/var/log/wtmp il cambiamento di runlevel (vedi sez. 2.4.4) e di far eseguire prima gli script di
arresto e poi quelli di avvio secondo quanto previsto per il runlevel scelto.183
Oltre al valore numerico del runlevel di destinazione si possono passare a telinit altri
argomenti; ad esempio con “q” si indica ad init di riesaminare /etc/inittab mentre con “s”
si richiede di andare in single user mode (le lettere possono essere indifferentemente maiuscole
o minuscole). Il comando può essere anche invocato, utilizzando le opportune opzioni, per
modificare semplicemente il comportamento di init; in particolare con l’opzione -t si può
indicare un tempo diverso, rispetto ai 5 secondi di default, fra l’invio del segnale SIGINT e quello
del segnale SIGKILL quando viene eseguito l’arresto della macchina.
Variabile
PATH
RUNLEVEL
PREVLEVEL
CONSOLE
INIT_VERSION
Significato
le directory dei comandi, come illustrato in sez. 2.1.3,
inizializzata a /bin:/usr/bin:/sbin:/usr/sbin.
il runlevel corrente.
il runlevel precedente.
la console di sistema, il default è /dev/console.
la versione di init.
Tabella 5.19: Variabili di ambiente definite da init per i suoi figli.
È possibile inoltre cambiare i valori delle variabili di ambiente che init definisce per i processi
che lancia o definirne di nuove con l’opzione -e, seguita dall’assegnazione delle variabili stesse.
In generale infatti quando init esegue una delle azioni specificate in inittab definisce anche
per il processo eseguito le variabili di ambiente riportate in tab. 5.19.
Benché sia possibile arrestare una macchina o riavviarla usando direttamente i runlevel 0
e 6, è abbastanza comune effettuare queste operazioni rispettivamente con i comandi halt e
reboot. A questi si aggiunge, come sostanziale sinonimo di halt, poweroff, che richiede espli181
è questo il motivo per cui nell’estratto di configurazione di GRUB visto in sez. 5.3.3 è presente una voce
separata per l’avvio in single user mode.
182
allo scopo init usa la pipe /dev/initctl come dispositivo di controllo.
183
a condizione ovviamente che i relativi servizi siano presenti nel runlevel di partenza, non verranno cioè fermati
servizi non attivi, ne fatti partire servizi già attivi.