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 -pipeLa compilazione si svolge in più fasi:
aggiornamento dei sorgenti (opzionale)
Vedere la domanda "Come posso aggiornare il sistema?" (Sezione 3.6)
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.
Per compilare il world entriamo in /usr/src e lanciamo
# make buildworldIl tempo di compilazione varia a seconda della frequenza del processore e della quantità di memoria del sistema.
La compilazione del kernel non è diversa da quella del word, in quanto è sufficiente lanciare, sempre da /usr/src
# make buildkernelNon 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.
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 installkernelVerranno 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 .
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
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
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.
Alla fine di tutto, per poter utilizzare il sistema aggiornato riavviamo la macchina con
# rebootOra 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 i386La 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).