27
contributi
mNessun oggetto della modifica |
mNessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
[[Categoria:Sistema]] | |||
=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 in 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, controllare 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 | |||
<pre> | |||
# /etc/init.d/apache start | |||
</pre> | |||
ed il gioco � fatto!!! | |||
==I vari rcX.d== | |||
Come scrivevo 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: | |||
<pre> | |||
id:runlevel:azione:comando | |||
</pre> | |||
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 segnale ''SIGINT''; | |||
; | ; comando : il comando da eseguire. | ||
====Runlevel di Default==== | |||
<pre> | |||
# The default runlevel. | |||
id:2:initdefault: | |||
</pre> | |||
In questo esempio (preso da una Debian Box) il runlevel di default � il '''2'''. <br/> | |||
Per modificarlo � sufficiente modificare il numero racchiuso tra i caratteri '':''. | |||
====Script di inizializzazione del sistema==== | |||
<pre> | |||
# Boot-time system configuration/initialization script. | |||
# This is run first except when booting in emergency (-b) mode. | |||
si::sysinit:/etc/init.d/rcS | |||
</pre> | |||
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==== | ||
<pre> | |||
# What to do in single-user mode. | |||
~~:S:wait:/sbin/sulogin | |||
</pre> | |||
====Comportamento per ogni Runlevel==== | |||
<pre> | |||
# /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 | |||
</pre> | |||
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==== | |||
<pre> | |||
# What to do when CTRL-ALT-DEL is pressed. | |||
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now | |||
</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''). | |||
� possibile disattivare questa caratteristica commentando la riga. | |||
====Gestione delle Console==== | |||
<pre> | |||
# /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 | |||
</pre> | |||
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: | |||
<pre> | |||
update-rc.d [-n] [-f] name remove | |||
</pre> | |||
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/'''. | |||
<pre> | |||
update-rc.d [-n] name defaults [NN | NN-start NN-stop] | |||
</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 deversi sia per l'avvio (''NN-start'') che per l'arresto (''NN-stop''). | |||
<pre> | |||
update-rc.d [-n] name start|stop NN runlevel runlevel ... . start|stop NN runlevel runlevel ... . ... | |||
</pre> | |||
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 | |||
<pre> | |||
update-rc.d xdm start 99 2 3 4 5 | |||
</pre> | |||
Link per l'arresto | |||
<pre> | |||
update-rc.d xdm stop 01 0 1 6 | |||
</pre> | |||
Concatenati | |||
<pre> | |||
update-rc.d xdm start 99 2 3 4 5 . stop 01 0 1 6 | |||
</pre> | |||
-- | ====Rimozione di un link==== | ||
<pre> | |||
update-rc.d -f xdm remove | |||
</pre> | |||
[[ | ====Aggiunta di link secondo i Valori di Default==== | ||
Valori di default: | |||
<pre> | |||
update-rc.d xdm defaults | |||
</pre> | |||
Valori di Default solo relativamente ai runlevel (impostando l'ordine di avvio a 99 e di arresto a 01) | |||
<pre> | |||
update-rc.d xdm defaults 99-start 01-stop | |||
</pre> | |||
====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. | |||
[[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. | |||
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 comodagriglia. 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)). | |||
[[Immagine:Sysvconfig.png|thumb|center|Screenshot di sysvconfig]] | |||
===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. | |||
[[Immagine:rcconf.png|thumb|center|Screenshot di rcconf]] | |||
===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. Clickando 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]] | |||
==rc.local e rc.local_shutdown== |
contributi