Debian Kernel Howto: differenze tra le versioni

Nessun cambiamento nella dimensione ,  1 giu 2005
m
corretto "appen-to-version"
m (corretto "appen-to-version")
 
m (corretto "appen-to-version")
Riga 1: Riga 1:
Per compilare il kernel su debian e facilitarsi la vita avremo bisogno di:
Per poter firmare i nostri package necessitiamo di sue strumenti per poter firmare i nostri package necessitiamo di due strumenti '''gpg''' e '''dpkg-sig'''.
 
Il primo dovrebbe essere gi� installato di default con la nostra debian, per il secondo:


<pre>
<pre>
kernel-source-2.n.n (dove n e' la versione )
# apt-get install dpkg-sig
kernel-image-2.n.n-n-n86
kernel-package
module-assistant
modconf
libncurses5-dev
libncursesw5-dev (queste due non sono risolte come dipendenze e senza non potete far andare menuconfig)
</pre>
</pre>


Diventiamo root ( con su ) e portiamoci nella directory dove sono stati installati i sorgenti del kernel:
fatto questo generiamo una nuova coppia di chiavi , da usare solo per firmare i packages:


<pre>
<pre>
root@localhost:~# cd /usr/src
$ gpg --gen-key
</pre>
</pre>


Avremo una situazione tipo:
* rispondiamo 1 alla prima domanda ovvero DSA e ElGamal, diamo invio
* come dimensione lasciamo pure 1024, diamo invio
* mettiamo 0 come scadenza, diamo invio
* rispondiamo s, diamo invio
* ora ci verr� chiesto Nome e Cognome:


<pre>
<pre>
root@localhost:/usr/src# ls
Nome e Cognome: denis pecci
kernel-kbuild-2.6-n (dove n e' la versione dell' attuale kernel-package)
kernel-source-2.n.n.tar.bz2 (dove n e' la versione del kernel)
</pre>
</pre>


Decomprimiamo il kernel:
inseriamo i nostri dati e diamo invio
 
* ora ci viene chiesto l'indirizzo email:


<pre>
<pre>
root@localhost:/usr/src# tar xvjf kernel-source-2.n.n.tar.bz2
Indirizzo di Email: debian@nextdeb.net
</pre>
</pre>


A fine decompressione avremo una directory kernel-source-2.n.n (dove 2.n.n sta per la versione del kernel), creiamo un link simbolico linux che punta ai sorgenti del kernel:
inseriamolo e diamo invio
 
* ed ora inseriamno il commento per la coppia di chiavi:


<pre>
<pre>
root@localhost:/usr/src# ln -s /usr/src/kernel-source-2.n.n linux
Commento: NextDeb Team Packager
</pre>
</pre>


Questo link serve a make-kpkg (ma anche a make nel vecchio stile di compilazione) in maniera che non debba sapere la versione del kernel, e quindi il percorso ai sorgenti, per convenzione gli sviluppatori del kernel hanno deciso di usare il metodo del link per ovviare a questo problema.
diamo invio


Ora spostiamoci della directory e puliamo i sorgenti del kernel:
* ora premiamo ''''o'''' e invio
* ora ci verr� richiesta la password per le chiavi, inseriamola e invio
 
Ecco fatto, ora abbiamo la nostra coppia di chiavi per firmare i pacchetti, esportiamole sul nostro keyserver preferito.
 
Per firmare i nostri packages procediamo in questo modo:


<pre>
<pre>
root@localhost:/usr/src# cd linux
# dpkg-sig --sign nostronick nomepackages.deb
root@localhost:/usr/src/linux# make-kpkg clean
</pre>
</pre>


Copiamo il file di configurazione della immagine del kernel che abbiamo scaricato (essendo l'immagine precompilata puo' boottare su quasi tutte le piattaforme avremo una piu alta possibilita che il nostro kernel booti senza problemi):
{{Box|Esempio|
<pre>
# dpkg-sig --sign debian cwcdr_2.0.1-4_all.deb
Processing cwcdr_2.0.1-4_all.deb...
 
Ti serve una passphrase per sbloccare la chiave segreta
dell'utente: "denis pecci (NextDeb Team Packager) <debian@nextdeb.net>"
chiave DSA di 1024 bit, ID 73E02514, creata il 2004-11-26


<pre>
Signed deb cwcdr_2.0.1-4_all.deb
root@localhost:/usr/src/linux# cp /boot/config-2.n.n .config
</pre>
</pre>
}}


Ora e' venuto il momento di cominciare la compilazione, prima per� una premessa su make-kpkg;
Ecco fatto, ora abbiamo firmato in maniera inequivocabile il nostro pacchetto. Per controllare la firma possiamo usare sia <tt>dpkg-sig</tt> che <tt>gpg</tt>. Con <tt>gpg</tt> basta usare il seguente comando:
questo tool accetta vari parametri direttamente su una sola riga di comando (elenchero solo i pi� importanti per gli altri leggete l'amichevole pagina di manuale aka read the friendly manual)


<pre>
<pre>
--help mostra l'utilizzo del tool
# gpg --verify nome package
--append-to-version foo appende un nome personalizzato al kernel, ad esempio foo
--added-modules foo compila dei sorgenti esterni (presenti in /usr/src/modules) insieme al kernel, potete mettere
                          pi� nomi separati da virgole
--added-patches foo aggiunge delle patch al kernel, le path possono essere molteplici separate da virgole
--config sceglie quale frontend usare per configurare il kernel (config, menuconfig, xconfig, gconfig)
--initrd da usare se state compilando un kernel che utilizza le immagini initrd.img
--zimage crea una zImage per il kernel
--bzImage crea una bzImage per il kernel
--mkimage qui potete passare dei parametri a mkinitrd, ad esempio se volete creare una immagine rom
                        "genromfs -d %s -f %s"
--rootcmd foo per passare un comando a make-kpkg ad esempio fakeroot o sudo
CONCURRENCY_LEVEL questa variabile e' l'omonimo di -j per make, per usare vi basta mettere il numero intero che
                          desiderate usare ( CONCURRENCY_LEVEL=4 make-kpkg --blabla ecc.ecc... )
</pre>
</pre>


Ora vediamo "cosa pu� fare" make-kpkg:
{{Box|Esempio|
 
<pre>
<pre>
clean         pulisce i sorgenti
# gpg --verify cwcdr_2.0.1-4_all.deb
buildpackage pulisce i sorgenti e avvia "binary" (vedere sotto)
gpg: Firma fatta ven 26 nov 2004 11:23:33 CET usando DSA con ID 73E02514
binary         questo genera un nuovo pacchetto deb con i sorgenti, uno con gli header, uno con la
gpg: Firma valida da "denis pecci (NextDeb Team Packager) <debian@nextdeb.net>"
                          documentazione e uno con l' immagine del kernel
gpg: controllo il trustdb
kernel_headers questo genera un pacchetto con gli headers del kernel
gpg: controllo al livello 0 firmato=0 ot(-/q/n/m/f/u)=0/0/0/0/0/2
kernel_image questo genera un pacchetto con il kernel
build         compila solo l'immagine del kernel
modules         compila tutti moduli esterni sotto /usr/src/modules e genera un file .diff e un pacchetto
                          sorgente
modules_config permette di configurare i moduli esterni residenti in /usr/src/modules prima di compilarli
modules_image crea i pacchetti deb dei moduli esterni residenti in /usr/src/modules senza il file .diff e
                          senza creare un'altro pacchetto sorgente
modules_clean pulisce i sorgenti dei moduli esterni presenti in /usr/src/modules
debian         questo crea la directory ./debian utile per compilare i kernel vanilla e patcharli alla
                          maniera debian
</pre>
</pre>
}}


Ora vediamo come utilizzare velocemente questo potente tool per compilare il nostro kernel personalizzato;
mentre con <tt>dpkg-sig</tt>:
ipotizziamo di usare un kernel della serie 2.6.8, dopo aver pulito i sorgenti:


<pre>
<pre>
root@localhost:/usr/src/linux# make-kpkg --append-to-version -nomepersonalizzato-386 --initrd --config menuconfig binary
# dpkg-sig -v -l nome package
</pre>
</pre>


Questo comando vi aprira' il frame di menuconfig (ci mettere un po di tempo poiche' genera sorgenti e documentazione prima di aprirvi il frontend) dove dovrete aggiungere|togliere tutto quello che ritenete necessario (andate su <help> per avere maggiori dettagli), una volta configurato tutto e usciti make-kpkg compilera' tutto come da spiegazione antecedente.
{{Box|Esempio|
 
Una volta finito tornerete alla riga di comando e vi sposterete nella directory precedente dove troverete tutti i vostri bei pacchetti .deb che potrete installare e disinstallare cosi come ogni pacchetto .deb:
 
<pre>
<pre>
root@localhost:/usr/src/linux# cd ..
# dpkg-sig -v -l cwcdr_2.0.1-4_all.deb  
root@localhost:/usr/src# ls
Processing wcdr_2.0.1-4_all.deb...  
kernel-kbuild-2.6-3
debian
kernel-source-2.6.8
kernel-source-2.6.8.tar.bz2
linux
modules
rpm
kernel-image-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb
kernel-headers-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb
kernel-doc-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb
kernel-source-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb
root@localhost:/usr/src# dpkg -i kernel-image-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb
Selezionato il pacchetto kernel-image-2.6.8-nomepersonalizzato-386, che non lo era.
(Lettura del database ... 191374 file e directory attualmente installati.)
Spacchetto kernel-image-2.6.8-nomepersonalizzato-386 (da kernel-image-2.6.8-nomepersonalizzato-386_10.00.Custom_i386.deb)
[...cut...]
</pre>
</pre>
}}


Se abbiamo lilo dovremo configurare lilo.conf aggiungendo le righe relative al kernel, se abbiamo grub non ci resta altro che riavviare :D
come potete vedere quest'ultima maniera mostra solo il nick del firmante del package.
 
===Piccolo tip===
Se abbiamo messo reiserfs o ext3 come modulo dovremo aggiungerlo nel file /etc/mkinitrd/modules, in maniera che venga aggiunto alla immagine di initrd.
 
Anche qui una piccola spiegazione: l'immagine di initrd e' una immagine base del kernel che viene caricata in ram prima del boot del nostro kernel, questa carica alcuni moduli cosi che il vero kernel una volta avviato si trovi i suddetti moduli gia caricati e possa filare liscia come l'olio (bug dei moduli in questione, esclusi :) )
 
Per ora e' tutto, vedr� di aggiungere una mini guida a module-assistant, per quel che riguarda modconf:
diventate root (con su) e digitate modconf.




Buon divertimento con Debian GNU/Linux
----


Autore: Abortigeno
Autore: debian
806

contributi