Debian ha i suoi modi per la ricompilazione del kernel e dei relativi moduli. Vedere anche Debian ed il kernel, Sezione 2.7.
Utilizzare gcc
, binutils
e modutils
da
Debian unstable può essere di aiuto nel compilare l'ultimissimo
kernel Linux. Vedere /usr/share/doc/kernel-package/README.gz
, in
particolare la parte finale, per le informazioni ufficiali.
Dato che la compilazione del kernel è qualcosa in continua evoluzione, è un soggetto difficile da trattare, persino lo sviluppatore più ammirato può fare confusione:
/etc/mkinitrd/mkinitrd.conf
.
Siate accorti, e fate affidamento sul
/usr/share/doc/kernel-package/README.gz
di Manoj e Kent.
Accertatevi di ottenere l'ultima versione di unstable del pacchetto
kernel-package
se state per compilare la versione più recente del
kernel.
initrd non serve per un kernel compilato solo per una macchina.
Io lo uso perchè voglio che sia quasi lo stesso di quello fornito da
kernel-image. Se usate initrd, leggetevimkinitrd(8)
e mkinitrd.conf(5)
. Vedere anche http://bugs.debian.org/149236
.
Controllate anche i bug reports per kernel-package
gcc
, binutils
e modutils
. Usatene le
versioni più recenti, se necessario.
La compilazione di un proprio kernel dai sorgenti in un sistema Debian richiede una cura speciale. Per compilare più "kernel-images", utilizzate il nuovo "--append_to_version" con make-kpkg.
# apt-get install debhelper modutils kernel-package libncurses5.dev # apt-get install kernel-source-2.4.18 # usate la versione più recente # apt-get install fakeroot # vi /etc/kernel-pkg.conf # inserisco il mio nome ed email $ cd /usr/src # la directory di compilazione $ tar -bzip2 -xvf kernel-source-2.4.18.tar.bz2 $ cd kernel-source-2.4.18 # se è il vostro sorgente $ cp /boot/config-2.4.12-386.config # usa il config corrente come default $ make menuconfig # personalizzate a vostro piacimento $ make-kpkg clean # deve essere eseguito (per: man make-kpkg) $ fakeroot make-kpkg --append_to_version -486 --initrd \ --revision=rev.01 kernel_image $ cd ../modules/pcmcia $ fakeroot ./debian/rules $ cd ../.. # dpkg -i kernel-image*.deb pcmcia-cs*.deb # install
make-kpkg kernel_image esegue in realtà un make oldconfig ed un make dep Se initrd non è usato, non mettete -initrd.
Se si vogliono i moduli da pcmcia-cs o nessun modulo pcmcia, si deve selezionare "General setup —>" e "PCMCIA/CardBus support —>" in make menuconfig ed impostando la configurazione come "< >PCMCIA/CardBus support" (cioè, deselezionate la casella).
Su una macchina SMP, impostate CONCURRENCY_LEVEL in accordo con
kernel-pkg.conf(5)
.
Scaricate i sorgenti originali da:
http://www.kernel.org/
http://pcmcia-cs.sourceforge.net/
oppure utilizzate i sorgenti equivalenti da debian ed eseguite i seguenti comandi:
# cd /usr/src # tar xfvz linux-versione.tar.gz # rm -rf linux # ln -s linux-versione linux # tar xfvz pcmcia-cs-versione.tar.gz # ln -s pcmcia-cs-versione pcmcia # cd linux # make menuconfig ... personalizzate a vostro piacimento ... # make dep # make bzImage ... modifiche per lilo / grub ... ... muovete /usr/src/linux/arch/i386/boot/bzImage in boot ... ... /sbin/lilo o qualunque altra cosa serva per grub # make modules; make modules_install # cd ../pcmcia # make config # make all # make install ... aggiungete i nomi dei moduli richiesti a /etc/modules # shutdown -r now ... fate il boot con il nuovo kernel ...
Molti programmi "normali" non hanno bisogno dei kernel headers, anzi,
possono corrompersi se li utilizzate direttamente; dovrebbero invece essere
compilati rispetto agli headers con cui glibc
è stato
compilato, ovvero le versioni contenute in
/usr/include/linux
e /usr/include/asm
del sistema
Debian.
Per cui non ponete i link simbolici alle directory in
/usr/src/linux
da /usr/include/linux
e
/usr/include/asm
, come diversamente suggerito in alcuni documenti
ormai obsoleti.
Se avete bisogno di kernel headers particolari per qualche
applicazione kernel-specifica, modificate il(i) Makefile
in modo
da includere nei percorsi dei puntatori a
dir-del-particolare-kernel-headers/include/linux
e
dir-del-particolare-kernel-headers/include/asm
.
I nuovi kernel debian 2.4 forniti dai pacchetti kernel-image-2.4.NN sono altamente modularizzati. Per farli funzionare come avete deciso, dovrete essere sicuri che i moduli siano stati attivati.
Sebbene abbia molti esempi per /etc/modules
nella sezione seguente
da utilizzare come correzione rapida, so che il modo giusto per correggere
questi problemi correlati ai moduli è di fornire un alias per il dispositivo in
un file contenuto in /etc/modutils/
, essendoci abbastanza alias
disponibili con i kernel attuali.
Vedere Funzioni speciali per trattare con
i moduli, Sezione 2.7.5 e Documentation/*.txt
nel sorgente
Linux source per informazioni più accurate.
/etc/modules
deve contenere i seguenti driver, affinchè PCMCIA
funzioni:
# Driver ISA PnP isa-pnp # Driver PCMCIA di basso livello # yenta_socket # non sembra essere necessario nel mio caso.
Il resto viene configurato dagli scripts pcmcia (del pacchetto
pcmcia-cs
), da depmod
e da kmod
. Penso
che isa-pnp
mi sia stato necessario perchè il mio laptop è un
vecchio ISA-PCMCIA. I modelli più recenti con CardBus-PCMCIA non lo
richiedono.
Voce del generoso Miquel van Smoorenburg miquels@cistron.nl
:
"Ho semplicemente rimosso tutta la roba correlata con pcmcia dal mio
laptop, qui al lavoro, compreso cardmgr, ecc., ed ho installato un kernel 2.4
con supporto per cardbus, insieme al nuovo pacchetto hotplug
da
woody.
Se avete delle PC card a 32 bit non avete bisogno del pacchetto pcmcia, il kernel 2.4 ha i servizi per le card già inseriti. Il driver tulip standard dovrebbe funzionare bene con la vostra card dlink.
—Mike."
[NON TESTATO]/etc/modules
deve contenere i seguenti driver
affinchè SCSI funzioni:
# SCSI core scsi_mod # Driver generico SCSI sg # Disco SCSI sd_mod # Tutti gli altri moduli hardware necessari ...
Forse depmod
può prendersi cura di alcuni dei moduli
summenzionati.
/etc/modules
deve contenere i seguenti driver per le funzioni
extra di rete:
# net/ipv-4 ip_gre ipip # net/ipv-4/netfilter # iptable (nell'ordine) ip_tables ip_conntrack ip_conntrack_ftp iptable_nat iptable_filter iptable_mangle # ip_nat_ftp ip_queue # ipt_LOG ipt_MARK ipt_MASQUERADE ipt_MIRROR ipt_REDIRECT ipt_REJECT ipt_TCPMSS ipt_TOS ipt_limit ipt_mac ipt_mark ipt_multiport ipt_owner ipt_state ipt_tcpmss ipt_tos ipt_unclean # #ipchains #ipfwadm
Quanto sopra non è ottimizzato al meglio. depmod
potrebbe
prendersi cura di alcuni dei moduli.
L'attivazione di un filesystem "journaled" con il tipo EXT3 FS richiede i seguenti passi, usando un pacchetto kernel-image Debian precompilato ( > 2.4.17):
# cd /etc; mv fstab fstab.old # sed 's/ext2/ext3,ext2/g' <fstab.old >fstab # vi /etc/fstab ... impostate il filesystem di root ad "auto" invece di "ext3,ext2" # cd /etc/mkinitrd # echo jbd >>modules # echo ext3 >>modules # echo ext2 >>modules # cd / # apt-get update; apt-get install kernel-image-2.4.17-686-smp ... installa l'ultimo kernel ed imposta il boot (lilo viene lanciato a questo punto) # tune2fs -j -i 0 /dev/hda1 # tune2fs -j -i 0 /dev/hda2 ... Per tutti i filesystems EXT2 convertiti a EXT3 # shutdown -r now
A questo punto il journaling EXT3 è attivato. Avere le voci "type"
in fstab
come ext3,ext2 assicura, in caso il kernel
non supportasse EXT3, un tranquillo ritorno ad EXT2 per le partizioni non-root.
Se avete un kernel 2.4 già installato e non lo volete reinstallare, date gli
stessi comandi apt-get
di cui sopra e poi:
# mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp # lilo # tune2fs -j -i 0 /dev/hda1 # tune2fs -j -i 0 /dev/hda2 ... per tutti i filesystems EXT2 convertiti a EXT3 # shutdown -r now
A questo punto il journaling EXT3 è attivato.
Qualora /etc/mkinitrd/modules
non fosse stato impostato al lancio
di mkinitrd
e si volessero aggiungere alcuni moduli al boot:
... al prompt di initrd per entrare in shell (entro 5 sec.), premete RETURN # insmod jbd # insmod ext3 # modprobe ext3 si prende cura di tutto # insmod ext2 # ^D ... continuate il boot
Sui messaggi al boot (dmesg
), potrà apparire "cramfs: wrong
magic", messaggio noto per essere inoffensivo. Questo problema è stato
risolto in Sarge (10/2002). Vedere http://bugs.debian.org/135537
ed il EXT3 File System
mini-HOWTO
oppure
/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz
per
ulteriori informazioni.
Alcuni sistemi hanno sperimentato dei gravi blocchi del kernel, quando EXT3 è attivato (fino al 2.4.17) ma, per quanto mi riguarda, non ho avuto problemi.
Per qualche motivo, il modulo per RTL-8139 non si chiama più rtl8139, ma
8139too. All'aggiornamento del kernel da 2.2 a 2.4, dovrete modificare a mano
/etc/modules
per inserire il nuovo nome del modulo.
In kernel-image-2.4.*
, il supporto per la porta parallela è
fornito come modulo. Attivatelo con:
# modprobe lp # echo lp >> /etc/modules
Vedere Documentation/parport.txt
nel sorgente Linux.
Il kernel può dare un messaggio del tipo "Too many open files"
(troppi file aperti). Ciò è dovuto al basso valore di default (8096) per
file-max. Per risolvere il problema, date il seguente comando da
root (oppure mettetelo in uno script di inizializzazione in
/etc/rcS.d/*
.
# echo "65536" >/proc/sys/fs/file-max # per i kernel 2.2 e 2.4 # echo "131072" >/proc/sys/fs/inode-max # solo per kernel 2.2
Per maggiori informazioni su come cambiare i parametri del kernel tramite il
file system /proc
, leggete il sorgente Linux in
Documentation/sysctl/*
.
Potete vedere altri esempi di manipolazioni dei parametri del kernel in
/etc/init.d/networking
e Strani problemi di accesso con alcuni siti
web, Sezione 3.7.5.
La guida Debian
1.07-12, mer set 8 02:54:31 UTC 2004osamu@debian.org
dsewell@virginia.edu
mc0315@mclink.it