SysV: differenze tra le versioni
Nessun oggetto della modifica |
|||
Riga 2: | Riga 2: | ||
=SystemV: il boot di Debian= | =SystemV: il boot di Debian= | ||
==Struttura== | ==Struttura== | ||
Debian ha scelto, come proprio sistema di boot, il SysV, che si distingue per la propria semplicità e potenza | Debian ha scelto, come proprio sistema di boot, il SysV, che si distingue per la propria semplicità e potenza. | ||
Infatti, è basata su degli script sensibili a determinate azioni, che vengono linkati | Infatti, è basata su degli script sensibili a determinate azioni, che vengono linkati a delle directory predefinite (rappresentanti determinati init ovvero livelli o stati a cui si trova la macchina). | ||
Esaminiamo nel dettaglio la struttura di questo interessante sistema, così da capire meglio cosa avviene esattamente al boot della macchina. | Esaminiamo nel dettaglio la struttura di questo interessante sistema, così da capire meglio cosa avviene esattamente al boot della macchina. | ||
==Gli script di init.d== | ==Gli script di <code>init.d</code>== | ||
Nella directory /etc/init.d sono presenti degli script particolari: il loro compito è quello di gestire i demoni (o servizi, che dir si voglia) | Nella directory <code>/etc/init.d</code> sono presenti degli script particolari: il loro compito è quello di gestire i demoni (o servizi, che dir si voglia) quindi di avviarli, fermarli, far rileggere i file di configurazione, controllarne lo stato, nel modo più semplice e comodo. | ||
Di default, infatti, sono sempre presenti 3 opzioni: | Di default, infatti, sono sempre presenti 3 opzioni: | ||
; start : che lancia in esecuzione il demone | ; <code>start</code> : che lancia in esecuzione il demone; | ||
; stop : che si occupa di fermare correttamente il demone | ; <code>stop</code> : che si occupa di fermare correttamente il demone; | ||
; restart : che si occupa di riavviare il demone (stop + start) | ; <code>restart</code> : che si occupa di riavviare il demone (stop + start). | ||
A questi si aggiungono, poi: | |||
; reload : permette la rilettura del file di configurazione | ; <code>reload</code> : permette la rilettura del file di configurazione; | ||
; force-reload : come sopra, ma in maniera forzata | ; <code>force-reload</code> : come sopra, ma in maniera forzata; | ||
; status : mostra a video lo stato del demone | ; <code>status</code> : mostra a video lo stato del demone; | ||
; stats | ; <code>stats</code> : visualizza delle statistiche sul lavoro del demone. | ||
Sapere come funziona uno script contenuto in /etc/init.d è utile, in quanto ci permette di utilizzarli anche da shell | Sapere come funziona uno script contenuto in <code>/etc/init.d</code> è utile, in quanto ci permette di utilizzarli anche da shell. | ||
Infatti, se ad esempio volessimo far partire | Infatti, se ad esempio volessimo far partire Apache, sarebbe necessario lanciare un semplice: | ||
<pre> | <pre> | ||
# /etc/init.d/apache start | # /etc/init.d/apache start | ||
Riga 28: | Riga 28: | ||
ed il gioco è fatto!!! | ed il gioco è fatto!!! | ||
==I vari rcX.d== | ==I vari <code>rcX.d</code>== | ||
Come | Come accenato nell'introduzione, gli script sono linkati in alcune directory 'speciali', che ora analizzeremo. | ||
I nomi di queste directory sono sempre nella forma | I nomi di queste directory sono sempre nella forma <code>rcX.d</code>, dove X rappresenta uno stato tra quelli seguenti: | ||
==="0" Shutdown=== | ==="0" Shutdown=== | ||
Riga 36: | Riga 36: | ||
==="1" Single User=== | ==="1" Single User=== | ||
In questo stato, è consentito l'accesso ad un utente solo, e gran parte dei servizi non vengono avviati; è usato prevalentemente per la manutenzione straordinaria della macchina | In questo stato, è consentito l'accesso ad un utente solo, e gran parte dei servizi non vengono avviati; è usato prevalentemente per la manutenzione straordinaria della macchina. | ||
==="2-5" Modalità Normali=== | ==="2-5" Modalità Normali=== | ||
In Debian non esistono distinzioni tra gli stati 2, 3, 4 e 5 e viene lasciata all'utente la possibilità di modificarli | In Debian non esistono distinzioni tra gli stati 2, 3, 4 e 5 e viene lasciata all'utente la possibilità di modificarli. Di default viene utilizzato il 2. | ||
==="6" Reboot=== | ==="6" Reboot=== | ||
Riga 49: | Riga 49: | ||
==Configurazione manuale dei runlevel== | ==Configurazione manuale dei runlevel== | ||
===Configurazione del sistema=== | ===Configurazione del sistema=== | ||
Il sistema di gestione dei runlevel è configurabile tramite il file '''/etc/inittab''' (è presente una guida a questo file, accessibile tramite il comando | Il sistema di gestione dei runlevel è configurabile tramite il file <code>'''/etc/inittab'''</code> (è presente una guida a questo file, accessibile tramite il comando <code>man inittab</code>). | ||
In questo file vengono definiti i comportamenti principali del sistema. | In questo file vengono definiti i comportamenti principali del sistema. | ||
Riga 58: | Riga 58: | ||
</pre> | </pre> | ||
con le seguenti informazioni: | con le seguenti informazioni: | ||
; id : rappresenta una voce specifica dell'inittab. Per quanto riguarda la configurazione delle console, viene solitamente usato il numero della console; | ; <code>id </code>: rappresenta una voce specifica dell'inittab. Per quanto riguarda la configurazione delle console, viene solitamente usato il numero della console; | ||
; runlevel : viene usato per indicare in quali runlevel deve essere analizzata l'istruzione. Possono essere specificati uno o più runlevel: | ; <code>runlevel</code> : viene usato per indicare in quali runlevel deve essere analizzata l'istruzione. Possono essere specificati uno o più runlevel: | ||
::*''123'' indica che l'istruzione verrà considerata nei runlevel 1, 2 e 3; | ::*<code>''123''</code> indica che l'istruzione verrà considerata nei runlevel 1, 2 e 3; | ||
::*''1'' indica che verrà presa in considerazione solo nel runlevel 1. | ::*<code>''1''</code> indica che verrà presa in considerazione solo nel runlevel 1. | ||
; azione : indica l'azione da compiere. Le più usate sono: | ; <code>azione</code> : indica l'azione da compiere. Le più usate sono: | ||
:; wait : il sistema attende il termine dell'esecuzione del comando; | :; <code>wait</code> : il sistema attende il termine dell'esecuzione del comando; | ||
:; respawn : il comando indicato viene eseguito ciclicamente ogni volta che esso termina; | :; <code>respawn</code> : il comando indicato viene eseguito ciclicamente ogni volta che esso termina; | ||
:; boot : il comando viene eseguito durante il boot (il contenuto di | :; <code>boot</code> : il comando viene eseguito durante il boot (il contenuto di <code>runlevel</code> viene ignorato); | ||
:; initdefault : usato per indicare il runlevel di default; | :; <code>initdefault</code> : usato per indicare il runlevel di default; | ||
:; sysinit : il comando viene eseguito durante il boot del sistema, prima di ogni comando con azione uguale a | :; <code>sysinit</code> : il comando viene eseguito durante il boot del sistema, prima di ogni comando con azione uguale a <code>boot</code>; | ||
;: ctrlaltdel : cosa deve essere fatto quando si riceve il segnale | ;: <code>ctrlaltdel</code> : cosa deve essere fatto quando si riceve il segnale <code>SIGINT</code>; | ||
; comando : il comando da eseguire. | ; <code>comando</code> : il comando da eseguire. | ||
====Runlevel di Default==== | ====Runlevel di Default==== | ||
Riga 77: | Riga 77: | ||
id:2:initdefault: | id:2:initdefault: | ||
</pre> | </pre> | ||
In questo esempio (preso da una Debian Box) il runlevel di default è il '''2'''. <br/> | In questo esempio (preso da una Debian Box) il runlevel di default è il <code>'''2'''</code>. <br/> | ||
Per modificarlo è sufficiente modificare il numero racchiuso tra i caratteri '':''. | Per modificarlo è sufficiente modificare il numero racchiuso tra i caratteri '':''. | ||
Riga 87: | Riga 87: | ||
</pre> | </pre> | ||
Specifica cosa fare durante l'avvio del sistema (a meno che non venga avviato in modalità di emergenza). | Specifica cosa fare durante l'avvio del sistema (a meno che non venga avviato in modalità di emergenza). | ||
; si : sta per ''sistem initialization''. | ; <code>si</code> : sta per ''sistem initialization''. | ||
Lo script '''/etc/init.d/rcS''' ha la funzione di invocare tutti gli script '''S*''' contenuti in '''/etc/rcS.d/''' in ordine numerico/alfabetico. | Lo script <code>'''/etc/init.d/rcS'''</code> ha la funzione di invocare tutti gli script <code>'''S*'''</code> contenuti in <code>'''/etc/rcS.d/'''</code> in ordine numerico/alfabetico. | ||
====Comportamento in Modalità Singolo Utente==== | ====Comportamento in Modalità Singolo Utente==== | ||
Riga 118: | Riga 118: | ||
In questa parte del file di configurazione vengono specificati gli script da lanciare per ogni runlevel: | In questa parte del file di configurazione vengono specificati gli script da lanciare per ogni runlevel: | ||
'''lX''', con ''X'' un numero rappresentante il runlevel, indica il runlevel (lo stesso numero deve essere indicato anche nel campo ''runlevel''). | <code>'''lX'''</code>, con <code>''X''</code> un numero rappresentante il runlevel, indica il runlevel (lo stesso numero deve essere indicato anche nel campo ''runlevel''). | ||
Lo script '''/etc/init.d/rc''' si occupa di lanciare, in ordine numerico/alfabetico, gli script presenti in '''/etc/rcX.d/''', partendo per quelli '''K*''' per passare a quelli '''S*'''; accetta come parametro il numero del runlevel. | Lo script <code>'''/etc/init.d/rc'''</code> si occupa di lanciare, in ordine numerico/alfabetico, gli script presenti in <code>'''/etc/rcX.d/'''</code>, partendo per quelli <code>'''K*'''</code> per passare a quelli <code>'''S*'''</code>; accetta come parametro il numero del runlevel. | ||
====Pressione di CTRL + ALT + CANC==== | ====Pressione di <code>CTRL + ALT + CANC</code>==== | ||
<pre> | <pre> | ||
# What to do when CTRL-ALT-DEL is pressed. | # What to do when CTRL-ALT-DEL is pressed. | ||
Riga 128: | Riga 128: | ||
</pre> | </pre> | ||
Il comando da eseguire alla pressione della combinazione di tasti '''CTRL + ALT + CANC''' è facilmente personalizzabile tramite l'istruzione sopra riportata. In questo caso viene chiamato il comando ''/sbin/shutdown'' che con quelle opzioni controlla il contenuto di '''/etc/shutdown.allow''' per gli utenti abilitati all'esecuzione del comando (''-a''), esegue un reboot (''-r''), aspetta un secondo prima di iniziare tutta la procedura di spegnimento (''-t1''), esegue il comando subito (''now''). Per maggiori informazioni riguardo la personalizzazione del comando si rimanda alla pagina di manuale di shutdown (''man shutdown''). | Il comando da eseguire alla pressione della combinazione di tasti <code>'''CTRL + ALT + CANC'''</code> è facilmente personalizzabile tramite l'istruzione sopra riportata. In questo caso viene chiamato il comando <code>''/sbin/shutdown''</code> che con quelle opzioni controlla il contenuto di <code>'''/etc/shutdown.allow'''</code> per gli utenti abilitati all'esecuzione del comando (<code>''-a''</code>), esegue un reboot (<code>''-r''</code>), aspetta un secondo prima di iniziare tutta la procedura di spegnimento (<code>''-t1''</code>), esegue il comando subito (<code>''now''</code>). Per maggiori informazioni riguardo la personalizzazione del comando si rimanda alla pagina di manuale di shutdown (<code>''man shutdown''</code>). | ||
È possibile disattivare questa caratteristica commentando la riga. | È possibile disattivare questa caratteristica commentando la riga. | ||
Riga 162: | Riga 162: | ||
Ricordando quanto imparato in precedenza capiamo che abbiamo 6 console virtuali nei runlevel 2, 3, 4 e 5 e una sola nei 4 e 5. Se la nostra macchina non ha molta ram e vogliamo risparmiarne un po', possiamo commentare le console 2-6. | Ricordando quanto imparato in precedenza capiamo che abbiamo 6 console virtuali nei runlevel 2, 3, 4 e 5 e una sola nei 4 e 5. Se la nostra macchina non ha molta ram e vogliamo risparmiarne un po', possiamo commentare le console 2-6. | ||
Se, invece, volessimo abilitare una console virtuale sulla porta seriale, è sufficiente decommentare la riga che inizia con ''T0'' (per averne una in ascolto sulla prima porta seriale). | Se, invece, volessimo abilitare una console virtuale sulla porta seriale, è sufficiente decommentare la riga che inizia con <code>''T0''</code> (per averne una in ascolto sulla prima porta seriale). | ||
Per maggiori informazioni sulla personalizzazione delle console virtuali, ''man getty''. | Per maggiori informazioni sulla personalizzazione delle console virtuali, <code>''man getty''</code>. | ||
===Gestione dei runlevel (update-rc.d)=== | ===Gestione dei runlevel (<code>update-rc.d</code>)=== | ||
La gestione ''manuale'' dei runlevel (per gestione intendo, ovviamente, la modifica degli script assegnati ad ogni runlevel) è estremamente semplice, soprattutto con l'ausilio di '''update-rc.d'''. | La gestione ''manuale'' dei runlevel (per gestione intendo, ovviamente, la modifica degli script assegnati ad ogni runlevel) è estremamente semplice, soprattutto con l'ausilio di <code>'''update-rc.d'''</code>. | ||
Il suo utilizzo è estremamente semplice. | Il suo utilizzo è estremamente semplice. | ||
Riga 177: | Riga 177: | ||
update-rc.d [-n] [-f] name remove | update-rc.d [-n] [-f] name remove | ||
</pre> | </pre> | ||
consente la rimozione di tutti i link nei runlevel relativi al demone ''name'' | consente la rimozione di tutti i link nei runlevel relativi al demone <code>''name''</code> | ||
; -n : non esegue il comando, ma mostra cosa verrebbe svolto; | ; <code>-n</code> : non esegue il comando, ma mostra cosa verrebbe svolto; | ||
; -f : forza l'eliminazione dei link anche se è ancora presente lo script in '''/etc/init.d/'''. | ; <code>-f</code> : forza l'eliminazione dei link anche se è ancora presente lo script in <code>'''/etc/init.d/'''</code>. | ||
<pre> | <pre> | ||
update-rc.d [-n] name defaults [NN | NN-start NN-stop] | update-rc.d [-n] name defaults [NN | NN-start NN-stop] | ||
</pre> | </pre> | ||
crea il link di avvio allo script '''/etc/init.d/''name''''' secondo i [[#Valori di default | valori di default]]. È possibile sovrascrivere l'ordine con cui verrà eseguito lo script specificando le due cifre (''NN''), inoltre è possibile fornire valori | crea il link di avvio allo script <code>'''/etc/init.d/''name''''''</code> secondo i [[#Valori di default | valori di default]]. È possibile sovrascrivere l'ordine con cui verrà eseguito lo script specificando le due cifre (<code>''NN''</code>), inoltre è possibile fornire valori diversi sia per l'avvio (<code>''NN-start''</code>) che per l'arresto (<code>''NN-stop''</code>). | ||
Riga 191: | Riga 191: | ||
update-rc.d [-n] name start|stop NN runlevel runlevel ... . start|stop NN runlevel runlevel ... . ... | update-rc.d [-n] name start|stop NN runlevel runlevel ... . start|stop NN runlevel runlevel ... . ... | ||
</pre> | </pre> | ||
crea il link di avvio|arresto allo script ''name'' specificando l'ordine (''NN'') e il/i runlevel. Il carattere ''.'' separa dichiarazioni multiple. | crea il link di avvio|arresto allo script <code>''name''</code> specificando l'ordine (<code>''NN''</code>) e il/i runlevel. Il carattere <code>''.''</code> separa dichiarazioni multiple. | ||
Vengono riportati alcuni esempi pratici (script ''xdm''): | Vengono riportati alcuni esempi pratici (script <code>''xdm''</code>): | ||
====Aggiunta di un link==== | ====Aggiunta di un link==== | ||
Riga 229: | Riga 229: | ||
====Valori di Default==== | ====Valori di Default==== | ||
I valori di default utilizzati sono i seguenti: | I valori di default utilizzati sono i seguenti: | ||
* lo script viene lanciato con l'opzione ''start'' nei runlevel 2, 3, 4 e 5; | * lo script viene lanciato con l'opzione <code>''start''</code> nei runlevel 2, 3, 4 e 5; | ||
* lo script viene lanciato con l'opzione ''stop'' nei runlevel 0, 1 e 6 | * lo script viene lanciato con l'opzione <code>''stop''</code> nei runlevel 0, 1 e 6 | ||
* l'ordine è impostato a 20 | * l'ordine è impostato a 20 | ||
Riga 239: | Riga 239: | ||
[[Immagine:Sysv-rc-conf.png|thumb|center|Screenshot di sysv-rc-conf]] | [[Immagine:Sysv-rc-conf.png|thumb|center|Screenshot di sysv-rc-conf]] | ||
Il suo utilizzo è semplice quanto immediato: nella schermata di gestione appare una matrice dove sulle righe sono presenti i servizi (è possibile spostarsi coi tasti cursore oppure scorrere la lista con CTRL + n e CTRL + p), la presenza di una '''X''' (modificabile tramite la barra spaziatrice) indica che il servizio verrà avviato per il runlevel indicato nella colonna. Come si nota subito, l'interfaccia non permette di specificare l'ordine con cui verranno lanciati i servizi, inoltre non è possibile specificare eventuali servizi da terminare all'ingresso in un determinato runlevel. | Il suo utilizzo è semplice quanto immediato: nella schermata di gestione appare una matrice dove sulle righe sono presenti i servizi (è possibile spostarsi coi tasti cursore oppure scorrere la lista con <code>CTRL + n</code> e <code>CTRL + p</code>), la presenza di una <code>'''X'''</code> (modificabile tramite la barra spaziatrice) indica che il servizio verrà avviato per il runlevel indicato nella colonna. Come si nota subito, l'interfaccia non permette di specificare l'ordine con cui verranno lanciati i servizi, inoltre non è possibile specificare eventuali servizi da terminare all'ingresso in un determinato runlevel. | ||
Un'altra funzione degna di nota è la possibilità di avviare e terminare direttamente da questa schermata i servizi. È possibile, infatti, farlo tramite i tasti '''+''' (start, avvio) e '''-''' (stop, arresto) dopo essersi posizionati sulla riga relativa al servizio. | Un'altra funzione degna di nota è la possibilità di avviare e terminare direttamente da questa schermata i servizi. È possibile, infatti, farlo tramite i tasti <code>'''+'''</code> (start, avvio) e <code>'''-'''</code> (stop, arresto) dopo essersi posizionati sulla riga relativa al servizio. | ||
===sysvconfig=== | ===sysvconfig=== | ||
Sysvconfig è un tool molto comodo e funzionale, che permette di moficare i vari runlevel visualizzandoli in una | Sysvconfig è un tool molto comodo e funzionale, che permette di moficare i vari runlevel visualizzandoli in una comoda griglia. Una volta posizionati sulla casella da modificare è sufficiente cancellarne il contenuto con il tasto <code>[canc]</code> e inserire l'indicazione <code>Sxx</code> o <code>Kxx</code> (dove il numero <code>''xx''</code> rappresenta l'ordine con il quale deve essere eseguito lo script). | ||
[[Immagine:Sysvconfig.png|thumb|center|Screenshot di sysvconfig]] | [[Immagine:Sysvconfig.png|thumb|center|Screenshot di sysvconfig]] | ||
===rcconf=== | ===rcconf=== | ||
Rcconf è forse il più semplice programma per la gestione dei demoni che vengono lanciati all'avvio del sistema | Rcconf è forse il più semplice programma per la gestione dei demoni che vengono lanciati all'avvio del sistema. | ||
È in grado, infatti, di generare automaticamente una lista degli script che verranno lanciati all'avvio del sistema, lasciando all'utente solo la possibilità di attivarli o disattivarli. | È in grado, infatti, di generare automaticamente una lista degli script che verranno lanciati all'avvio del sistema, lasciando all'utente solo la possibilità di attivarli o disattivarli. | ||
Riga 260: | Riga 260: | ||
Al primo avvio viene chiesto di specificare il sistema sul quale viene eseguito (Linux -> Debian GNU/Linux). | Al primo avvio viene chiesto di specificare il sistema sul quale viene eseguito (Linux -> Debian GNU/Linux). | ||
La schermata che ci viene proposta è comoda e ben organizzata: a sinistra abbiamo la lista dei servizi disponibili. A seguire la lista dei runlevel (colonne) suddivisi in due celle: in alto i servizi da avviare, in basso quelli da arrestare. | La schermata che ci viene proposta è comoda e ben organizzata: a sinistra abbiamo la lista dei servizi disponibili. A seguire la lista dei runlevel (colonne) suddivisi in due celle: in alto i servizi da avviare, in basso quelli da arrestare. Cliccando su un servizio in un runlevel si possono modificare le impostazioni. Per inserire un servizio è sufficiente trascinarlo nel runlevel designato, come per cancellarlo da un runlevel è sufficiente spostarlo nel cestino ;) . | ||
[[Immagine:Ksysv.png|thumb|center|Screenshot di KsysV]] | [[Immagine:Ksysv.png|thumb|center|Screenshot di KsysV]] | ||
==rc.local e rc.local_shutdown== | ==<code>rc.local</code> e <code>rc.local_shutdown</code>== | ||
Alcuni distribuzioni (Slackware per esempio) utilizzano i file /etc/rc.local e /etc/rc.local_shutdown per dare all'amministratore la possibilità di eseguire dei comandi specifici per un certo sistema all' | Alcuni distribuzioni (Slackware per esempio) utilizzano i file <code>/etc/rc.local</code> e <code>/etc/rc.local_shutdown</code> per dare all'amministratore la possibilità di eseguire dei comandi specifici per un certo sistema all'avvio e allo spegnimento della macchina. | ||
In Debian lo stesso effetto può essere ottenuto con un singolo script, (lo chiameremo ''/etc/init.d/local'' in questo esempio). Lo schema generico dello script è: | In Debian lo stesso effetto può essere ottenuto con un singolo script, (lo chiameremo <code>''/etc/init.d/local''</code> in questo esempio). Lo schema generico dello script è: | ||
<pre> | <pre> |
Versione delle 13:47, 17 gen 2010
SystemV: il boot di Debian
Struttura
Debian ha scelto, come proprio sistema di boot, il SysV, che si distingue per la propria semplicità e potenza. Infatti, è basata su degli script sensibili a determinate azioni, che vengono linkati a delle directory predefinite (rappresentanti determinati init ovvero livelli o stati a cui si trova la macchina).
Esaminiamo nel dettaglio la struttura di questo interessante sistema, così da capire meglio cosa avviene esattamente al boot della macchina.
Gli script di init.d
Nella directory /etc/init.d
sono presenti degli script particolari: il loro compito è quello di gestire i demoni (o servizi, che dir si voglia) quindi di avviarli, fermarli, far rileggere i file di configurazione, controllarne lo stato, nel modo più semplice e comodo.
Di default, infatti, sono sempre presenti 3 opzioni:
start
- che lancia in esecuzione il demone;
stop
- che si occupa di fermare correttamente il demone;
restart
- che si occupa di riavviare il demone (stop + start).
A questi si aggiungono, poi:
reload
- permette la rilettura del file di configurazione;
force-reload
- come sopra, ma in maniera forzata;
status
- mostra a video lo stato del demone;
stats
- visualizza delle statistiche sul lavoro del demone.
Sapere come funziona uno script contenuto in /etc/init.d
è utile, in quanto ci permette di utilizzarli anche da shell.
Infatti, se ad esempio volessimo far partire Apache, sarebbe necessario lanciare un semplice:
# /etc/init.d/apache start
ed il gioco è fatto!!!
I vari rcX.d
Come accenato nell'introduzione, gli script sono linkati in alcune directory 'speciali', che ora analizzeremo.
I nomi di queste directory sono sempre nella forma rcX.d
, dove X rappresenta uno stato tra quelli seguenti:
"0" Shutdown
Quando la macchina viene messa in questo stato, vengono arrestati tutti i demoni, smontate le periferiche e la macchina viene preparata per lo spegnimento.
"1" Single User
In questo stato, è consentito l'accesso ad un utente solo, e gran parte dei servizi non vengono avviati; è usato prevalentemente per la manutenzione straordinaria della macchina.
"2-5" Modalità Normali
In Debian non esistono distinzioni tra gli stati 2, 3, 4 e 5 e viene lasciata all'utente la possibilità di modificarli. Di default viene utilizzato il 2.
"6" Reboot
Quando la macchina viene portata in questo stato, viene preparata per un riavvio; avvengono tutte le cose indicate per rc0.d, ma viene inviato un segnale di reboot invece che di shutdown.
"S" Boot
Runlevel speciale, che viene eseguito sempre al boot della macchina, prima di passare al runlevel di default (in Debian è il 2).
Configurazione manuale dei runlevel
Configurazione del sistema
Il sistema di gestione dei runlevel è configurabile tramite il file /etc/inittab
(è presente una guida a questo file, accessibile tramite il comando man inittab
).
In questo file vengono definiti i comportamenti principali del sistema.
La struttura delle istruzioni è la seguente:
id:runlevel:azione:comando
con le seguenti informazioni:
id
- rappresenta una voce specifica dell'inittab. Per quanto riguarda la configurazione delle console, viene solitamente usato il numero della console;
runlevel
- viene usato per indicare in quali runlevel deve essere analizzata l'istruzione. Possono essere specificati uno o più runlevel:
123
indica che l'istruzione verrà considerata nei runlevel 1, 2 e 3;1
indica che verrà presa in considerazione solo nel runlevel 1.
azione
- indica l'azione da compiere. Le più usate sono:
wait
- il sistema attende il termine dell'esecuzione del comando;
respawn
- il comando indicato viene eseguito ciclicamente ogni volta che esso termina;
boot
- il comando viene eseguito durante il boot (il contenuto di
runlevel
viene ignorato); initdefault
- usato per indicare il runlevel di default;
sysinit
- il comando viene eseguito durante il boot del sistema, prima di ogni comando con azione uguale a
boot
; ctrlaltdel
: cosa deve essere fatto quando si riceve il segnaleSIGINT
;
comando
- il comando da eseguire.
Runlevel di Default
# The default runlevel. id:2:initdefault:
In questo esempio (preso da una Debian Box) il runlevel di default è il 2
.
Per modificarlo è sufficiente modificare il numero racchiuso tra i caratteri :.
Script di inizializzazione del sistema
# Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS
Specifica cosa fare durante l'avvio del sistema (a meno che non venga avviato in modalità di emergenza).
si
- sta per sistem initialization.
Lo script /etc/init.d/rcS
ha la funzione di invocare tutti gli script S*
contenuti in /etc/rcS.d/
in ordine numerico/alfabetico.
Comportamento in Modalità Singolo Utente
# What to do in single-user mode. ~~:S:wait:/sbin/sulogin
Comportamento per ogni Runlevel
# /etc/init.d executes the S and K scripts upon change # of runlevel. # # Runlevel 0 is halt. # Runlevel 1 is single-user. # Runlevels 2-5 are multi-user. # Runlevel 6 is reboot. 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
In questa parte del file di configurazione vengono specificati gli script da lanciare per ogni runlevel:
lX
, con X
un numero rappresentante il runlevel, indica il runlevel (lo stesso numero deve essere indicato anche nel campo runlevel).
Lo script /etc/init.d/rc
si occupa di lanciare, in ordine numerico/alfabetico, gli script presenti in /etc/rcX.d/
, partendo per quelli K*
per passare a quelli S*
; accetta come parametro il numero del runlevel.
Pressione di CTRL + ALT + CANC
# What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Il comando da eseguire alla pressione della combinazione di tasti CTRL + ALT + CANC
è facilmente personalizzabile tramite l'istruzione sopra riportata. In questo caso viene chiamato il comando /sbin/shutdown
che con quelle opzioni controlla il contenuto di /etc/shutdown.allow
per gli utenti abilitati all'esecuzione del comando (-a
), esegue un reboot (-r
), aspetta un secondo prima di iniziare tutta la procedura di spegnimento (-t1
), esegue il comando subito (now
). Per maggiori informazioni riguardo la personalizzazione del comando si rimanda alla pagina di manuale di shutdown (man shutdown
).
È possibile disattivare questa caratteristica commentando la riga.
Gestione delle Console
# /sbin/getty invocations for the runlevels. # # The "id" field MUST be the same as the last # characters of the device (after "tty"). # # Format: # <id>:<runlevels>:<action>:<process> # # Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more getty's go ahead but skip tty7 if you run X. # 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6 # Example how to put a getty on a serial line (for a terminal) # #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
Il numero di console attive in un sistema viene gestito in questa sezione del file di configurazione.
Ricordando quanto imparato in precedenza capiamo che abbiamo 6 console virtuali nei runlevel 2, 3, 4 e 5 e una sola nei 4 e 5. Se la nostra macchina non ha molta ram e vogliamo risparmiarne un po', possiamo commentare le console 2-6.
Se, invece, volessimo abilitare una console virtuale sulla porta seriale, è sufficiente decommentare la riga che inizia con T0
(per averne una in ascolto sulla prima porta seriale).
Per maggiori informazioni sulla personalizzazione delle console virtuali, man getty
.
Gestione dei runlevel (update-rc.d
)
La gestione manuale dei runlevel (per gestione intendo, ovviamente, la modifica degli script assegnati ad ogni runlevel) è estremamente semplice, soprattutto con l'ausilio di update-rc.d
.
Il suo utilizzo è estremamente semplice.
Sintassi
La sintassi del comando è suddivisibile in tre varianti:
update-rc.d [-n] [-f] name remove
consente la rimozione di tutti i link nei runlevel relativi al demone name
-n
- non esegue il comando, ma mostra cosa verrebbe svolto;
-f
- forza l'eliminazione dei link anche se è ancora presente lo script in
/etc/init.d/
.
update-rc.d [-n] name defaults [NN | NN-start NN-stop]
crea il link di avvio allo script /etc/init.d/name'
secondo i valori di default. È possibile sovrascrivere l'ordine con cui verrà eseguito lo script specificando le due cifre (NN
), inoltre è possibile fornire valori diversi sia per l'avvio (NN-start
) che per l'arresto (NN-stop
).
update-rc.d [-n] name start|stop NN runlevel runlevel ... . start|stop NN runlevel runlevel ... . ...
crea il link di avvio|arresto allo script name
specificando l'ordine (NN
) e il/i runlevel. Il carattere .
separa dichiarazioni multiple.
Vengono riportati alcuni esempi pratici (script xdm
):
Aggiunta di un link
Link per l'avvio
update-rc.d xdm start 99 2 3 4 5
Link per l'arresto
update-rc.d xdm stop 01 0 1 6
Concatenati
update-rc.d xdm start 99 2 3 4 5 . stop 01 0 1 6
Rimozione di un link
update-rc.d -f xdm remove
Aggiunta di link secondo i Valori di Default
Valori di default:
update-rc.d xdm defaults
Valori di Default solo relativamente ai runlevel (impostando l'ordine di avvio a 99 e di arresto a 01)
update-rc.d xdm defaults 99-start 01-stop
Valori di Default
I valori di default utilizzati sono i seguenti:
- lo script viene lanciato con l'opzione
start
nei runlevel 2, 3, 4 e 5; - lo script viene lanciato con l'opzione
stop
nei runlevel 0, 1 e 6 - l'ordine è impostato a 20
Tool per la configurazione dei runlevel
sysv-rc-conf
sysv-rc-conf è una utility basata sulle librerie ncurses utile per semplificare la gestione dei runlevel ed avere una panoramica sullo stato di tutti i runlevel.
Il suo utilizzo è semplice quanto immediato: nella schermata di gestione appare una matrice dove sulle righe sono presenti i servizi (è possibile spostarsi coi tasti cursore oppure scorrere la lista con CTRL + n
e CTRL + p
), la presenza di una X
(modificabile tramite la barra spaziatrice) indica che il servizio verrà avviato per il runlevel indicato nella colonna. Come si nota subito, l'interfaccia non permette di specificare l'ordine con cui verranno lanciati i servizi, inoltre non è possibile specificare eventuali servizi da terminare all'ingresso in un determinato runlevel.
Un'altra funzione degna di nota è la possibilità di avviare e terminare direttamente da questa schermata i servizi. È possibile, infatti, farlo tramite i tasti +
(start, avvio) e -
(stop, arresto) dopo essersi posizionati sulla riga relativa al servizio.
sysvconfig
Sysvconfig è un tool molto comodo e funzionale, che permette di moficare i vari runlevel visualizzandoli in una comoda griglia. Una volta posizionati sulla casella da modificare è sufficiente cancellarne il contenuto con il tasto [canc]
e inserire l'indicazione Sxx
o Kxx
(dove il numero xx
rappresenta l'ordine con il quale deve essere eseguito lo script).
rcconf
Rcconf è forse il più semplice programma per la gestione dei demoni che vengono lanciati all'avvio del sistema.
È in grado, infatti, di generare automaticamente una lista degli script che verranno lanciati all'avvio del sistema, lasciando all'utente solo la possibilità di attivarli o disattivarli.
ksysv
Un programma di gestione dei runlevel basato sulle librerie qt ed integrato in Kde.
Al primo avvio viene chiesto di specificare il sistema sul quale viene eseguito (Linux -> Debian GNU/Linux).
La schermata che ci viene proposta è comoda e ben organizzata: a sinistra abbiamo la lista dei servizi disponibili. A seguire la lista dei runlevel (colonne) suddivisi in due celle: in alto i servizi da avviare, in basso quelli da arrestare. Cliccando su un servizio in un runlevel si possono modificare le impostazioni. Per inserire un servizio è sufficiente trascinarlo nel runlevel designato, come per cancellarlo da un runlevel è sufficiente spostarlo nel cestino ;) .
rc.local
e rc.local_shutdown
Alcuni distribuzioni (Slackware per esempio) utilizzano i file /etc/rc.local
e /etc/rc.local_shutdown
per dare all'amministratore la possibilità di eseguire dei comandi specifici per un certo sistema all'avvio e allo spegnimento della macchina.
In Debian lo stesso effetto può essere ottenuto con un singolo script, (lo chiameremo /etc/init.d/local
in questo esempio). Lo schema generico dello script è:
#! /bin/sh set -e if [ -f /etc/default/local ] ; then . /etc/default/local fi case "$1" in start|restart|force-reload) #comandi da eseguire all'avvio della macchina ;; stop) #comandi da eseguire allo spegnimento del sistema ;; *) echo $"Usage: $0 {start|stop|restart|force-reload|status}" exit 2 ;; esac exit 0
Per fare si che questo venga eseguito ad ogni avvio aggiungetelo all'elenco dei servizi con il vostro tool preferito o con il comando:
update-rc.d local start 98 S 1 2 3 4 5 .