8.3 Compilare ed installare un Kernel Custom

Per prima cosa, facciamo un breve giro nella directory di compilazione del kernel. Tutte le directory menzionate saranno relative alla directory principale /usr/src/sys, che è accessibile attraverso il path /sys. Ci sono un certo numero di sottodirectory qua che rappresentano parti differenti del kernel, ma la più importante per i nostri scopi è arch/conf, dove editerai il tuo file di configurazione del kernel, e compile, che è l'area di passaggio dove il tuo kernel sarè compilato. arch rappresenta uno fra i386, alpha, amd64, ia64, powerpc, sparc64, o pc98 (un tipo di sviluppo alternativo di hardware PC in Giappone). Tutto ciò che è all'interno di particolare directory di architettura ha a che fare solo con quell'architettura; il resto è codice indipendente dalla macchina, comune a tutte le piattaforme sulle quali FreeBSD potrebbe potenzialmente essere portato. Nota l'organizzazione logica della struttura dele directory, con ogni device supportato, file system e opzioni nelle proprie sottodirectory. Versioni di FreeBSD precedenti alla 5.X supportano solo le architetture i386, alpha e pc98.

Questo capitolo assume che tu stia usando la architettura i386 negli esempi. Se questo non è il caso, fai gli appropriati aggiustamenti per correggere i percorsi alla tua architettura.

Nota: Se non c'è una directory /usr/src/sys sul tuo sistema, significa che i sorgenti del kernel non sono stati installati. Il modo più semplice per farlo è eseguire sysinstall (/stand/sysinstall su FreeBSD di versione precedente alla 5.2) come root, scegliendo Configure, poi Distributions, poi src, poi sys. Se hai un'avversione verso sysinstall e hai accesso ad un CDROM “ufficiale” FreeBSD, allora puoi installare i sorgenti dalla linea di comando:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

Quindi, entra nella directory arch/conf e copia il file di configurazione del kernel con il nome che vuoi dare al kernel. Ad esempio:

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

Tradizionalmente, questo nome è tutto in lettere maiuscole e, se stai mantenendo molte macchine FreeBSD con hardware differente, è una buona idea dargli il nome della macchina. Noi lo chiamemeremo MYKERNEL a titolo di esempio.

Suggerimento: Conservare il tuo file di configurazione del kernel direttamente sotto /usr/src può essere una cattiva idea. Se stai incontrando problemi puoi essere tentato di cancellare /usr/src e partire da zero. Dopo averlo fatto, di solito ci vogliono pochi secondi per realizzare che hai appena cancellato il tuo file di configurazione del kernel. Inoltre, non editare GENERIC direttamente, dato che potrebbe essere sovrascritto la prossima volta che aggiorni i tuoi sorgenti, e le tue modifiche andranno perse.

Piuttosto tieni il tuo file di configurazione del kernel da qualche altra parte, e crea un link simbolico al file nella directory i386 .

Ad esempio:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL   
# ln -s /root/kernels/MYKERNEL

Ora edita MYKERNEL con il tuo editor favorito. Se stai partendo da zero, il solo editor disponibile sa` probabilmente vi, che è troppo complesso per essere spiegato in questa sede, ma è trattato estesamente in molti libri nella bibliografia. Comunque, FreeBSD offre un semplice editor chiamato ee che, se sei un principiante, dovrebbe essere il tuo editor favorito. Sentiti libero di cambiare le linee di commento in cima al file di configurazione per riflettere le tue configurazioni o i cambiamenti che hai fatto rispetto a GENERIC.

Se hai compilato un kernel sotto SunOS™ o qualche altro sistema BSD, gran parte di questo file ti sarà noto. Se stai arrivando da qualche altro sistema operativo tipo DOS, d'altro canto, il file di configurazione GENERIC ti potrebbe sembrare troppo complesso, così è meglio che segui le descrizioni della sezione File di Configurazione attentamente.

Nota: Se tu sincronizzi il tuo albero dei sorgenti con i più recenti sorgenti del progetto FreeBSD, accertati sempre di controllare il file /usr/src/UPDATING prima di eseguire una qualsiasi operazione di aggiornamento. /usr/src/UPDATING viene aggiornato con ogni versione dei sorgenti di FreeBSD, e quindi è più aggiornato di questo manuale.

A questo punto devi compilare i sorgenti del kernel. Ci sono due procedure per farlo, e quella che devi usare dipende dal motivo per cui stai ricompilando il kernel e dalla versione di FreeBSD che stai usando.

Se non hai aggiornato i tuoi sorgenti dall'ultima volta che hai completato con successo un ciclo buildworld-installworld (non hai eseguito CVSup, CTM o usato anoncvs), allora è sicuro usare la sequenza config, make depend, make, make install.

Procedura 1. Compilare il Kernel nel Modo “Tradizionale”

  1. Esegui config(8) per generare il nuovo sorgente del kernel.

    # /usr/sbin/config MYKERNEL
    
  2. Vai nella directory di compilazione. config(8) scriverà il nome di questa directory dopo essere stato eseguito come sopra.

    # cd ../compile/MYKERNEL
    

    Per versioni di FreeBSD precedenti all 5.X, segui queste istruzioni:

    # cd ../../compile/MYKERNEL
    
  3. Compila il kernel.

    # make depend
    # make
    
  4. Installa il nuovo kernel.

    # make install
    

Procedura 2. Compilatre il Kernel nel “Nuovo” Modo

  1. Entra nella directory /usr/src.

    # cd /usr/src
    
  2. Compila il kernel.

    # make buildkernel KERNCONF=MYKERNEL
    
  3. Installa il nuovo kernel.

    # make installkernel KERNCONF=MYKERNEL
    

Nota: In FreeBSD 4.2 e precedente, devi sostituire KERNCONF= con KERNEL=. 4.2-STABLE scaricato prima del 2 Febbraio 2001 non riconosce KERNCONF=.

Il nuovo kernel sarà copiato nella directory /boot/kernel come /boot/kernel/kernel e il kernel precedente sarà copiato in /boot/kernel.old/kernel. Ora, riavvia il sistema e riparti per usare il tuo nuovo kernel. Se qualcosa va storto, ci sono alcune istruzioni di troubleshooting alla fine del capitolo che puoi trovare utili. Accertati di leggere la sezione in cui si spiega cosa fare in caso il tuo nuovo kernel non faccia il boot.

Nota: In FreeBSD 4.X e precedenti, i kernel sono installati in /kernel, i moduli in /modules e si tiene il backup dei vecchi kernel in /kernel.old. Altri file relativi al processo di boot, come il boot loader(8) e la configurazione sono conservati in /boot. Moduli di terze parti o custom possono essere piazzati in /modules , anche se gli utenti dovrebbero avere conoscenza del fatto che tenere i moduli sincronizzati col kernel compilato è molto importante. I moduli non creati per interagire col kernel compilato possono risultare in instabilità o comportamenti anomali.

Nota: Se hai aggiunto un qualsiasi device (come una sound card) e stai usando FreeBSD 4.X o versioni precedenti, può darsi che tu debba aggiungere qualche nodo di device alla tua directory /dev prima che tu la possa usare. Per maggiori informazioni, dai un'occhiata alla sezione Crea Nodi di Device più avanti in questo capitolo.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.