3.7. Come ricompilo il sistema?

Capita spesso di voler ricompilare il sistema base e il kernel e i motivi sono i più disparati: si passa dal volerli semplicemente aggiornare per motivi di sicurezza o per poter usufruire delle ultime versioni di alcuni driver fino al voler semplicemente ricompilare perché si è aggiunta un'opzione nel kernel e vogliamo verificarne il funzionamento.

La prima cosa da fare è impostare le opzioni per del compilatore così da ottenere un sistema ottimizzato per le caratteristiche della nostra macchina; editiamo /etc/make.conf (le seguenti righe vanno aggiunte a quelle eventualmente già presenti):

CFLAGS= -O2 -pipe
#CXXFLAGS+= -fmemoize-lookups -fsave-memoized <= temporaneamente non supportata
COPTFLAGS= -O2 -pipe
     
La compilazione si svolge in più fasi:
  1. aggiornamento dei sorgenti (opzionale)

  2. lettura del file UPDATING

  3. compilazione del world

  4. compilazione del kernel

  5. installazione del kernel

  6. reboot in single-user mode

  7. installazione del world

  8. aggiornamento dei file di configurazione

  9. riavvio del sistema

Cominciamo a vederli uno per uno.
  1. Vedere la domanda "Come posso aggiornare il sistema?" (Sezione 3.6)

  2. Importante è anche la lettura del file /usr/src/UPDATING che contiene alcune informazione riguardo gli aggiornamenti dell'albero dei sorgenti di FreeBSD e contiene indicazioni quali la necessità di aggiungere utenti, gruppi o altre opzioni per avere un sistema funzionante.

  3. Per compilare il world entriamo in /usr/src e lanciamo

    # make buildworld
               
    
    Il tempo di compilazione varia a seconda della frequenza del processore e della quantità di memoria del sistema.

  4. La compilazione del kernel non è diversa da quella del word, in quanto è sufficiente lanciare, sempre da /usr/src

    # make buildkernel
               
    
    Non viene qui trattata la configurazione del kernel, perché un argomento che dipende molto dalle esigenze personali di ognuno. Si veda il capitolo Configuring the FreeBSD Kernel dell'handbook per maggiori informazioni.

  5. Dopo aver effettuato la compilazione del world e del kernel si passa alla fase di installazione, che avviene in ordine contrario rispetto alla compilazione:

    # make installkernel
               
    
    Verranno così installati il file del nuovo kernel ovvero /boot/kernel/kernel, i nuovi moduli sotto /boot/kernel/, inoltre il vecchio kernel sarà rinominato in boot/kernel.old/kernel .

    AvvertimentoNelle versioni precedenti alla 5.0-RELEASE, il kernel è /kernel, i moduli si trovano in /modules e il kernel precedente è /kernel.OLD .

  6. Prima di installare il world è necessario passare in single-user mode, ovvero in modalità utente singolo, con i soli servizi di base attivi e la possibilità per il solo utente root di usare il sistema. Per passare in single user mode, occorre eseguire il comando

    # shutdown now
               
    


  7. Naturalmente avere un kernel aggiornato non è sufficiente e anzi la discrasia tra kernel e world porta spesso gravi problemi. Per installare il sistema base:

    # make installworld 
               
    


  8. Il processo di sviluppo di FreeBSD coinvolge anche i file di configurazione, aggiungendo o togliendo opzioni, utenti, gruppi. È importante, per avere un sistema aggiornato in maniera corretta, che anche questi file vengano installati; tuttavia molti di questi sono oggetto di modifiche e personalizzazioni da parte di ognuno per ottimizzare il sistema ed è quindi necessario prestare molta attenzione nella scelta dei file da aggiornare. Fortunatamente FreeBSD mette a disposizione mergemaster(8), uno script di shell che, utilizzando /usr/src/etc/Makefile crea un ambiente temporaneo e lo riempe dei nuovi file di configurazione; fatto ciò li confronta uno ad uno con quelli installati nel nostro sistema e ci chiede se vogliamo installare il nuovo file, lasciare intoccato quello installato oppure effettuare un merge dei due file, ovvero una loro fusione. Lanciamo quindi:

    # mergemaster -cvs 
               
    
    (mergemaster(8) ha moltissime opzioni, la man page è il luogo dove trovare la spiegazione di ognuna). Ora avremo lo schermo diviso in due parti uguali orizzontalmente: in alto troveremo il contenuto del file attuale, in basso quello del nuovo file di configurazione. Ecco quindi che avremo la possibilità di scegliere cosa fare del nuovo file:
    Use 'd' to delete the temporary ./etc/mail/mailer.conf
    Use 'i' to install the temporary ./etc/mail/mailer.conf
    Use 'm' to merge the temporary and installed versions
    Use 'v' to view the diff results again
               
    
    È chiaro a cosa corrisponde ogni opzione. Una sola nota sull'opzione m: se scegliamo questa possibilità, lo schermo si dividerà verticalmente e a sinistra troveremo il file attuale, a destra il nuovo e per ogni differenza tra i due potremo scegliere se tenere la vecchia o la nuova riga corrispondente, selezionando tramite la pressione di r per la parte destra (quella nuova) e l per la parte sinistra, ovvero quella attualmente installata, per finire e installare il file così fatto, premiamo i. La procedura di confronto si ripete per ogni file del sistema che abbiamo cambiato o è stato modificato nella versione CVS e potrebbe durare un po' di tempo, anche perché è necessario prestare molta attenzione: un errore in questa fase potrebbe portare alcuni problemi.

  9. Alla fine di tutto, per poter utilizzare il sistema aggiornato riavviamo la macchina con

    # reboot
               
    
    Ora il nostro sistema è aggiornato e lo si può verificare dall risultato di
    # uname -a
    FreeBSD pdp.paperopoli 4.8-STABLE FreeBSD 4.8-STABLE #4: Wed Jul
    23 09:32:03 CEST 2003 root@pdp.paperopoli:/usr/obj/usr/src/sys/DEPOSITO  i386 
               
    
    La risposta a eventuali problemi si trova alla domanda "Ho ricompilato il sistema ma al riavvio ci sono dei problemi. Cosa posso fare?" (Sezione 3.8).