Old:OpenMosix: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
{{Debianized}}
{{Debianized}}[[Categoria:Sistema]]


==Introduzione==
== Introduzione ==
In Debian, il kernel Linux pu� essere ricompilato con il metodo standard (valido con tutte le distribuzioni, e quindi anche con Debian) oppure nel cosiddetto ''Debian-way'' (traduzione: ''metodo Debian'' o ''alla Debian'').


Questa guida illustrer� il metodo Debian di compilare il kernel Linux. Questo metodo consiste nel creare un pacchetto Debian del kernel compilato per una sua facile installazione/disinstallazione.
Questa � una guida generica (non specifica per Debian) su '''Grub''' che
comprende argomenti quali l'installazione e la configurazione da zero
di grub, trattati in modo semplice (si spera) in modo da non spaventare
i principianti. La guida � rivolta quindi a tutti coloro i quali per
necessit� o diletto vogliano imparare ad usare questo
versatile [[boot loader]].


==Installazione Pacchetti==
== Perch� Grub ==


Avremo innanzi tutto bisogno di alcuni pacchetti di base per compilare e pacchettizzare un kernel:
La ragione per cui consiglio anche ai newbie '''Grub''' � la
caratteristica, unica, di poter scrivere da zero o modificare, in fase di boot, i comandi per fare
partire un kernel, il tutto con
l'ausilio dell'auto-completamento. Adesso provo a spiegarmi meglio.
 
Se '''Grub''' � installato, al boot comparir� il classico men� con le voci per ogni sistema operativo installato. A questo punto premendo "'''e'''" si entra in modalit� editing e si possono modificare le voci del menu iniziale oppure si possono inserire i comandi per
fare partire un altro kernel non presente nel menu. '''Grub'''
pu� leggere le varie
partizioni e visualizzare i nomi dei file, e grazie
all'auto-completamento si �
sicuri di non sbagliare il percorsi o i nomi dei file. In questo modo � facile fare velocemente molte prove con kernel o
parametri di boot diversi, al volo, senza dover modificare alcun file.
Per confronto, con lilo (altro [[boot loader]] diffuso), per modificare un
parametro di boot o fare partire un nuovo kernel (anche solo per prova)
� necessario avviare il sistema, modificare
<tt>lilo.conf</tt>, eseguire il comando lilo e riavviare. Con '''Grub''' basta invece scrivere le modifiche al boot: se c'� un errore ed il kernel non si
carica basta resettare il sistema e provare di nuovo. Trovati i
parametri giusti si possono salvare in '''<tt>/boot/grub/menu.lst</tt>''' in modo che non sia pi� necessario inserirli a mano.
 
== Installazione di Grub ==
 
Normalmente '''Grub''' � gi� installato in Debian. Se per� si �
installato, per ultimo, un S.O. (come MS-Windows) che ignora la presenza di altri
sistemi sul disco e vuole monopolizzare il nostro pc, ci si trova nella
necessit� di installare nuovamente '''Grub''' per riappropriarci della libert� di scegliere. Pu� anche succedere di aver provato un altro boot loader e di voler ritornare a '''Grub''': anche in questo caso basta seguire quanto segue.
 
