LKN: Bibliografia: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
(nuova categoria)
 
(31 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==

Versione attuale delle 13:15, 28 giu 2013

Linux Kernel in a Nutshell

Sommario

Parte I
Compilare il kernel
  1. Introduzione
  2. Requisiti
  3. Procurarsi i sorgenti
  4. Configurazione e compilazione
  5. Installazione e avvio
  6. Aggiornare il kernel
Parte II
Personalizzazioni principali
  1. Personalizzare un kernel
  2. Ricette per configurare un kernel
Parte III
Guide di riferimento per il kernel
  1. Guida di riferimento dei parametri di boot del kernel - parte1
  2. Guida di riferimento dei parametri di boot del kernel - parte2
  3. Guida di riferimento dei parametri di compilazione del kernel
  4. Guida di riferimento delle opzioni di configurazione del kernel - parte1
  5. Guida di riferimento delle opzioni di configurazione del kernel - parte2
Parte IV
Informazioni aggiuntive
  1. Programmi utili
  2. Bibliografia

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.

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.

Libri generici su Linux

  • Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e Arnold Robbins. Linux in a Nutshell (O’Reilly), 2005.
    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.
  • Yaghmour, Karim. Building Embedded Linux Systems (O’Reilly), 2003.
    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.

Libri inerenti il kernel Linux

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.

  • Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. Linux Device Drivers (O’Reilly), 2005.
    Questo libro illustra come differenti device driver operano e fornisce parecchi esempi applicatici di driver funzionanti. È consigliato a chiunque vuole programmare driver per il kernel. È disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/
  • Love, Robert. Linux Kernel Development (Novell Press Publishing), 2005.
    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.
  • Bovet, Daniel P. e Cesate, Marco. Understanding the Linux Kernel (O’Reilly), 2005.
    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.

Strumenti

In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti.



This is an indipendent translation of the book Linux Kernel in a Nutshell by Greg Kroah-Hartman. This translation (like the original work) is available under the terms of Creative Commons Attribution-ShareAlike 2.5.


Capitolo originale