|
|
Riga 1: |
Riga 1: |
| [[Categoria:Sistema]]
| | ==Contributi in:== |
| =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.
| | * [[Debian on a Toshiba Satellite M30X-113]] |
| ==Gli script di init.d==
| | * [[Debian e lettori mp3 Creative]] |
| 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.
| | * [[I2c e lm-sensors]] |
| 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:
| | ==Il mio weblog== |
|
| |
|
| ; reload : permette la rilettura del file di configurazione
| | * [http://metallourlante.splinder.com Metallo Urlante] |
| ; force-reload : come sopra, ma in maniera forzata
| |
| ; status : mostra a video lo stato del demone
| |
| ; stats : visualizza delle statistiche sul lavoro del demone...
| |
|
| |
|
| | ==Contatti== |
|
| |
|
| Sapere come funziona uno script contenuto in /etc/init.d � utile, in quanto ci permette di utilizzarli anche da shell...
| | * mail: cretox at anche dot no |
| Infatti, se ad esempio volessimo far partire apache, sarebbe necessario lanciare un semplice
| | * irc: cretox @ irc.eu.azzurra.org / #linux | #oltrelinux | #debianizzati |
| <pre>
| | * ICQ: # 395933919 |
| # /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]]
| |