LKN: Bibliografia: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
nuova categoria
mNessun oggetto della modifica
(nuova categoria)
 
(30 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
[[Categoria:Sistema]]
{{Template:LKN}}
=SystemV: il boot di Debian=
__TOC__
==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.
Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. La documentazione è infatti il miglior posto dove trovare informazioni e riferimenti su come compilare e installare il kernel ed è normalmente tenuta aggiornata a seguito di cambiamenti nella procedura di compilazione.
==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:
== Libri ==
Sono disponibili molti ottimi libri relativi alla programmazione del kernel Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco un elenco di libri che ho trovato utili.


; reload : permette la rilettura del file di configurazione
=== Libri generici su Linux ===
; force-reload : come sopra, ma in maniera forzata
; status : mostra a video lo stato del demone
; stats : visualizza delle statistiche sul lavoro del demone...


* Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e Arnold Robbins. ''Linux in a Nutshell'' (O’Reilly), 2005.<br/>Questo libro comprende una delle più complete e autorevoli guide ai comandi per Linux. Essa copre praticamente ogni singolo comando di cui potreste mai aver bisogno.


Sapere come funziona uno script contenuto in /etc/init.d � utile, in quanto ci permette di utilizzarli anche da shell...
* Yaghmour, Karim. ''Building Embedded Linux Systems'' (O’Reilly), 2003.<br/>Questo libro, sebben principalmente rivolto agli sviluppatori di sistemi Linux embedded, contiene un'ottima sezione relativa a come creare una ''toolchain'' e un kernel con compilazione incrociata. Oltre a questa sezione del libro, è consigliato anche in virtù di altre sezioni che forniscono interessanti informazioni per coloro che vogliono imparare come personalizzare il kernel e il resto del sistema.
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===
=== Libri inerenti il kernel Linux ===
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===
Molti di questi libri sono indirizzati ai programmatori interessati ad apprendere come programmare all'interno del kernel. Sono generalmente molto tecnici rispetto a questo libro, ma sono un ottimo punto di partenza se desiderate imparare e capire il codice che governa il kernel.
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===
*Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. ''Linux Device Drivers'' (O’Reilly), 2005.<br/>Questo libro illustra come differenti ''device driver'' operano e fornisce parecchi esempi applicatici di driver funzionanti. &Egrave; consigliato a chiunque vuole programmare driver per il kernel. &Egrave; disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/
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===
* Love, Robert. ''Linux Kernel Development'' (Novell Press Publishing), 2005.<br/> Questo libro copre quasi tutti gli aspetti relativi al kernel Linux, illustrando come tutto opera insieme. Ottimo punto di partenza per iniziare a capire e conoscere le diverse componenti del kernel.
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===
* Bovet, Daniel P. e Cesate, Marco. ''Understanding the Linux Kernel'' (O’Reilly), 2005.<br/> Questo libro si addentra negli aspetti relativi la progettazione e implementazione del nucleo del kernel Linux. Un ottimo riferimento per apprendere e capire gli algoritmi utilizzati nelle diverse porzioni del kernel. Fortemente consigliato a coloro che vogliono comprendere nel dettaglio come funziona il kernel.
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==
== Strumenti ==
===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.
In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti.


La struttura delle istruzioni � la seguente:
* ''Linux kernel''<br/> http://www.kernel.org e ftp://ftp.kernel.org contiene tutte le versioni del sorgente del kernel. http://www.kernel.org/git/ contiene una lista di tutti i ''git trees'' utilizzati dai diversi sviluppatori del kernel.
<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.
* ''gcc''<br>http://gcc.gnu.org/ sito principale per tutto ciò che concerne il compilatore GNU C.  


====Runlevel di Default====
* ''binutils''<br/>http://www.gnu.org/software/binutils/ è il sito principale dove trovare tutte le informazioni su binutils.
<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====
* ''make''<br/>http://www.gnu.org/software/make/ è il sito principale dove trovare tutte le informazioni su make.
<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.
*''util-linux''<br/>http://www.kernel.org/pub/linux/utils/util-linux/ è la directory da dove possono essere scaricate tutte le versioni di util-linux.


====Comportamento in Modalit� Singolo Utente====
* ''module-init-tools''<br/>http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/ è la directory da dove possono essere scaricate tutte le versioni di module-init-tools.
<pre>
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
</pre>


* ''e2fsprogs''<br/>http://e2fsprogs.sourceforge.net/ è la pagina principale del progetto e2fsprogs.


====Comportamento per ogni Runlevel====
* ''jfsutils''<br/>http://jfs.sourceforge.net/ è la pagina principale del progetto jfsutils.
<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
* ''reiserfsprogs''<br/>http://www.namesys.com/download.html è la pagina principale del progetto reiserfsprogs.
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:
* ''xfsprogs''<br/>http://oss.sgi.com/projects/xfs/ è la pagina principale del progetto xfsprogs.
'''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.
* ''quota-tools''<br/>http://sourceforge.net/projects/linuxquota/ è la pagina principale del progetto quota-tools.


====Pressione di CTRL + ALT + CANC====
* ''nfs-utils''<br/>http://nfs.sf.net/ è la pagina principale del progetto nfs-utils.
<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'').
* ''udev''<br/>http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html è la directory da dove possono essere scaricate tutte le versioni di udev.


� possibile disattivare questa caratteristica commentando la riga.
* ''procfs''<br/>http://procps.sourceforge.net/ è la pagina principale del progetto procfs.


====Gestione delle Console====
* ''patchutils''<br/>http://cyberelk.net/tim/patchutils è la directory da dove possono essere scaricate tutte le versioni di patchutils.
<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)
* ''git''<br/>http://git.or.cz/ è il sito principale del progetto git.
#
#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.  
* ''ketchup''<br/>http://www.selenic.com/ketchup/ è la pagina principale del progetto ketchup.


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.  
* ''quilt''<br/>http://savannah.nongnu.org/projects/quilt è la pagina principale del progetto quilt.


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).
* ''distcc''<br/>http://distcc.samba.org/ è la pagina principale del progetto distcc.


Per maggiori informazioni sulla personalizzazione delle console virtuali, ''man getty''.
* ''ccache''<br/>http://ccache.samba.org/ è la pagina principale del progetto ccache.


===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:
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].
----


<pre>
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appb.pdf ''Capitolo originale'']
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;
[[Categoria:Documentazione tecnica]]
; -f : forza l'eliminazione dei link anche se � ancora presente lo script in '''/etc/init.d/'''.
[[Categoria:Linux Kernel in a Nutshell]]
 
<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==
 
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'avio 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 �:
 
<pre>
#! /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
</pre>
 
Per fare si che questo venga eseguito ad ogni avvio aggiungetelo all'elenco dei servizi con il vostro tool preferito o con il comando:
 
<pre>
update-rc.d local start 98 S 1 2 3 4 5 .
</pre>
6 999

contributi

Menu di navigazione