Compilazione di un nuovo kernel Perché qualcuno dovrebbe compilarsi un nuovo kernel? Spesso non è necessario dato che il kernel inserito in Debian gestisce la maggior parte delle configurazioni. Inoltre Debian offre parecchi kernel alternativi, quindi si dovrebbe come prima cosa controllare se fra i pacchetti con kernel alternativi ce n'è uno che si adatta meglio al proprio hardware. Comunque può essere utile compilare un nuovo kernel per poter: gestire hardware particolare o gestire conflitti hardware con kernel preconfezionati usare opzioni del kernel che non sono supportate dai kernel preconfezionati (per esempio il supporto per la memoria alta) ottimizzare il kernel rimuovendo i driver inutili in modo da velocizzare l'avvio del sistema creare un kernel monolitico al posto di uno modulare usare un kernel aggiornato o di sviluppo imparare cose nuove sui kernel linux Gestione dell'immagine del kernel Non ci si deve impaurire nel provare a compilare il kernel. È divertente e utile. Per compilare il kernel con il metodo seguito da Debian sono necessari alcuni pacchetti: fakeroot, kernel-package, kernel-source-&kernelversion; (la versione più recente al momento della scrittura), linux-source-2.6 e pochi altri che probabilmente sono già installati (si consulti /usr/share/doc/kernel-package/README.gz per l'elenco completo). Questo metodo crea un .deb dai sorgenti del kernel e, se si hanno dei moduli non-standard, crea anche un .deb di questi moduli sincronizzato con il precedente. Questo è il miglior modo di gestire le immagini del kernel; in /boot vengono inseriti il kernel, il file System.map e un log con le configurazioni attive durante la compilazione. Notare che non è obbligatorio compilare il kernel alla Debian; ma l'uso del sistema di pacchetti per gestire il kernel è realmente più sicuro e più semplice. In pratica si possono anche reperire i sorgenti del kernel direttamente da Linus anziché da kernel-source-&kernelversion; linux-source-2.6 e comunque usare il metodo di compilazione con kernel-package. Notare che è possibile trovare la documentazione completa sull'uso di kernel-package in /usr/share/doc/kernel-package. Questa sezione contiene solo un breve manuale introduttivo. D'ora in avanti si suppone che si abbia il controllo completo della macchina e che i sorgenti del kernel siano da qualche parte all'interno della propria home directory Ci sono molti altri posti in cui è possibile estrarre i sorgenti del kernel e compilare un kernel personalizzato, ma è molto più semplice se questa operazione non richiede dei permessi speciali. . Si suppone anche che la versione del kernel sia &kernelversion;. Assicurarsi di trovarsi nella directory in cui si vuole scompattare i sorgenti del kernel, estrarli usando tar xjf /usr/src/kernel-source-&kernelversion;.tar.bz2 tar xjf /usr/src/linux-source-&kernelversion;.tar.bz2 e cambiare la directory corrente in kernel-source-&kernelversion; linux-source-&kernelversion; che è stata appena creata. Adesso si può configurare il kernel. Eseguire make xconfig se X11 è installato, configurato e in esecuzione; altrimenti eseguire make menuconfig (è necessario che sia installato il pacchetto libncurses5-dev). Prendersi tutto il tempo necessario per leggere l'aiuto in linea e scegliere con attenzione; in caso di dubbi di solito è consigliabile includere i driver dei dispositivi (il software che gestisce le periferiche hardware come le schede Ethernet, i controller SCSI e così via) se non si è sicuri. Attenzione: se non si capisce il significato delle altre opzioni non legate a un hardware specifico si dovrebbero lasciare al valore predefinito. Non ci si deve dimenticare di selezionare Kernel module loader in Loadable module support (normalmente non è selezionato), altrimenti il proprio sistema Debian rischia di avere dei seri problemi. Ripulire i sorgenti e ripristinare i parametri di kernel-package usando make-kpkg clean. Adesso compilare il kernel con: fakeroot make-kpkg --revision=custom.1.0 kernel_image. Il numero di versione 1.0 può essere cambiato secondo le necessità; questo è semplicemente il numero di versione che si può usare per tener traccia delle compilazioni del kernel. Allo stesso modo si può inserire qualsiasi parola al posto di custom (p.e. il nome dell'host). La compilazione del kernel richiede un po' di tempo, in base alla potenza della macchina. Se si ha bisogno del supporto PCMCIA è necessario installare il pacchetto pcmcia-source. Estrarre il file tar compresso con gzip nella directory /usr/src (è importante che i moduli si trovino esattamente dove il sistema si aspetta che siano, ovvero in /usr/src/modules). Poi, da root, eseguire make-kpkg modules_image. Finita la compilazione è possibile installare il proprio kernel personalizzato come qualsiasi altro pacchetto. Da root eseguire dpkg -i ../kernel-image-&kernelversion;-sottoarchitettura_custom.1.0_&architecture;.deb. La parte sottoarchitettura è opzionale e indica la sottoarchitettura, per esempio i586, in base alle opzioni del kernel sono state attivate. dpkg -i kernel-image... installa il kernel più alcuni file di supporto. Per esempio sono installati i file System.map (utile per il debug del kernel) e /boot/config-&kernelversion; che contiene la configurazione. Il nuovo pacchetto kernel-image-&kernelversion; è anche in grado di riconoscere, in base alla piattaforma, il bootloader ed eseguire un aggiornamento in modo da poter riavviare la macchina senza dover rieseguire il bootloader. Se si è creato anche un pacchetto con i moduli, per esempio se si usa PCMCIA, è necessario installare anche questo pacchetto. Adesso si deve riavviare il sistema: leggere attentamente tutti gli avvertimenti che potrebbero apparire durante il passo precedente e poi eseguire shutdown -r now. Per ulteriori informazioni sui kernel Debian e sulla compilazione del kernel si consulti il Debian Linux Kernel Handbook. Per ulteriori informazioni su kernel-package si consulti l'eccellente documentazione in /usr/share/doc/kernel-package.