8.3. Linux-2.6.8.1

Il pacchetto di Linux contiene il kernel ed i file header.

Tempo approssimativo di costruzione: 4.20 SBU

Spazio su disco richiesto: 181 MB

L'installazione di Linux dipende da:: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed

8.3.1. Installazione del kernel

La compilazione del kernel comprende alcuni passi: configurazione, compilazione e installazione. Consultare il file README nella directory sorgente del kernel per un metodo alternativo al modo in cui il libro configura il kernel.

Prepararsi per la compilazione lanciando il seguente comando:

make mrproper

Questo comando assicura che l'albero di compilazione del kernel sia pulito. Il team del kernel raccomanda che questo comando venga eseguito prima di qualunque compilazione del kernel. Non si dovrebbe contare sul fatto che l'albero di compilazione sia pulito dopo la scompattazione.

Ci si deve inoltre assicurare che il kernel non tenti di passare eventi hotplug allo userspace finché questo non specifichi che è pronto:

sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c

Se, nel Sezione 7.6, “Configurazione della console Linux”, si è deciso di voler compilare la keymap nel kernel, dare il seguente comando:

loadkeys -m /usr/share/kbd/keymaps/[percorso della keymap] > \
    drivers/char/defkeymap.c

Per esempio, se si ha una tastiera olandese si dovrebbe usare /usr/share/kbd/keymaps/i386/qwerty/nl.map.gz.

Configurare il kernel attraverso un'interfaccia a menu:

make menuconfig

make oldconfig potrebbe essere più appropriato in alcune situazioni. Vedere il file README per maggiori informazioni.

[Nota]

Nota

Durante la configurazione del kernel, ci si assicuri di abilitare l'opzione “Support for hot-pluggable devices” dal menu “General Setup”. Questo permette agli eventi hotplug usati da udev di popolare la directory /dev con i nodi di dispositivo.

Se si desidera è possibile saltare la configurazione del kernel semplicemente copiando il file di configurazione, .config, dal sistema host (se disponibile) nella cartella scompattata linux-2.6.8.1. In ogni caso non si raccomanda questa soluzione. E' molto meglio esplorare tutti i menu di configurazione e creare la propria configurazione da zero.

Per il supporto alla memoria condivisa POSIX, assicurarsi che l'opzione “Virtual memory file system support” sia attiva. Tale opzione è presente nel menu “File systems” ed è solitamente attiva per default.

Gli script di avvio di LFS partono dal presupposto che “Support for Host-side USB” e “USB device filesystem” siano entrambi compilati direttamente nel kernel o che nessuno dei due lo sia. Gli script di avvio non funzioneranno correttamente se c'è un modulo (usbcore.ko).

[Nota]

Nota

NPTL richiede che il kernel sia compilato con GCC 3.x, in questo caso 3.4.1. La compilazione con 2.95.x può causare fallimenti nella suite di test delle glibc, perciò non si raccomanda di compilare il kernel con gcc 2.95.x.

Compilare il kernel e i moduli:

make

Se si intende utilizzare i moduli del kernel, è necessario un file /etc/modules.conf. Le informazione riguardanti i moduli e la configurazione del kernel in generale possono essere trovati nella documentazione del kernel, che si trova nella directory linux-2.6.8.1/Documentation. La pagina man di modules.conf può essere di ulteriore interesse.

Fare molta attenzione quando si legge altra documentazione perché di solito si applica solo a kernel della serie 2.4.x. A quanto ne sappiamo, la configurazione specifica per Hotplug e Udev non è documentata da nessuna parte. Il problema è che Udev crea un nodo di dispositivo solo se Hotplug o uno script utente inserisce il modulo corrispondente nel kernel e non tutti i moduli sono rilevabili da Hotplug. Si noti che dichiarazioni come la seguente nel file /etc/modprobe.conf non funzionano con Udev:

alias char-major-XXX un-modulo

Tenuto conto di tutte queste complicazioni con Hotplug, Udev e i moduli, raccomandiamo caldamente di partire con un kernel completamente non modulare, specialmente se questa è la prima volta che si usa Udev.

Installare i moduli, se il kernel ne fa uso:

make modules_install

Se ci sono molti moduli e poco spazio disco è possibile eseguire lo stripping e la compressione di tali moduli. Per la maggior parte degli utenti non ne vale la pena, ma se il sistema ha veramente poco spazio vedere http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html.

Terminata la compilazione del kernel è finita sono richiesti altri passi per completare l'installazione. Alcuni file devono essere copiati nella directory /boot.

La path dell'immagine del kernel può variare in funzione della piattaforma che si sta utilizzando. Lanciare il seguente comando per installare il kernel:

cp arch/i386/boot/bzImage /boot/lfskernel-2.6.8.1

System.map è un file dei simboli per il kernel. Esso mappa i punti di ingresso di ogni funzione dell'API (Application Programming Interface) del kernel, oltre agli indirizzi delle strutture dati del kernel. Lanciare il seguente comando per installare questo file:

cp System.map /boot/System.map-2.6.8.1

Il file di configurazione del kernel .config prodotto con il precedente passo make menuconfig contiene tutte le selezioni di configurazione per il kernel che è appena stato compilato. Sarebbe una buona idea mantenere questo file per usi futuri:

cp .config /boot/config-2.6.8.1

E' importante notare che i file presenti nella directory sorgente del kernel non sono di proprietà di root. Ogni qualvolta si scompatta un pacchetto come utente root (come abbiamo fatto in chroot), i file finiscono per avere gli ID di utente e gruppo del computer in cui sono stati compressi. Questo non è solitamente un problema per gli altri pacchetti poiché i sorgenti vengono eliminati dopo l'installazione. Ma i file sorgenti di Linux vengono spesso mantenuti per lungo tempo, perciò esiste che la possibilità che l'utente che ha lo stesso ID dell'utente "compressore" possa avere i diritti di accesso in scrittura ai sorgenti del kernel.

Se è necessario mantenere i sorgenti del kernel, è consigliabile eseguire chown -R 0:0 nella directory linux-2.6.8.1 per assicurarsi che tutti i file siano posseduti da root.

8.3.2. Contenuti di Linux

File Installati: il kernel, gli header del kernel, ed il file System.map

Brevi descrizioni

Il kernel

Il motore del sistema Linux. All'avvio del sistema, il kernel è la prima parte del sistema operativo che viene caricata. Esso rileva e inizializza tutti i componenti hardware del computer, successivamnete rende tali periferiche disponibili al software mediante sotto forma di albero di file, trasforma un singola CPU in una macchina multi-tasking capace di far girare molti programmi allo stesso tempo.

The kernel headers

Definiscono l'interfaccia ai servizi che il kernel fornisce. Gli header presenti nella directory di sistema include dovrebbero sempre essere quelli con cui è stato compilato Glibc e perciò non dovrebbero essere sostituiti con l'upgrade del kernel.

System.map

Una lista di indirizzi e simboli. Esso mappa i punti di ingresso e gli indirizzi di tutte le funzioni e le strutture dati nel kernel.