6 999
contributi
S3v (discussione | contributi) Nessun oggetto della modifica |
S3v (discussione | contributi) Nessun oggetto della modifica |
||
Riga 105: | Riga 105: | ||
Vi apparirà un'interfaccia testuale dalla quale sarà possibile configurare le opzioni del kernel. ''Questo è il passaggio più delicato, nonché il più lungo e difficile''. | Vi apparirà un'interfaccia testuale dalla quale sarà possibile configurare le opzioni del kernel. ''Questo è il passaggio più delicato, nonché il più lungo e difficile''. | ||
Se dovete configurare un kernel per la prima volta prendetevi almeno un'ora di tempo ed iniziate con calma, leggendo tutte le pagine dell'help in linea. Uno dei vantaggi di un kernel ricompilato è la possibilità di ottenere un kernel estremamente piccolo e leggero proprio perché viene compilato il supporto per le sole periferiche e i soli filesystem effettivamente usati. In questo modo si ha un kernel piccolo e pochi moduli. Un kernel di questo tipo impiega anche molto meno tempo ad essere compilato. Per fare un esempio potrebbe impiegare sui 10 minuti su in athlon 1000, quando un kernel | Se dovete configurare un kernel per la prima volta prendetevi almeno un'ora di tempo ed iniziate con calma, leggendo tutte le pagine dell'help in linea. Uno dei vantaggi di un kernel ricompilato è la possibilità di ottenere un kernel estremamente piccolo e leggero proprio perché viene compilato il supporto per le sole periferiche e i soli filesystem effettivamente usati. In questo modo si ha un kernel piccolo e pochi moduli. Un kernel di questo tipo impiega anche molto meno tempo ad essere compilato. Per fare un esempio potrebbe impiegare sui 10 minuti su in athlon 1000, quando un kernel Debian ufficiale impiegherebbe sicuramente più di un'ora sulla stessa macchina. In definitiva, compilando un kernel snello, sarà possibile anche fare più prove ed ottimizzarlo quindi al meglio. | ||
Per trovare quali moduli sono richiesti dal vostro hardware potete usare il comando <code>'''lspci'''<code> o meglio <code>'''lspci -v'''<code>. Inoltre risulta utilissimo consultare il database dei driver di Linux a [http://kmuto.jp/debian/hcl/ questo indirizzo]: inserendo semplicemente l'output di <code>lspci -n</code>, otterrete l'elenco dei moduli da compilare | Per trovare quali moduli sono richiesti dal vostro hardware potete usare il comando <code>'''lspci'''<code> o meglio <code>'''lspci -v'''<code>. Inoltre risulta utilissimo consultare il database dei driver di Linux a [http://kmuto.jp/debian/hcl/ questo indirizzo]: inserendo semplicemente l'output di <code>lspci -n</code>, otterrete l'elenco dei moduli da compilare | ||
Riga 111: | Riga 111: | ||
Per approfondire la configurazione del kernel: | Per approfondire la configurazione del kernel: | ||
* [[esempio configurazione kernel]] nel nostro | * [[esempio configurazione kernel]] nel nostro Wiki, per un semplice esempio; | ||
* [http://a2.pluto.it/a266.htm#almltitle484 elementi della configurazione] per una descrizione più dettagliata delle varie voci. Questo è un capitolo della monumentale opera [http://a2.pluto.it/appunti_di_informatica_libera.htm Appunti di Informatica Libera], per la quale tutti noi siamo grati all'autore '''Daniele Giacomini'''; | * [http://a2.pluto.it/a266.htm#almltitle484 elementi della configurazione] per una descrizione più dettagliata delle varie voci. Questo è un capitolo della monumentale opera [http://a2.pluto.it/appunti_di_informatica_libera.htm Appunti di Informatica Libera], per la quale tutti noi siamo grati all'autore '''Daniele Giacomini'''; | ||
* [http://kernel.xc.net/ Linux Kernel Configuration Archive]: potrete cercare le varie opzioni di configurazione di ogni versione del kernel. | * [http://kernel.xc.net/ Linux Kernel Configuration Archive]: potrete cercare le varie opzioni di configurazione di ogni versione del kernel. | ||
Riga 123: | Riga 123: | ||
Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e lanciare il comando: | Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e lanciare il comando: | ||
<pre>$ make oldconfig</pre> | |||
in questo modo verranno fatte delle domande su come configurare ''le sole nuove voci'' presenti nel kernel. Se i due kernel sono troppo diversi questo metodo non conviene più dato che bisogna rispondere ad uno ad uno a tutte le domande sulle voci diverse. Sicuramente non conviene usarlo per il passaggio 2.4 --> 2.6.<br> | in questo modo verranno fatte delle domande su come configurare ''le sole nuove voci'' presenti nel kernel. Se i due kernel sono troppo diversi questo metodo non conviene più dato che bisogna rispondere ad uno ad uno a tutte le domande sulle voci diverse. Sicuramente non conviene usarlo per il passaggio 2.4 --> 2.6.<br> | ||
Riga 144: | Riga 144: | ||
</pre> | </pre> | ||
Questo comando compilerà il nostro kernel e lo inserirà in un pacchetto | Questo comando compilerà il nostro kernel e lo inserirà in un pacchetto Debian in <code>/usr/src</code>. Il comando '''<code>fakeroot</code>''' viene usato semplicemente per simulare un ambiente di root per l'utente normale. | ||
Diamo uno sguardo alle opzioni usate: | Diamo uno sguardo alle opzioni usate: | ||
Riga 152: | Riga 152: | ||
; <code>--revision</code> : permette di impostare il numero di revisione del pacchetto, normalmente viene indicato con un numero intero; | ; <code>--revision</code> : permette di impostare il numero di revisione del pacchetto, normalmente viene indicato con un numero intero; | ||
; <code>kernel_image</code> : dice a make-kpkg di compilare l'immagine del kernel creare il pacchetto | ; <code>kernel_image</code> : dice a make-kpkg di compilare l'immagine del kernel creare il pacchetto Debian. | ||
Se ad esempio compileremo per la seconda volta lo stesso kernel, per fare solo delle modifiche minori, può essere utile usare lo stesso nome per <code>--append-to-version</code> ed usare un numero di revisione maggiore. In questo modo quando installerete il pacchetto del kernel ricompilato questo sostituirà il pacchetto precedente. Al contrario se ricompilate un secondo kernel cambiando la stringa da appendere alla versione, il pacchetto del nuovo kernel conviverà tranquillamente col precedente. | Se ad esempio compileremo per la seconda volta lo stesso kernel, per fare solo delle modifiche minori, può essere utile usare lo stesso nome per <code>--append-to-version</code> ed usare un numero di revisione maggiore. In questo modo quando installerete il pacchetto del kernel ricompilato questo sostituirà il pacchetto precedente. Al contrario se ricompilate un secondo kernel cambiando la stringa da appendere alla versione, il pacchetto del nuovo kernel conviverà tranquillamente col precedente. | ||
Riga 171: | Riga 171: | ||
; <code>clean</code> : pulisce i sorgenti; | ; <code>clean</code> : pulisce i sorgenti; | ||
; <code>kernel_headers</code> : questo genera un pacchetto con gli | ; <code>kernel_headers</code> : questo genera un pacchetto con gli header del kernel; | ||
; <code>binary</code> : questo genera un nuovo pacchetto deb con i sorgenti, uno con gli header, uno con la documentazione e uno con l'immagine del kernel; | ; <code>binary</code> : questo genera un nuovo pacchetto deb con i sorgenti, uno con gli header, uno con la documentazione e uno con l'immagine del kernel; | ||
; <code>buildpackage</code> : pulisce i sorgenti e avvia "binary" (vedere sopra); | ; <code>buildpackage</code> : pulisce i sorgenti e avvia "binary" (vedere sopra); | ||
Riga 179: | Riga 179: | ||
; <code>modules_image</code> : crea i pacchetti deb dei moduli esterni residenti in <code>/usr/src/modules</code> senza il file .diff e senza creare un altro pacchetto sorgente; | ; <code>modules_image</code> : crea i pacchetti deb dei moduli esterni residenti in <code>/usr/src/modules</code> senza il file .diff e senza creare un altro pacchetto sorgente; | ||
; <code>modules_clean</code>: pulisce i sorgenti dei moduli esterni presenti in <code>/usr/src/modules</code>; | ; <code>modules_clean</code>: pulisce i sorgenti dei moduli esterni presenti in <code>/usr/src/modules</code>; | ||
; <code>debian</code> : questo crea la directory <code>./debian</code> utile per compilare i kernel vanilla e patcharli alla maniera | ; <code>debian</code> : questo crea la directory <code>./debian</code> utile per compilare i kernel vanilla e patcharli alla maniera Debian. | ||
Nel caso di sistemi multiprocessore è possibile velocizzare la compilazione aggiungendo <code>CONCURRENCY_LEVEL=n</code> dove n corrisponde al numero di processi che il compilatore usa in parallelo (normalmente si usa un processo in più rispetto al numero di processori presenti). | Nel caso di sistemi multiprocessore è possibile velocizzare la compilazione aggiungendo <code>CONCURRENCY_LEVEL=n</code> dove n corrisponde al numero di processi che il compilatore usa in parallelo (normalmente si usa un processo in più rispetto al numero di processori presenti). | ||
Per esempio se vogliamo compilare kernel su un | Per esempio se vogliamo compilare kernel su un PC dotato di un processore quadcore su può usare: | ||
<pre> | <pre> | ||
Riga 216: | Riga 216: | ||
==Installare e gestire i moduli== | ==Installare e gestire i moduli== | ||
Per compilare e creare automaticamente pacchetti .deb per moduli non presenti nei sorgenti del kernel, Debian fornisce un comodo strumento: [[Pagina di manuale di module-assistant|module-assistant]]. Per un uso interattivo basterà lanciarlo da root per installare i pacchetti, scaricare i sorgenti del modulo che interessa, compilarlo e creare un pacchetto | Per compilare e creare automaticamente pacchetti .deb per moduli non presenti nei sorgenti del kernel, Debian fornisce un comodo strumento: [[Pagina di manuale di module-assistant|module-assistant]]. Per un uso interattivo basterà lanciarlo da root per installare i pacchetti, scaricare i sorgenti del modulo che interessa, compilarlo e creare un pacchetto Debian. | ||
Per scegliere invece quali moduli fare partire all'avvio ci sono diverse strade. | Per scegliere invece quali moduli fare partire all'avvio ci sono diverse strade. | ||
# Se si usa l'hotplug, questi dovrebbe caricare automaticamente al boot tutti i moduli necessari. Per evitare il caricamento di certi moduli che possono creare conflitti basta | # Se si usa l'hotplug, questi dovrebbe caricare automaticamente al boot tutti i moduli necessari. Per evitare il caricamento di certi moduli che possono creare conflitti basta inserirli in <code>'''/etc/hotplug/blacklist'''</code>. | ||
# Se non si usa l'hotplug bisogna specificare manualmente quali moduli caricare all'avvio. Per far ciò basterà inserire i nomi dei moduli da caricare in <code>'''/etc/modules'''</code>, uno per riga. Se non vi va di editare un file di testo (o non ricordate esattamente i nomi dei moduli) potrete usare <code>'''modconf'''</code> che permette di scegliere interattivamente quali moduli caricare all'avvio. | # Se non si usa l'hotplug bisogna specificare manualmente quali moduli caricare all'avvio. Per far ciò basterà inserire i nomi dei moduli da caricare in <code>'''/etc/modules'''</code>, uno per riga. Se non vi va di editare un file di testo (o non ricordate esattamente i nomi dei moduli) potrete usare <code>'''modconf'''</code> che permette di scegliere interattivamente quali moduli caricare all'avvio. | ||
Riga 227: | Riga 227: | ||
Dipende. | Dipende. | ||
Se il modulo fa parte del kernel | Se il modulo fa parte del kernel Debian (cioè il suo sorgente è contenuto nel pacchetto <code>kernel-source</code> del kernel) allora bisogna ricompilare il kernel. Tenete presente, tuttavia, che i kernel binari Debian includono già la maggior parte dei moduli presenti nei sorgenti del kernel. Per caricarli basta usare: | ||
<pre> | <pre> | ||
# modprobe ''nomemodulo'' | # modprobe ''nomemodulo'' | ||
Riga 252: | Riga 252: | ||
* il modulo del filesystem della partizione di root | * il modulo del filesystem della partizione di root | ||
Per un kernel ricompilato, l'initrd è generalmente inutile e rende l'avvio leggermente più lento. È anche facile sbagliare se non attivate le giuste opzioni nel kernel (vedi [[#Ma se io devo usare l'initrd assolutamente?|FAQ successiva]]), in tal caso otterreste un kernel panic all'avvio. L'initrd serve soprattutto per i kernel ufficiali delle distribuzioni che devono supportare tutti i controller esistenti e una gran varietà di filesystem. Sarebbe assurdo compilare tutti questi supporti staticamente e quindi vengono inseriti come moduli nel ram disk. L'initrd è necessario anche se si vuole usare un bootsplash, ma questa è un'altra storia: | Per un kernel ricompilato, l'initrd è generalmente inutile e rende l'avvio leggermente più lento. È anche facile sbagliare se non attivate le giuste opzioni nel kernel (vedi [[#Ma se io devo usare l'initrd assolutamente?|FAQ successiva]]), in tal caso otterreste un <code>kernel panic</code> all'avvio. L'initrd serve soprattutto per i kernel ufficiali delle distribuzioni che devono supportare tutti i controller esistenti e una gran varietà di filesystem. Sarebbe assurdo compilare tutti questi supporti staticamente e quindi vengono inseriti come moduli nel ram disk. L'initrd è necessario anche se si vuole usare un bootsplash, ma questa è un'altra storia: | ||
* [[Compilazione Kernel 2.6.11 con Bootsplash]] | * [[Compilazione Kernel 2.6.11 con Bootsplash]] | ||
Riga 275: | Riga 275: | ||
Con tale configurazione è possibile compilare il kernel con initrd aggiungendo semplicemente l'opzione <code>--initrd</code> al comando <code>make-kpkg</code>. Il pacchetto risultante conterrà degli script che creeranno l'immagine initrd in fase di installazione del pacchetto. | Con tale configurazione è possibile compilare il kernel con initrd aggiungendo semplicemente l'opzione <code>--initrd</code> al comando <code>make-kpkg</code>. Il pacchetto risultante conterrà degli script che creeranno l'immagine initrd in fase di installazione del pacchetto. | ||
Attualmente ( | Attualmente (Etch) ci sono tre strumenti in Debian che permettono di creare l'immagine initrd: (in Lenny si trovano soltanto i primi due): | ||
* '''<code>update-initramfs</code> ''' (fornito dal pacchetto <code>initramfs-tools</code>): utilizzabile con kernel 2.6.13 o più recenti. Aggiunge tutti i controller del disco e i supporti che potrebbero servire per il boot che sono stati compilati come moduli; | * '''<code>update-initramfs</code> ''' (fornito dal pacchetto <code>initramfs-tools</code>): utilizzabile con kernel 2.6.13 o più recenti. Aggiunge tutti i controller del disco e i supporti che potrebbero servire per il boot che sono stati compilati come moduli; | ||
Riga 281: | Riga 281: | ||
* '''<code>mkinitrd</code> ''' (fornito dal pacchetto <code>initrd-tools</code>): questo è il vecchio metodo usato fino al kernel 2.6.12 che necessita del supporto al '''cramfs'''. | * '''<code>mkinitrd</code> ''' (fornito dal pacchetto <code>initrd-tools</code>): questo è il vecchio metodo usato fino al kernel 2.6.12 che necessita del supporto al '''cramfs'''. | ||
Per ulteriori informazioni sui kernel | Per ulteriori informazioni sui kernel Debian e le immagini initrd: | ||
* [http://kernel-handbook.alioth.debian.org/ch-initramfs.html Debian Linux Kernel Handbook: Managing the initial ramfs (initramfs) archive] | * [http://kernel-handbook.alioth.debian.org/ch-initramfs.html Debian Linux Kernel Handbook: Managing the initial ramfs (initramfs) archive] | ||
Riga 288: | Riga 288: | ||
Vedi FAQ precedente. L'initrd non è necessario per fare il boot. Se il sistema non parte ciò dipende da una non corretta configurazione del kernel. | Vedi FAQ precedente. L'initrd non è necessario per fare il boot. Se il sistema non parte ciò dipende da una non corretta configurazione del kernel. | ||
Questo è quasi sempre vero, ma ci sono delle eccezioni. In alcuni casi, quali ad esempio l'avvio da una memoria | Questo è quasi sempre vero, ma ci sono delle eccezioni. In alcuni casi, quali ad esempio l'avvio da una memoria USB con filesystem di root nella stessa, può essere necessario fare uso di initrd affinché vengano generati correttamente i device (vedi sda1, sda2 ecc.). Questo pur avendo compilato tutti i moduli staticamente all'interno del kernel. | ||
=== Posso usare make-kpkg con un kernel vanilla === | === Posso usare make-kpkg con un kernel vanilla === | ||
Riga 300: | Riga 300: | ||
===Errore con l'opzione <code>--revision</code> === | ===Errore con l'opzione <code>--revision</code> === | ||
Può | Può capitare che, ricompilando il kernel variando il valore dell'opzione <code>--revision</code> venga rilevato un errore simile al seguente: | ||
<pre> | <pre> | ||
I note that you are using the --revision flag with the value | I note that you are using the --revision flag with the value | ||
Riga 344: | Riga 344: | ||
* [http://www.debian.org/doc/manuals/reference/ch-kernel.it.html Manuale di Riferimento Debian: Capitolo 7 - Il kernel Linux su Debian] | * [http://www.debian.org/doc/manuals/reference/ch-kernel.it.html Manuale di Riferimento Debian: Capitolo 7 - Il kernel Linux su Debian] | ||
* [http://kernel-handbook.alioth.debian.org/index.html Debian Linux Kernel Handbook ]: ottimo documento sulla gestione dei kernel | * [http://kernel-handbook.alioth.debian.org/index.html Debian Linux Kernel Handbook ]: ottimo documento sulla gestione dei kernel Debian delle relative patch (''in inglese''). | ||
* [http://a2.pluto.it/kernel_linux_1.htm Appunti di informatica Libera: Kernel Linux]: Il capitolo dedicato al kernel della monumentale opera di ''Daniele Giacomini'' contiene sia istruzioni generiche che istruzioni per Debian. Inoltre c'è una descrizione dettagliata della configurazione delle varie voci del kernel! | * [http://a2.pluto.it/kernel_linux_1.htm Appunti di informatica Libera: Kernel Linux]: Il capitolo dedicato al kernel della monumentale opera di ''Daniele Giacomini'' contiene sia istruzioni generiche che istruzioni per Debian. Inoltre c'è una descrizione dettagliata della configurazione delle varie voci del kernel! | ||
* [http://kernel.xc.net/ Linux Kernel Configuration Archive]: database che permette di ricercare tra le voci di configurazione (e le loro descrizioni) per varie versioni di kernel. | * [http://kernel.xc.net/ Linux Kernel Configuration Archive]: database che permette di ricercare tra le voci di configurazione (e le loro descrizioni) per varie versioni di kernel. |
contributi