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:
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 buildworld
Il 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 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.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 .
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
# 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).