Per usare '''Grub''' � necessario installarlo nel [[MBR]] (in realt� � anche possibile [[Guida_a_Grub#Installare_Grub_su_floppy|installarlo solo in un floppy]]) con il seguente comando:


<pre>
<pre>
# apt-get install debhelper modutils kernel-package libncurses5-dev fakeroot
# grub-install --no-floppy /dev/hda
</pre>
</pre>


A questo punto � necessario installare il pacchetto Debian contenente i sorgenti del kernel. Per prima cosa, cerchiamo questo pacchetto:
in questo modo ogni altro [[boot loader]] verr� sovrascritto e all'avvio apparir� grub che permetter� di avviare ogni sistema presente su hard disk. Non � necessario avere tanti [[boot loader]] anche se si installano tante distribuzioni,
ne basta uno che le faccia partire tutte.


Se si installato windows, gli altri S.O. non saranno pi avviabili. Come si fa allora a eseguire il precedente comando per ripristinare grub? Basta usare un livecd per avviare il sistema, non neanche necessario che ci sia grub in tale cd. Dopo l'avvio, monteremo la partizione di root del sistema Linux installato su hard disk:
<pre>
<pre>
$ apt-cache search linux-source | grep ^linux-source
# mkdir /mnt/root
linux-source-2.6.8 - Linux kernel source for version 2.6.8 with Debian patches
# mount /dev/hda3 /mnt/root
</pre>
</pre>


{{Box|Nota|Ogni versione di Debian (unstable, testing, stable) utilizza in genere una certa versione del kernel e specifiche versioni di altri pacchetti ad esso correlati in modo tale che l'insieme sia il pi� possibile stabile. E' quindi altamente consigliato usare la versione dei sorgenti del kernel che troveremo nei repository della nostra versione di Debian, a meno che non si sappia esattamente quello che si sta facendo.}}
dove si � fatta l'ipotesi che sia <tt>/dev/hda3</tt> la partizione di root. Ora con <tt>chroot</tt> si pu� cambiare al volo la partizione di root del nostro livecd:
 
Adesso installiamo il pacchetto dei sorgenti del kernel che intendiamo installare. Notare che i sorgenti del kernel forniti con Debian sono leggermente differenti da quelli del [[kernel vanilla]] rilasciato dal team di Linus Torvalds ([http://kernel-handbook.alioth.debian.org/ch-source.html#s-changes maggiori informazioni qui]). Nel seguito prenderemo come esempio la versione 2.6.8 del kernel, sostituitela con qualsiasi altra versione vogliate usare.


<pre>
<pre>
# apt-get install linux-source-2.6.8
# chroot /mnt/root
</pre>
</pre>


{{Box|Nota|Prima della versione 2.6.12 del kernel Linux, i pacchetti sorgenti e binari Debian si chiamavano rispettivamente <tt>kernel-source-x.x.x</tt> e <tt>kernel-image-x.x.x</tt> (invece dell'attuale denominazione <tt>linux-source-x.x.x</tt> e
Adesso abbiamo sotto di noi la root del sistema installato su disco. Montiamo anche la partizione di boot, se questa � posta in una partizione separata. A questo punto possiamo eseguire <tt>grub-install</tt> come visto prima per ripristinare grub. Se si vuole si pu� anche generare automaticamente un menu di avvio con il [[Guida_a_Grub#Usare_update-grub|comando <tt>update-grub</tt>]].
<tt>linux-image.x.x.x</tt>). Questo perch� � previsto l'inserimento di nuovi kernel (come GNU HURD e FreeBSD) all'interno di Debian. }}


E' sconsigliato ricompilare il kernel come utente root, perch� questo pu� creare diversi tipi di problemi. In Debian, per policy, tutti i sorgenti sono contenuti in <tt>/usr/src</tt> (almeno quelli installati dai pacchetti Debian) e hanno come proprietario <tt>root</tt> e come gruppo proprietario <tt>src</tt>. Gli utenti del gruppo <tt>src</tt> hanno inoltre diritto di scrittura in <tt>/usr/src/*</tt>. Baster� dunque aggiungere al gruppo <tt>'''src'''</tt> l'utente che si vuole usare per la compilazione, con i seguenti comandi:
Vediamo ora di capire un poco meglio quali sono i vari componenti di grub.


<pre>
Il "primo pezzo di grub" (detto stage1) risiede nel [[MBR]], il "secondo pezzo di grub" (stage2) ed i file di configurazione risiedono nella '''partizione di root di grub''': questa sar� la partizione montata in <tt>/boot</tt> se si ha una partizione separata per <tt>/boot</tt>, altrimenti sar� la '''partizione di root del sistema''' (montata in /). La ''cartella'' in cui risiede lo stage2 e tutti i file di configurazione di grub � in ogni caso <tt>/boot/grub/</tt>.
# adduser nome_vostro_utente src
</pre>


dopodich� ricordate di effettuare un nuovo login, perch� fino ad allora non sarete effettivamente membri del gruppo <tt>'''src'''</tt>; in qualsiasi momento controllate la lista dei gruppi cui appartenete con il comando <tt>groups</tt>
Il menu iniziale del '''Grub''' � configurato nel file <tt>/boot/grub/menu.lst</tt>, basta modificarlo ed all'avvio '''Grub''' legger� la nuova configurazione. Il [[Guida_a_Grub#Usare_update-grub|comando <tt>update-grub</tt>]] genera automaticamente appunto questo file, anche se con alcune limitazioni (per maggiori informazioni vedere la sezione [[Guida_a_Grub#Usare_update-grub|<tt>'''update-grub'''</tt>]]).


{{Box|Nota|Ricordate di non usare l'utente root per ricompilare il kernel (e neanche per scompattarlo) altrimenti tutti i file che verranno creati apparterranno a <tt>root:root</tt>. Se a questo punto si cercher� di compilare dall'utente normale si avranno problemi di permessi e per risolverli dovrete dare un:
Dopo l'installazione di grub, lo stage1 rester� sempre immutato e punter� allo stage2. Lo stage2, caricher� i file di configurazione che potranno essere modificati a piacimento senza mai dover modificare il settore di avvio ([[MBR]]).
# chown -R root:src /usr/src/
Se, inoltre, il gruppo <tt>src</tt> non ha pi� i diritti di scrittura dovranno anch'essi essere ripristinati con:
# chmod -R g+w /usr/src/*
}}


== Configurazione del kernel ==
== Far partire il sistema principale ==


=== Passi preliminari ===
Chiameremo sistema principale il sistema sotto il quale avete installato '''Grub'''. Vediamo i comandi necessari per fare partire un kernel, questi possono essere inseriti interattivamente all'avvio di '''Grub'''. Successivamente vedremo come inserirli in '''/boot/grub/menu.lst''' per creare una voce nel menu di grub.
Entriamo ora nella directory dei sorgenti del kernel:


Innanzi tutto dobbiamo dire a '''Grub''' qual la '''sua''' partizione di root, che <tt>/boot</tt> (ci siamo?). Ma in che partizione '''/boot'''? E' la partizione montata in '''/boot''' quando avete dato '''grub-install'''. Controllate il file '''/etc/fstab''' per vedere qual . Se fosse '''/dev/hda3''', dovremmo scrivere al ''prompt di grub'' (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
<pre>
<pre>
$ cd /usr/src
root (hd0,2)
</pre>
</pre>


Troveremo in questa directory (avendoli installati precedentemente) i sorgenti del kernel in un archivio tar.bz2:
fate attenzione perch� '''Grub''' numera sia i dischi che le partizioni, e lo fa partendo da 0, quindi il disco hda corrisponde ad hd0, e il numero della partizione � di una unit� in meno rispetto al numero che ha sotto linux.


Se fosse '''/dev/hda1''' dovremmo dare: '''root (hd0,0)''', chiaro?
{{Box | Nota |Ricordate che con la tastiera italiana, all'avvio, le parentesi si fanno con <big><tt>shift+0</tt></big> e <big><tt>shift+9</tt></big> mentre lo slash (<big><tt>/</tt></big>) con il tasto <big><tt>-</tt></big> ed il segno di uguale con .}}
Ora carichiamo il kernel. Poniamo che il file sia '''/boot/vmlinuz-2.6.6s26-mio-kernel'''. Supponiamo che la ''partizione di root del kernel'' (cio proprio la root del sistema) sia '''/dev/hda4''', scriveremo nel prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c') come secondo comando:
<pre>
<pre>
$ ls
kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
...
linux-source-2.6.8.tar.bz2
...
</pre>
</pre>


Decomprimiamo il kernel:
vedete? Partendo dalla ''root di grub'', che � '''/boot''' sotto linux, il file del kernel � semplicemente in '''/'''. In ogni caso � qui che l'auto-completamento (premendo <tt>TAB</tt>, lo sapete no?) gioca il suo ruolo migliore, e permette di scegliere il file corretto. Gli ultimi due parametri sono:
 
* '''ro''': accede inizialmente alle partizioni in sola lettura. E' buona norma inserirlo sempre.
* '''vga=791''': fa partire il sistema in ''frame buffer'' (console ad alta risoluzione). Per maggiore informazione leggete pi� avanti il capitolo dedicato.
 
A questo punto basta dare il comando '''boot''' per fare partire (si spera) il sistema.


<pre>
{{Box| Nota |Se non si ha una partizione separata per <tt>/boot</tt>, bisogner� indicare la partizione di root del sistema come root di grub. In questo caso per�, il kernel non si trover� in <tt>/vmlinuz</tt> ma in <tt>/boot/vmlinuz</tt>.}}
$ tar xvjf linux-source-2.6.8.tar.bz2
</pre>


A fine decompressione avremo una directory linux-source-2.6.8, creiamo un link simbolico linux che punta ai sorgenti del kernel:
== Far partire un secondo sistema ==


Se avete il kernel di una seconda distro sempre nella partizione di boot '''/dev/hda3''', basta cambiare il nome del file del kernel e l'opzione '''root=/dev/hda4''' per indicare la corretta ''partizione di root della seconda distro''.
Se invece il file del kernel della seconda distro risiede in un'altra
partizione che non sia la boot della prima distro (potrebbe essere una
seconda partizione di boot creata dalla seconda distro o direttamente
la partizione di root della seconda distro), basta indicare il percorso
completo a grub. Supponiamo che la partizione contenete l'altro kernel
sia '''/dev/hda7''' e che questa sia la root della seconda distro, per caricare il kernel scriveremo:
<pre>
<pre>
$ ln -s /usr/src/linux-source-2.6.8 linux
kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
</pre>
</pre>


Non necessario creare questo link, ma una usuale convenzione farlo anche perch� risulta comodo per entrare nella directory dei sorgenti del kernel.
ovviamente avvalendoci il pi� possibile dell'auto-completamento per
 
facilitare le cose. Notate come in questo caso abbiamo inserito '''/boot''' perch� non c'una partizione di boot ma solo una sotto-directory di root nella medesima partizione ovvero '''(hd0,6)''' ('''/dev/hda7''' in gergo linux).
Ora spostiamoci nella directory e puliamo i sorgenti del kernel:


Se avete un kernel che usa l'initrd (di solito tutti i kernel
ufficiali delle distro, ma io sconsiglio di usare l'initrd se invece vi
ricompilate il kernel) prima di dare il comando '''boot''' dovrete caricare anche l'immagine del ramdisk. Ovvero scrivere (dopo aver caricato il kernel) il seguente comando nel prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
<pre>
<pre>
$ cd linux
initrd /initrd.img-2.6.6-s26-mio-kernel
$ make-kpkg clean
</pre>
</pre>


Questo passaggio � inutile se � la prima volta che compilate il kernel, ma dalla seconda volta in poi diviene necessario per eliminare i file generati dalle precedenti compilazioni che potrebbero creare conflitti.
oppure
 
Ora, se avete installato un kernel precompilato che abbia la stessa versione del kernel che volete ricompilare potreste usare il suo file di configurazione come base di partenza per configurare il vostro kernel. A tal scopo basta copiare il file di configurazione che st� in <tt>/boot</tt> (i file di configurazione dei kernel installati hanno come nome <code>config</code> seguito dalla versione del kernel) nella directory dei sorgenti:


<pre>
<pre>
$ cp /boot/config-2.6.8 .config
initrd (hd0,6)/initrd.img-2.6.6-altra-distro
</pre>
</pre>


C'� chi arriva anche a installare un kernel precompilato per usare semplicemente il suo file di configurazione. Se avete banda da sprecare � possibile farlo. Tuttavia si pu� benissimo partire da zero senza copiare nessun file di configurazione.
a seconda di dove si trova l'immagine (si trova sempre nella stessa partizione/directory del suo kernel).


=== Configurazione: <code>make menuconfig</code> ===
{{Warningbox|Un kernel partir� solo con
la sua immagine initrd, se provate ad usare immagini initrd di altri
kernel il sistema non partir� dando un ''Kernel Panic''. Analogamente se cercate di fare partire un kernel che necessita di initrd, senza initrd il sistema andr� ancora in ''Kernel Panic''.}}


A questo punto, per configurare il nostro kernel, non ci resta che lanciare il comando:
== Configurare il Men� di grub ==


Il menu di grub si imposta tramite il file '''/boot/grub/menu.lst'''.
L'intestazione di questo file pu contenere molti comandi. Noi
vedremo solo un esempio semplicissimo ma pienamente sufficiente ai
nostri scopi:
<pre>
<pre>
$ make menuconfig
default 0
timeout 5
color light-gray/blue yellow/blue
</pre>
</pre>


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''.  
Inserendo queste righe all'inizio del '''menu.lst''' diremo a grub
che all'avvio dovr� attendere 5 secondi (timeout) e dopo di che
scegliere il primo kernel dell'elenco (il numero 0, ricordate che Grub
inizia a contare da zero?). Il men� sar� presentato con i colori
indicati, secondo il seguente schema: caretteri/sfondo rispettivamente
per il testo normale e per il testo evidenziato.


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 min. 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.  
Adesso, inseriamo i blocchi per i vari kernel. Come visto per fare partire un kernel servono tre comandi: ''root, kernel, boot'' (oppure nel caso ci sia l'initrd ''root, kernel, initrd, boot''). Nel '''menu.lst''' bisogna inserire in pi� soltanto un primo comando ('''title''')
che specifica il nome che apparir� all'avvio per quel kernel nel men�
del grub. In pratica, usando gli esempi precedenti dei due kernel,
dovremmo avere un '''menu.lst''' del genere:
<pre>
default   0
timeout   5
color    light-gray/blue yellow/blue


Per trovare quali moduli sono richiesti dal vostro hardware potete usare il comando '''lspci''' o meglio '''lspci -v'''. 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
title    Prima Distribuzione (puoi scrivere quello che vuoi)
root      (hd0,2)
kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
boot


Per approfondire la configurazione del kernel:
title    Seconda Distribuzione (puoi scrivere quello che vuoi)
root      (hd0,2)
kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
boot
</pre>


* [[Esempio configurazione kernel]] nel nostro wiki, per un semplice esempio.
Seguendo questo schema porterete aggiungere quanti kernel volete, ma
* [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'''.
ricordate che potrete provare prima i comandi interattivamente dal prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
* [http://kernel.xc.net/ Linux Kernel Configuration Archive]: potrete cercare le varie opzioni di configurazione di ogni versione del kernel.


In bocca al lupo con la configurazione ;-).
Nel caso i kernel abbiano bisogno dell'initrd il '''menu.lst''' dovrebbe semplicemente contere un comando in pi� per ogni kernel:
<pre>
default   0
timeout   5
color    light-gray/blue yellow/blue


Una volta finita la configurazione, uscite e salvate i cambiamenti. A questo punto il file <tt>/usr/src/linux/.config</tt> conterr� la nostra configurazione del kernel.
title    Prima Distribuzione (puoi scrivere quello che vuoi)
root      (hd0,2)
kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
initrd /initrd.img-2.6.6-s26-mio-kernel
boot


{{Box|Nota|Se avete gi� ricompilato il vostro kernel e volete passare ad una versione pi� aggiornata, ma non troppo diversa (ad esempio: 2.6.8 --> 2.6.10), non conviene rifare tutta la configurazione da capo. D'altro canto non � neanche possibile usare il vecchio file di configurazione dato che nel nuovo kernel ci saranno voci in pi� e o in meno e sarebbe improponibile cercarle ad una ad una.
title    Seconda Distribuzione (puoi scrivere quello che vuoi)
root      (hd0,2)
kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
initrd (hd0,6)/initrd.img-2.6.6-altra-distro
boot
</pre>


Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e lanciare il comando:
Ovviamente, il blocco di un kernel potrebbe contenere il comando
initrd ed il blocco di un altro no, a seconda che il kernel in oggetto
lo richieda o meno.


$ make oldconfig
A questo punto, se avete appreso i concetti di base dovreste essere
in grado di configurare il menu di grub per qualsiasi esigenza. Per i
pi� intraprendenti aggiungo un ultima chicca. Se nel blocco di ogni
kernel inserite, prima del comando '''boot''', il comando '''savedefault''' e modificate il comando '''default 0''' in '''default save''', all'avvio grub (dopo il timeout) sceglier� il kernel che avete scelto nel precedente avvio (vedi nota).


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>
== Avviare altri sistemi operativi ==
Un file config del vostro attuale kernel pu� essere trovato in <tt>/boot</tt> sotto il nome di <tt>config-2.x.x</tt>.}}


=== Alternative a <code>make menuconfig</code> ===
=== Windows, BeOS, OpenBSD ===


Per completezza segnalo le altre interfacce grafiche che � possibile usare per configurare il kernel al posto di <code>make menuconfig</code>.
Per alcuni sistemi operativi l'avvio tramite
boot-loader � pi� delicato, perch� hanno bisogno che la partizione da cui
partono sia "resa attiva" (e in molti casi questa deve essere anche una
partizione primaria). Oltretutto, mentre con linux Grub pu� caricare direttamente il kernel e avviare il sistema, con altri sistemi operativi il kernel pu� essere avviato solo dal boot-loader nativo e quindi Grub non pu� fare altro che richiamare il boot-loader nativo (''chainloading'') che a sua volta caricher� il kernel e avvier� il sistema.


;<code>make xconfig</code>: per usare una interfaccia grafica '''qt''' per la configurazione.
I sistemi operativi che devono essere avviati in questo
;<code>make gconfig</code>: per usare una interfaccia grafica '''gtk''' per la configurazione.
modo sono fondamentalmente tre: Windows, BeOS e OpenBSD. Il pi�
versatile, anche per quanto riguarda l'installazione in partizione non
primaria, � sicuramente BeOS. Per avviare uno di questi sistemi
operativi basta scrivere (prendiamo come esempio Windows, assumendo che
sia sulla prima partizione di un secondo disco):
<pre>
title Windows
rootnoverify (hd1,0)
makeactive
chainloader +1
boot
</pre>


Questi frontend non aggiungono niente di nuovo e sono pertanto funzionalmente equivalenti tra di loro. Per usarli sono per� necessarie le librerie di sviluppo, rispettivamente, di ''qt'' e ''gtk''.
Il primo comando (<tt>rootnoverify</tt>) dice sostanzialmente qual �
la partizione di windows (nel nostro caso la prima partizione del
secondo disco � hd1,0, corrispondente, in Linux, a <tt>/dev/hdb1</tt>), il
secondo comando, invece, rende la partizione attiva (condizione
essenziale per Windows), il terzo comando istruisce, sostanzialmente,
sul fatto di leggere la prima traccia di tale partizione, e l'ultimo
comando fa si che il sistema parta, eseguendo in ordine tutte le scelte
precedenti.


== Compilazione del kernel ==
=== FreeBSD ===
Ora � venuto il momento di cominciare la compilazione, a tal scopo useremo make-kpkg. Vediamo come utilizzare velocemente questo tool per compilare il nostro kernel personalizzato:


Uno dei motivi per cui Grub ha una nomenclatura tutta particolare
dei dischi dovuto al fatto che il programma stato pensato per
avviare anche kernel non-linux, uno su tutti, quello di FreeBSD.
FreeBSD ha, infatti, un sistema di organizzazione delle directory
abbastanza particolare. Nell'esempio assumiamo che FreeBSD sia
installato nella seconda partizione del secondo disco:
<pre>
<pre>
$ fakeroot make-kpkg --append-to-version -nomepersonalizzato --revision=1 kernel_image
title FreeBSD
root (hd1,1,a)
kernel /boot/loader
</pre>
</pre>


Questo comando compiler� il nostro kernel e lo inserir� in un pacchetto debian in <tt>/usr/src</tt>. Il comando '''<tt>fakeroot</tt>''' viene usato semplicemente per simulare un ambiente di root per l'utente normale.
Per approfondire il sistema di partizionamento di FreeBSD consultare la BSD-FAQ-it.


Diamo uno sguardo alle opzioni usate:
== Installare Grub su floppy ==
=== Metodo 1 ===
Installare Grub su un floppy vi permetter� di fare partire qualsiasi sistema anche con [[MBR]] corrotto. Per installare grub su di un floppy baster� eseguire i seguenti comandi:
<pre>
# cd /lib/grub/i386-pc
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out
#
</pre>


; <tt>--append-to-version</tt> : serve ad aggiungere un nome personalizzato al pacchetto che verr� aggiunto dopo il numero di versione, che in questo caso diventer� ''2.6.8-nomepersonalizzato''.
Su una distro non debian i percorsi potrebbero essere leggermente differenti.


; <tt>--revision</tt> : permette di impostare il numero di revisione del pacchetto, normalmente viene indicato con un numero intero.  
=== Metodo 2 ===
Un metodo pi� comodo che consente di salvare sul floppy anche il menu di avvio di grub (<tt>[[Guida_a_Grub#Configurare il Men� di grub|menu.lst]]</tt>) � il seguente.


; <tt>kernel_image</tt> : dice a make-kpkg di compilare l'immagine del kernel creare il pacchetto debian.
Formattiamo il floppy usando il filesystem ext2:


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 --append-to-version 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.
# mkfs.ext2 /dev/fd0


In realt� il comando '''make-kpkg''' accetta molti ulteriori parametri (elencher� solo i pi� importanti per gli altri leggete l'amichevole pagina di manuale aka read the friendly manual):
montiamolo e creiamo una directory di nome <tt>grub</tt>:


; <tt>--initrd</tt> : da usare se state compilando un kernel che utilizza le immagini initrd.img (''vedi [[Debian_Kernel_Howto#Bisogna_usare_l.27initrd_oppure_no.3F|FAQ: Bisogna usare l'initrd_oppure no?]]'').
# mount -t ext2 /dev/fd0 /media/floppy
; <tt>--added-modules foo</tt> : compila dei sorgenti esterni (presenti in <tt>/usr/src/modules</tt>) insieme al kernel, potete mettere pi� nomi separati da virgole.
# mkdir /media/floppy/grub
; <tt>--added-patches foo</tt> : aggiunge delle patch al kernel, le patch possono essere molteplici separate da virgole.
; <tt>--config</tt> : sceglie quale frontend usare per configurare il kernel (config, menuconfig, xconfig, gconfig).
; <tt>--zimage</tt> : crea una zImage per il kernel.
; <tt>--bzImage</tt> : crea una bzImage per il kernel.
; <tt>--mkimage</tt> : qui potete passare dei parametri a <code>mkinitrd</code>, ad esempio se volete creare una immagine rom: <code>genromfs -d %s -f %s</code>.
; <tt>--rootcmd foo</tt> : per passare un comando a make-kpkg ad esempio fakeroot o sudo
; <tt>CONCURRENCY_LEVEL</tt> : questa variabile e' l'omonimo di -j per make, per usarla vi basta mettere il numero intero che desiderate usare (''$ CONCURRENCY_LEVEL=4 make-kpkg --blabla ecc.ecc...'' )


Come ultimo parametro dovremo mettere un'azione da compiere, vediamo le principali:
Copiamo i file di grub ed il menu di avvio:


; <tt>clean</tt> : pulisce i sorgenti.
# cp /boot/grub/stage* /media/floppy/grub/
; <tt>kernel_headers</tt> : questo genera un pacchetto con gli headers del kernel.
# cp /boot/grub/menu.lst /media/floppy/grub
; <tt>binary</tt> : questo genera un nuovo pacchetto deb con i sorgenti, uno con gli header, uno con la documentazione e uno con l' immagine del kernel.
; <tt>buildpackage</tt> : pulisce i sorgenti e avvia "binary" (vedere sopra).
; <tt>build</tt> : compila solo l'immagine del kernel.
; <tt>modules</tt> :compila tutti moduli esterni sotto <tt>/usr/src/modules</tt> e genera un file .diff e un pacchetto sorgente.
; <tt>modules_config</tt> : permette di configurare i moduli esterni residenti in <tt>/usr/src/modules</tt> prima di compilarli.
; <tt>modules_image</tt> : crea i pacchetti deb dei moduli esterni residenti in <tt>/usr/src/modules</tt> senza il file .diff e senza creare un'altro pacchetto sorgente.
; <tt>modules_clean</tt> : pulisce i sorgenti dei moduli esterni presenti in <tt>/usr/src/modules</tt>.
; <tt>debian</tt> : questo crea la directory <tt>./debian</tt> utile per compilare i kernel vanilla e patcharli alla maniera debian.


==Installazione nuovo kernel==
Nota: di default il menu.lst ha la voce <tt>savedefault</tt> sotto ogni kernel. Grub salva l'ultimo kernel avviato in <tt>/boot/grub/default</tt> . Se per� avviamo da dischetto, grub, che usa il <tt>menu.lst</tt> copiato da <tt>/boot/grub</tt>, vorr� salvare il default in <tt>/grub/default</tt> (su dischetto). Non trovandolo grub si bloccher� con "error 15 file not found". Se non vogliamo modificare a mano il <tt>menu.lst</tt> del dischetto togliendo la voce <tt>savedefault</tt> da ogni kernel, dobbiamo copiare anche il file <tt>/boot/grub/default</tt> sul dischetto:
Una volta finito torneremo alla riga di comando e ci sposteremo nella directory precedente (/usr/src/) dove troveremo il pacchetto .deb del kernel appena compilato:


<pre>
# cp /boot/grub/default /media/floppy/grub/
$ cd ..
$ ls
...
kernel-image-2.6.8-nomepersonalizzato-386_1.Custom_i386.deb
...
</pre>


Adesso possiamo installare il pacchetto con il nostro nuovo kernel ricompilato. Diventiamo quindi root con '''su''', e digitiamo:
Ora smontiamo il floppy:
<pre>
# dpkg -i kernel-image-2.6.8-nomepersonalizzato-386_1.Custom_i386.deb
</pre>


Se abbiamo lilo dovremo configurare lilo.conf aggiungendo le righe relative al kernel. Ricordatevi che, con lilo, per rendere effettive le modifiche bisogna aggiornare il [[MBR]] (Master Boot Record) con il comando:
# umount /media/floppy


<pre>
e installiamo lo stage1 nel [[MBR]] (del floppy):
# lilo -v
</pre>


Se abbiamo grub, invece, non ci resta altro che riavviare :D. Tuttavia per approfondire le personalizzazioni che � possibile fare su grub, potete leggere l'apposita sezione della [[Guida a Grub]]:
# grub


* [[Guida_a_Grub#Usare_update-grub|Guida a Grub: Usare update-grub]]
e dalla shell di grub digitiamo i seguenti comandi:


==Installare e gestire i moduli==
> root (fd0)
> setup (fd0)
> quit


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.
Fatto. Non ci resta che provare il nostro dischetto di avvio.


Per scegliere invece quali moduli fare partire all'avvio ci sono diverse strade.
== Usare update-grub ==


# 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 inserili in '''/etc/hotplug/blacklist'''.
Quando installate un nuovo kernel (binario o ricompilato che sia) contenuto in un pacchetto debian, verr� eseguito lo script '''update-grub''' che cercher� nuovi kernel in <tt>/boot</tt> e li inserir� in <tt>menu.lst</tt>.
# 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 '''/etc/modules''', uno per riga. Se non vi va di editare un file di testo (o non ricordate esattamente i nomi dei moduli) potrete usare '''modconf''' che permette di scegliere interattivamente quali moduli caricare all'avvio.
Questo script pu� anche essere eseguito a mano se si ricompila un
kernel senza creare un pacchetto debian o se vuole ripristinare
velocemente il <tt>menu.lst</tt>.


==FAQ==
Le voci per i vari kernel inserite da '''update-grub''' sono racchiuse tra la linea:
===Per aggiungere un modulo devo ricompilare tutto il kernel?===
Dipende.


Se il modulo fa parte del kernel debian (cio� il suo sorgente � contenuto nel pacchetto <tt>kernel-source</tt> 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>
### BEGIN AUTOMAGIC KERNELS LIST
</pre>


  # modprobe ''nomemodulo''
e la linea:


Se il sorgente del modulo � invece pacchettizzato singolarmente (il nome di questi pacchetti comincia per <tt>module-source</tt>) '''non � necessario''' ricompilare il kernel.
<pre>
Debian ci fornisce la comoda utility '''module-assistant''' che permette di scaricare, compilare e pacchettizzare un modulo del kernel. Basta lanciare il comando
### END DEBIAN AUTOMAGIC KERNELS LIST
</pre>


  # m-a
al di fuori di questo blocco potrete inserire tutte le vostre configurazioni che non volete siano modificate da '''update-grub''' (ad. kernel fissi, o qualsiasi altro comando grub).


e una interfaccia ''dialog'' ci guider� passo passo.
Nel blocco "automagico" non vengono inseriti solo le voci dei vari
kernel ma anche dei commenti che servono a personalizzare il
comportamento di '''update-grub'''. Baster� modificare i commenti che cominciano con un solo '''#''' (quelli che cominciano con '''##'''
vengono ignorati anche da update-grub). Se ad esempio vogliamo che ogni
nuovo kernel sia inserito solo una volta (senza la seconda voce
recovery) e che venga sempre usato il framebuffer basta modificare le
apposite righe di <tt>menu.lst</tt> nel seguente modo:


Si pu� usare il comando <tt>module-assistant list-avaible</tt> (o il diminutivo <tt>m-a la</tt>) per ottenere la lista completa dei moduli installabili con module-assistant. Per le altre innumerevoli opzioni potete leggere la pagina di manuale tradotta in italiano:
<pre>
# kopt=root=/dev/hda9 ro vga=791
... ... ...
# alternative=false
</pre>  


* [[Pagina di manuale di module-assistant]]
ovviamente quella partizione (<tt>/dev/hda9</tt>) deve essere la root dei kernel che si vuole inserire automagicamente. Notare che '''non''' si deve decommentare la linea altrimenti update-grub lo ignorer� e verr� considerato un comando grub.


===Bisogna usare l'initrd oppure no?===
== Impostare una password ==
La risposta breve �: no non usatelo.


Di seguito la risposta lunga:
Impostare una password in Grub non � operazione semplicissima,
tuttavia una volta imparato il metodo risulter� abbastanza semplice.
Prima di procedere con la spiegazione di come si utilizza la password
all'interno del file <tt>menu.lst</tt> (che, lo ricordiamo, si trova in <tt>/boot/grub</tt>), conviene spiegare in dettaglio il codice da utilizzare.
Per impostare una password, infatti, � sufficiente scrivere:


L'immagine initrd (ramdisk iniziale) serve per caricare dei moduli nel kernel prima che questo abbia l'accesso alla partizione di root. Quindi basta compilare questi moduli staticamente e non avremo mai bisogno di un ramdisk. Ma quali sono questi moduli che servono nelle prime fasi di avvio? Semplicemente i moduli che permettono di leggere la partizione di root, ovvero:
<pre>
 
password vostrapassword
* il modulo del controller del proprio harddisk
</pre>
* il modulo del filesystem della partizione di root


Per un kernel ricompilato, l'initrd � generalmente inutile e rende l'avvio leggermente pi� lento. &Egrave; 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:
Tuttavia una password di questo tipo ha il difetto di essere
 
visibile in chiaro (anche all'avvio stesso di Grub), ed quindi poco
* [[Compilazione Kernel 2.6.11 con Bootsplash]]
utile; fortunatamente Grub pensa a voi e vi permette di impostare una
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]
password criptata con l'algoritmo MD5. Per fare ci� dovete, prima di
 
tutto ottenere la password codificata in tale modo; niente di pi�
La risposta lunga quindi no, non usate il'initrd quando questo non sia strettamente necessario.
semplice, avviate dalla shell il comando <tt>grub-md5-crypt</tt>,
 
inserite due volte la password (una di conferma) e copiate il
===Ma se io devo usare l'initrd assolutamente?===
risultato ottenuto. Per utilizzare la password dovrete utilizzare il
Per usare l'intrd '''si deve''' compilare staticamente il supporto per l'initrd impostando le seguenti voci:
seguente codice, leggermente differente dal precedente:


<pre>
<pre>
Device Drivers  --->
password --md5 vostrapasswordmd5
  Block devices  --->
    <*> RAM disk support
    (16)  Default number of RAM disks
    (8192) Default RAM disk size (kbytes)
    [*]  Initial RAM disk (initrd) support
</pre>
</pre>


Inoltre bisogna anche aggiungere il supporto per il filesystem usato nell'immagine del ram disk. In debian si usa di default il '''cramfs''', attivabile alla voce:
Adesso bisogna spiegare come utilizzare la parola chiave password;
esistono due modi, uno � quello di metterla dopo i codici iniziali,
prima della lista dei vari sistemi operativi, l'altro � di mettere
l'attributo anche per ogni sistema operativo avviato, dopo la riga
'''title'''. Mentre la seconda password ha effetto solamente sul sistemi
operativo in cui � inserito, la prima ha un effetto pi� generale, e
blocca l'accesso solo per quei sistemi operativi che contengono la
parola chiave lock dopo la riga '''title'''. Un esempio riassuntivo chiarir�
l'uso delle password e di tutte le opzioni viste finora:


<pre>
<pre>
File systems  --->
default 0
    Miscellaneous filesystems  --->
timeout 5
        <*> Compressed ROM file system support
splashimage=(hd0,2)/grub/splash.xpm.gz
</pre>
password --md5 vostrapasswordmd5#1
title Prima Distribuzione (puoi scrivere quello che vuoi)
lock
root (hd0,2)
kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
initrd /initrd.img-2.6.6-s26-mio-kernel
savedefault
password --md5 vostrapasswordmd5#2
boot


Se si vuole usare un'altro filesystem basta impostarlo in '''/etc/mkinitrd/mkinitrd.conf'''.
title Seconda Distribuzione (puoi scrivere quello che vuoi)
lock
root (hd0,2)
kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
initrd (hd0,6)/initrd.img-2.6.6-altra-distro
savedefault
password --md5 vostrapasswordmd5#3
boot


Con tali configurazioni � 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.
title Windows
lock
rootnoverify (hd1,0)
makeactive
chainloader +1
savedefault
password --md5 vostrapasswordmd5#4
boot


Attualmente ci sono tre tool in debian che permettono di creare l'immagine initrd:
title FreeBSD
lock
root (hd1,2,a)
kernel /boot/loader
savedefault
password --md5 vostrapasswordmd5#5
boot
</pre>


* '''<code>mkinitrd</code> ''' (fornito dal pacchetto <code>initrd-tools</code>): questo � il vecchio metodo usato fino al kernel 2.6.12.
== Riconoscimento modalit� video ==
* '''<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 complati come moduli.
* '''<code>mkinitrd.yaird</code> ''' (fornito dal pacchetto <code>yaird</code>): utilizzabile con kernel 2.6.13 o pi� recenti. Analizza il sistema e aggiunge all'immagine initrd '''solo''' i moduli necessari al boot della macchina su cui si installa il kernel. Permette di ottenere una immagine molto pi� piccola del caso precedente.


Per ulteriori informazioni sui kernel debian e le immagini initrd:
Una funzionalit� forse poco nota, ma utile in certi casi � la capacit� di grub di riconoscere al volo le modalit� supportate in ''frame buffer'' dalla scheda video tramite il comando '''vbeprobe'''. E' anche possibile testare una modalit� video tramite il comando '''testvbe''':
Grub mostrer� delle sfumature orizzontali multicolori che scorrono,
alla risoluzione del modo scelto. Scelto un modo (ad esempio 0x103), si
potr� fare partire il sistema in quella modalit� aggiungendo il
parametro '''vga=''numero''''' alla linea del kernel, dove ''numero''
� il numero del modo pi� 200 esadecimale (indicato con 0x200). Questa
operazione � molto semplice: basta aggiungere 2 alla prima cifra del
modo, ad esempio se vogliamo il modo '''0x103''' dovremo passare al kernel '''vga=0x303'''.
Si pu� anche inserire la modalit� video in decimale convertendo con una
calcolatrice scientifica il numero passato al kernel: nell'esempio �
equivalente scrivere '''vga=0x303''' o '''vga=771'''.


* [http://kernel-handbook.alioth.debian.org/ch-initramfs.html Debian Linux Kernel Handbook: Managing the initial ramfs (initramfs) archive]
Ricordo che per usare il ''frame buffer'' deve essere abilitato
il supporto nel kernel. Tutti i kernel binari delle distribuzioni hanno
questo supporto attivato, ma se vi ricompilate un vostro kernel dovrete
ricordarvi di attivare il supporto ''frame buffer''.


=== Ma il kernel non fa il boot senza initrd! ===
== Usare una splashimage ==
Vedi FAQ precedente. L'initrd non � necessario per fare il boot. Se il sistema non parte ci� dipende da una incorretta configurazione del kernel.


'''lordnisse''' ha riportato sul forum che per avviare il suo sistema stato necessario compilare anche il supporto per partizioni MS-DOS:
Con Grub � possibile utilizzare un'immagine di sfondo per l'avvio
del PC. Questa immagine deve essere a 640x480 pixel, con una profondit�
di soli 14 colori, in formato [http://www.w3.org/People/danield/xpm_story.html XPM] (un formato immagine che � possibile modificare come un semplice testo) e deve essere compressa in formato gzip.


<pre>
I modi con cui, partendo da un'immagine in png o jpeg, � possibile
File systems  --->
ottenere un'immagine con tali requisiti, sono fondamentalmente due. Si
    Partition Types  --->
pu� decidere di utilizzare GIMP; aprendo l'immagine di partenza, questa
        [*] Advanced partition selection
deve essere ridimensionata a 640x480 ed i colori devono essere
        [*]  PC BIOS (MSDOS partition tables) support (NEW)
impostati (premendo <tt>ALT+I</tt>) a 14, quindi si deve provvedere a salvarla direttamente in <tt>/boot/grub</tt> con l'estensione .xpm.gz (generalmente <tt>splash.xpm.gz</tt>).
</pre>
Oppure si pu� decidere di utilizzare i seguenti comandi dalla shell:


=== Posso usare make-kpkg con un kernel vanilla ===
<pre>$ su
Certamente, <tt>make-kpkg</tt> pu� essere usato indifferentemente sia con i sorgenti Debian del kernel di linux che con i sorgenti del [[kernel vanilla]].
- inserire la password di root -
# convert - geometry 640x480 -colors 14 wall.jpg splash.xpm
# gzip splash.xpm
# cp splash.xpm.gz /boot/grub
#</pre>


I sorgenti Debian sono contenuti nei pacchetti <tt>kernel-source-*</tt> (o <tt>linux-source-*</tt> per i kernel dal 2.6.12 in poi) e sono installabili come usuali pacchetti con [[APT]].
Volendo � possibile cercare su internet splashimage gi� pronti. Segnalo gli indirizzi degli archivi pi� noti:


I sorgenti vanilla devono essere scaricati manualmente da [http://www.kernel.org www.kernel.org]. Devono essere scompattati in <code>/usr/src</code>, e per il resto la procedura di compilazione � assolutamente identica al caso di sorgenti Debian.
* [http://ruslug.rutgers.edu/~mcgrof/grub-images/images/?page=1 GNU GRUB Public Splashimage Archive]
* [http://fabrizio.ciacchi.it/guide.php?pagina=grub Archivio di Fabrizio Ciacchi]


Nel caso di sorgenti vanilla, pu� essere interessante vedere l'opzione <tt>debian</tt> nella sezione [[Debian_Kernel_Howto#Compilazione_del_kernel|Compilazione del kernel]], tuttavia l'uso di tale parametro � del tutto opzionale.
Per utilizzare lo splashimage appena creato � necessario aprire il file <tt>menu.lst</tt> ed inserire, dopo timeout:


===Errore con l'opzione <tt>--revision</tt> ===
Pu' capitare che, ricompilando il kernel variando il valore dell'opzione <tt>--revision</tt> venga rilevato un errore simile al seguente:
<pre>
<pre>
I note that you are using the --revision flag with the value
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
  2.
</pre>
However, the ./debian/changelog file exists, and has a different value
  1.
I am confused by this discrepancy, and am halting.</pre>
 
Questo problema e' semplicemente dovuto al fatto che non si � pulito il tree dei sorgenti dopo la prima compilazione. Per ovviare basta dunque:


<pre>$ make-kpkg clean</pre>
== Approfondimenti ==
=== Grub su CD-ROM o su chiavetta USB ===


e rilanciare la compilazione.
Segnalo un interessante articolo (in inglese) di [http://www.freesoftwaremagazine.com/ Free Software Magazine] che spiega molti trucchi per l'utilizzo di Grub. Interessante, tra le altre cose, � la spiegazione dettagliata di come installare Grub su chiavetta USB oppure su CD-ROM. Ecco il link all'articolo:


===You are attempting to install a kernel image (version ''version-revision'') However, the directory /lib/modules/''version-revision'' still exists.===
* [http://www.freesoftwaremagazine.com/free_issues/issue_10/grub_intro GRUB tips and tricks]
Se si aggiorna il kernel ad una [[revisione]] successiva, durante l'installazione del pacchetto verr� fatta la seguente domanda:
<pre>
You are attempting to install a kernel image (version 2.6.15.4-swsusp) However, the directory /lib/modules/2.6.15.4-swsusp still exists.  If this directory
belongs to a previous linux-image-2.6.15.4-swsusp package, and if you have deselected some modules, or installed standalone modules packages, this could be
bad. However, if this directory exists because you are also installing some stand alone modules right now, and they got unpacked before I did, then this is
pretty benign.  Unfortunately, I can not tell the difference.


If /lib/modules/2.6.15.4-swsusp belongs to a old install of linux-image-2.6.15.4-swsusp, then this is your last chance to abort the installation of this
== Note finali ==
kernel image (nothing has been changed yet).


If this directory is because of stand alone modules being installed right now, or if it does belong to an older linux-image-2.6.15.4-swsusp package but you
Per ulteriori approfondimenti rimando alla documentazione ufficiale di '''Grub'''. Nei sistemi Debian si trova nel pacchetto '''grub-doc''' e si consulta con il comando '''info grub''' (ricordate che in queste pagine basta premere 'u' per salire di un livello).
know what you are doing, and if you feel that this image should be installed despite this anomaly, Please answer n to the question.


Otherwise, I suggest you move /lib/modules/2.6.15.4-swsusp out of the way, perhaps to /lib/modules/2.6.15.4-swsusp.old or something, and then try
=== Nota #1 ===
re-installing this image. 


Stop install since the kernel-image is already installed? 
L'opzione '''savedefault''' all'interno della configurazione di un
</pre>
sistema operativo, fa in modo che, se selezionato, quello sia il
prossimo sistema operativo di default all'avvio. Ci� viene ignorato se
all'inizio del file <tt>menu.lst</tt> � stata messa la voce '''default=''x''''', dove '''''x''''' identifica il numero del sistema operativo di default (partendo da 0 anzich� da 1).


La risposta da dare � '''<tt>No</tt>'''! L'avvertimento ci ricorda che i moduli del vecchio kernel (quello con la stessa versione ma numero di revisione diverso) verranno cancellati e sostituiti dai moduli del nuovo kernel.
=== Nota #2 ===


Questo � il comportamento normale, infatti, nel caso non si voglia sostituire un vecchio kernel ma semplicemente installarne parallelamente uno nuovo (con la stessa identica versione) si sarebbe dovuta modificare la stringa dopo <code>--append-to-version</code> invece che quella dopo <code>--revision</code> (vedi sez. [[Debian_Kernel_Howto#Compilazione_del_kernel|Compilazione kernel]]).
In alcuni sistemi, ad esempio Redhat o Fedora, il file <tt>'''menu.lst'''</tt> potrebbe chiamarsi <tt>'''grub.conf'''</tt>.
Quindi, prima di operare sulle impostazioni di Grub, verificare il nome
esatto del file utilizzato. Se anche il sistema utilizzasse tale file,
la guida rimane valida, basta tenerne presente il diverso nome.


Se il kernel che si sta sostituendo � quello in esecuzione ''� necessario riavviare la macchina il prima possibile!''
==Ringraziamenti==


== Link ==
Si ringraziano le seguenti persone:


* [http://www.debian.org/doc/manuals/reference/ch-kernel.it.html Manuale di Riferimento Debian: Capitolo 7 - Il kernel Linux su Debian]
* [http://fabrizio.ciacchi.it Fabrizio Ciacchi] per aver scritto i paragrafi su come bootare sistemi non Linux, sull'inserimento delle splashimage e sull'uso della password.  
* [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://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.


Buon divertimento con Debian GNU/Linux!
* Mattew East (del [http://www.ubuntulinux.org/wiki/ItalianDocumentation wiki italiano di Ubuntu]) per avere wikizzato la guida.


----
----
 
Autore: [[Utente:TheNoise|~ The_Noise]]
Autore iniziale: Abortigeno
 
Rivisto ed esteso: [[Utente:TheNoise|~ The Noise]]
 
[[Categoria:Kernel]]
89

contributi