====== Kernel Linux precompilati ======
In questa pagina alcuni pacchetti Debian kernel-image precompilati. Sono versioni specificatamente configurate per la tipologia di utilizzo, diverse quindi dalla versione generalista fornita con la distribuzione Debian. Qui di seguito una panoramica sulle linee guida seguite per ogni versione.
===== Versione Server =====
=== Stabilità ===
Come suggerito nel README sono state escluse le caratteristiche **development**, **experimental** o **debugging**. Le maggiori limitazioni di questa scelta sono la mancanza del frame buffer (''CONFIG_FB'') e il supporto ad alcune schede Ethernet.
=== Compattezza ===
Tutto l’indispensabile per un boot su macchina IDE o SATA sono state compilate in modo statico, in modo da non richiedere initrd. E’ compreso il supporto RAID e LVM. Le possibili varianti hardware sono gestite tramite moduli: schede Ethernet, mouse o tastiera USB, ecc.
=== Funzioni networking ===
Compilato staticamente un supporto completo per il protocollo TCP/IP e NETFILTER, comprese le caratteristiche tipiche necessarie per un firewall. Esiste il supporto per schede Ethernet, modem seriali e protocollo PPP. Previsto anche il supporto per stampanti parallele e USB.
=== Funzioni filesystem ===
Previsto l’uso del file system ext3, non è previsto l’accesso a partizioni di tipo diverso. Supporto ai vari network file system come NFS e SMB. Supporto al quota e ai vari character set NLS. Supporto al loopfs, al formato iso9660 per i CD-ROM e all’udf per i DVD.
=== Altro hardware e Multimedia ===
Incluso il supporto modulare per i sensori su scheda madre (''CONFIG_I2C'') in modo da poter utilizzare gli lm-sensors. E’ stato escluso tutto il supporto al multimedia: audio, video for linux, framebuffer, AGP e accessori USB. Si suppone che un server non abbia X-Window in esecuzione né una scheda audio né abbia periferiche da collegare a caldo.
Le opzioni di configurazione più interessanti sono elencate in [[doc:appunti:linux:sa:kernel|questa pagina]].
===== Versione Desktop =====
=== Flessibilità ===
Per adattarsi alla varietà dell’hardware e per rendere la vita più facile all’utente meno esperto si è compilato più cose possibile come moduli, inoltre si è attivato il KMOD (Kernel module loader support) che potrà essere usato per caricare i moduli kernel a richiesta, oltre al supporto di Discover e Hotplug.
Proposta: supporto integrato per RAID mirroring (''CONFIG_MD_RAID1=y'') e per tutti i controller SATA supportati.
=== Differenze rispetto al kernel Debian ===
Incluso il supporto ai dischi IDE ed alla modalità DMA offerta da alcuni specifici chipset. Si è rinunciato a initrd per maggior semplicità.
===== Versione Notebook =====
=== Processore ===
Sul portatile TravelMate 312T con processore Pentium Mobile Pentium MMX si era compilato il kernel 2.4.25 con ''CONFIG_M586MMX=y'', come era stato fatto con il kernel 2.4.18. Si sono verificati diversi kernel panic e blocchi improvvisi. La cosa sembra risolta dopo aver compilato ''CONFIG_M586=y'' (Pentium Classic).
=== Supporto Ethernet ===
Oltre a supportare le schede PCMCIA, si sono compilati come moduli anche i driver delle schede Ethernet classiche, questo perche’ alcune schede PCMCIA Cardbus vengono viste a tutti gli effetti come schede PCI.
===== Compilare il kernel con Debian =====
Chi usa la distribuzione GNU/Linux Debian ha a disposizione alcuni strumenti che semplificano la compilazione e l'installazione di un kernel personalizzato. Supponiamo che si abbia una macchina con il kernel 2.4.18 e si voglia compilare un kernel 2.4.27. Per complicare le cose si stanno utilizzando - per la scheda audio - i moduli ALSA, che andranno ricompilati anch'essi in quanto strettamente legati alla versione del kernel.
Si installano i pacchetti Debian **''kernel-source-2.4.27''**, **''alsa-source''** e **''kernel-package''**. In estrema sintesi i comandi da impartire sono:
cd /usr/src
tar jxvf kernel-source-2.4.27.tar.bz2
ln -s kernel-source-2.4.27 linux
cd /usr/src/linux
make mrproper
cp /boot/config-2.4.18 .config
make oldconfig
make menuconfig
make-kpkg clean
make-kpkg --revision=paros.4.1 --config=menuconfig kernel_image
make-kpkg modules_image
dpkg -i ../kernel-image-2.4.27_paros.4.1_i386.deb
dpkg -i ../alsa-modules-2.4.27_1.0.6a-3+paros.4.1_i386.deb
Il primo gruppo di comandi serve a scompattare i sorgenti veri e propri (con il pacchetto Debian viene installato l'archivio compresso //.bz2//) e a creare il link simbolico ''/usr/src/linux/''. Quindi la configurazione del kernel viene riportata ai valori predefiniti (''make mrproper''). Per avere una configurazione sensata da cui partire si recupera quella del kernel corrente e la si aggiorna alla versione nuova con ''make oldconfig''.
La prima fase termina con la configurazione vera e propria: ''make menuconfig''. Per i puristi che vogliono esaminare tutti i possibili parametri di configurazione c'è sempre il caro e vecchio ''make config'' in alternativa.
La seconda fase è qualla dove si apprezza tutta la potenza di Debian: con tre soli comandi si otterranno due pacchetti //.deb//, pronti per pessere installati. I pacchetti conterranno tutto il necessario: ad esempio nel pacchetto kernel-image ci saranno anche i relativi moduli, gli script di installazione, la gestione delle dipendenze, etc. Comodissimo per installare il nuovo kernel anche su altre macchine.
L'opzione ''%%--config=menuconfig%%'' forza una seconda esecuzione della configurazione, questa volta però dopo aver applicato le patch di Debian, quindi le opzioni presentate potrebbero essere diverse. Se non si specifica ''%%--config%%'', viene effettuato un ''oldconfig'', quindi le opzioni nuove introdotte dalle patch Debian vengono comunque richieste.
Per essere sicuri che le patch di Debian siano applicate controllare il file di configurazione ''/etc/kernel-pkg.conf'' (cercare l'opzione ''patch_the_kernel := YES'') oppure impostare la variabile ''PATCH_THE_KERNEL=YES''.
Ovviamente perché tutto vada a buon fine bisogna aver installato il necessario (come ad esempio il complilatore! Ma a questo dovrebbe pensare il meccanismo delle dipendenze Debian) ed aver operato una configurazione sensata del kernel.
Nella terza fase si utilizza il meccanismo standard Debian per l'installazione dei pacchetti (''dpkg''). Ovviamente prima di fare reboot conviene controllare che il boot manager (LILO, Grub o quant'altro) sia stato correttamente aggiornato. In generale gli script di postinstallazione contenuti nei pacchetti avranno fatto il loro dovere.
=== Usare un compilatore alternativo ===
In un sitema Debian possono essere installati contemporaneamente più compilatori, in una Debian Etch possiamo trovare GCC 4.0 e 3.3. Il compilatore di default viene scelto con dei link simbolici, non viene usato il sistema delle //alternatives//. Il compilatore di default potrebbe dare dei problemi come nel caso del GCC 4.0 con i sorgenti kernel 2.6.8-16:
# make oldconfig
HOSTCC scripts/kconfig/mconf.o
scripts/kconfig/mconf.c:91: error: static declaration of 'current_menu' follows non-static declaration
scripts/kconfig/lkc.h:63: error: previous declaration of 'current_menu' was here
make[1]: *** [scripts/kconfig/mconf.o] Error 1
make: *** [oldconfig] Error 2
Per usare la versione 3.3 si devono cambiare i seguenti link:
/usr/bin/gcc -> gcc-3.3
/usr/bin/gccbug -> gccbug-3.3
=== Kernel modulare e initrd ===
**NOTA:** con Debian Lenny la gestione della //initrd// è cambiata abbastanza: c'è il kernel 2.6 e il pachhetto **initramfs-tools** che contiene il tool **''update-initramfs''**, vedere il [[http://kernel-handbook.alioth.debian.org/ch-initrd.html|manuale Debian Kernel]].
Personalmente preferisco compilare kernel che siano in grado di iniziare il bootstrap senza dover utilizzare moduli caricabili. Questo significa che il necessario per leggere il disco fisso (driver IDE o SCSI, eventualmente il supporto RAID, il supporto al file system in uso, etc.) deve essere compilato //staticamente// e non come modulo.
Altrimenti è necessario ricorrere al supporto **initrd**, cioé il kernel trova in un file immagine di tipo ram-disk tutti i moduli necessari a completare il bootstrap.
In breve: si installa il pacchetto **''initrd-tools''**, la configurazione del kernel deve avere almeno:
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_ROMFS_FS=y
CONFIG_CRAMFS=m
Poi è necessario aggiungere il parametro **''%%--initrd%%''** al comando ''make-kpkg''. **Attenzione!** il parametro ''%%--initrd%%'' funziona solo se si hanno i sorgenti kernel forniti da Debian, non con quelli originali di [[http://www.kernel.org/|www.kernel.org]]. La complicazione deriva dal fatto che il tool ''mkinitrd'' (installato con il pacchetto **''initrd-tools''**) genera un'immagine ram-disk in formato //cramfs//, ma il supporto kernel per il cramfs ha bisogno delle patch Debian.
Il file ''/boot/initrd.img-2.4.27'' non viene incluso nel pacchetto .deb, ma creato durante l'installazione del pacchetto ''kernel-image-2.4.27'' da noi generato. L'immagine ram-disk contiene tutti i moduli necessari, il file viene salvato nella directory ''/boot/'' e viene creato un link ''initrd.img'' nella directory radice. Per chi è interessato questi sono più o meno i comandi che lo script di installazione del pacchetto esegue:
cd /boot/
mkinitrd -o initrd.img-2.4.27 /lib/modules/2.4.27
ln -s boot/initrd.img-2.4.27 /initrd.img
Prima del reboot conviene controllare che la configurazione del boot loader sia stata aggiornata opportunamente: oltre alla posizione del kernel deve essere indicata anche la posizione dell'immagine ram-disk. Ad esempio con LILO serve qualcosa del genere in ''/etc/lilo.conf'':
image=/vmlinuz
label=Linux
read-only
initrd=/initrd.img
Con Grub invece questo è un esempio per ''/boot/grub/menu.lst'':
title Debian GNU/Linux, kernel 2.4.27
root (hd0,0)
kernel /boot/vmlinuz-2.4.27 root=/dev/hda1 ro
initrd /boot/initrd.img-2.4.27
===== Donwload =====
I miei pacchetti Debian precompilati sono disponibili su
[[http://www.rigacci.org/pub/Linux/kernel/]]