[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]

La guida Debian
Capitolo 7 - Il kernel Linux su Debian


Debian ha i suoi modi per la ricompilazione del kernel e dei relativi moduli. Vedere anche Debian ed il kernel, Sezione 2.7.


7.1 Ricompilare il kernel

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:

Manoj Srivastava ha scritto:
--initrd richiede una patch cramfs solo per Debian.
Herbert Xu ha scritto:
No, non ne ha bisogno, tutto quello che serve per usare un filesystem diverso da CRAMFS è di impostare MKIMAGE in /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.


7.1.1 Il metodo Debian standard

Controllate anche i rapporti sui bachi 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 \
     	modules_image # modules_image è per pcmcia.cs*, ecc.
     $ cd ..
     # dpkg -i kernel-image*.deb pcmcia-cs*.deb # install

make-kpkg kernel_image esegue in realtà make oldconfig ed make dep Se non usate initrd, 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).


7.1.2 Il metodo classico

Scaricate i sorgenti originali da:

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
     ... configurate 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 ...

7.1.3 I Kernel header

Molti programmi "normali" non hanno bisogno dei kernel header, 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 collegamenti 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 header particolari per qualche applicazione kernel-specifica, modificate il(i) makefile in modo da includere nei percorsi dei puntatori a dir-del-particolare-kernel-header/include/linux e dir-del-particolare-kernel-header/include/asm.


7.2 Kernel 2.4 modulare

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. Alcuni moduli possono essere auto attivati dai programmi di riconoscimento hardware, tipo discover. Vedere anche Pacchetti per il riconoscimento hardware per X, Sezione 9.4.2

Vedere Funzioni speciali per trattare con i moduli, Sezione 2.7.5 e Documentation/*.txt nel sorgente Linux source per informazioni più accurate.


7.2.1 PCMCIA

/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 script 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 esse già inseriti. Il driver tulip standard dovrebbe funzionare bene con la vostra card dcollegamenti.

—Mike."

Vedere Linux PCMCIA HOWTO e Configurazione di rete e PCMCIA, Sezione 10.10.5.


7.2.2 SCSI

[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.


7.2.3 Funzioni di rete

/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.


7.2.4 Il filesystem EXT3 ( > 2.4.17)

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 filesystem 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 filesystem 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 INVIO
     # 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.


7.2.5 Supporto nel kernel 2.4 per Realtek RTL-8139

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.


7.2.6 Supporto per la porta parallela

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.


7.3 Mettere a punto il kernel tramite il filesystem proc

Il comportamento del kernel Linux può essere modificato al volo usando il filesystem proc.

Per le informazioni di base sulle modifiche ai parametri del kernel attraverso il filesystem /proc, leggete Documentation/sysctl/* nella directory Linux.

Potete vedere alcuni esempi di manipolazione dei parametri del kernel in /etc/init.d/networking e Strani problemi di accesso con alcuni siti web, Sezione 3.7.5.

Vedere sysctl.conf(5) su come impostare la configurazione del kernel all'avvio attraverso /proc, con lo script /etc/init.d/procps.sh generalmente lanciato da /etc/rcS.d/S30procps.sh.


7.3.1 Troppi file aperti

Il kernel può dare un messaggio del tipo "Too many open files" (troppi file aperti). Ciò è dovuto al basso valore predefinito (8096) per file-max. Per risolvere il problema, date il seguente comando da root (oppure mettetelo in uno script di inizio 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

oppure mettete quanto segue in /etc/sysctl.conf per avere una modifica permanente:

     file-max=65536   # per kernel 2.2 e 2.4 
     inode-max=131072 # solo per 2.2

7.3.2 Intervalli di flush del disco rigido

Potete modificare gli intervalli di flush mediante il filesystem proc. Quanto segue riduce gli intervalli dai cinque secondi predefiniti ad un secondo.

     # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush

Ciò può avere un minimo impatto negativo nella performance I/O. Però assicura il contenuto dei file, tranne che per l'ultimo secondo, più breve dei cinque predefiniti. Questo è vero anche per i filesystem journaled.


7.3.3 Vecchie macchine lente e con poca memoria

Per alcuni vecchi sistemi con poca memoria, può ancora essere utile abilitare l'over-commit della memoria tramite il filesystem proc.

     # echo 1 > /proc/sys/vm/overcommit_memory

7.4 Il kernel 2.6 con udev

Udev è un rimpiazzo dinamico per /dev. I nomi dei device devon essere molto corti. Devfs, usato nel kernel 2.4, è obsoleto.

Potete abilitarlo installando il kernel Debian 2.6 kernel-image-2.6.NN con il pacchetto udev.


[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]

La guida Debian

1.08-3, dom mag 1 07:45:18 UTC 2005

Osamu Aoki osamu@debian.org
Editor: David Sewell dsewell@virginia.edu
Traduzione italiana: Davide Di Lazzaro mc0315@mclink.it
Autori, Sezione A.1