martedì, Marzo 19, 2024

Aggiornare completamente FreeBSD tramite cvsup

FreeBSD e CVSUPQuesto documento proviene da , sito da tempo dismesso. La sua documentazione è qui pubblicata in modo tale che non vada persa e che possa quindi continuare a essere utile come lo era un tempo su FreeBDI.org.

Aggiornare FreeBSD è una cosa molto importante, da fare appena si può, anche subito dopo aver installato da CD-ROM o FTP o NFS che sia. In casa FreeBSD vengono di continuo rilasciati nuovi aggiornamenti dagli sviluppatori, seguendo così il ramo “STABLE” e “CURRENT“; quindi un cvsup mensile è vivamente consigliato a tutti. Serve NON solo ad aggiornare il kernel come su altri unix-like, ma si aggiorna TUTTO il sistema. Si scaricano in pratica i sorgenti di TUTTO cioò che concerne il sistema “base” e li si compila e, cosa molto importante, anche l’albero dei ports, che comunque può seguire uno sviluppo indipendente dal sistema.

Dopo questa breve premessa teorica vediamo come realizzare in pratica l’aggiornamento del nostro sistema in particolare come aggiornare FreeBSD 4.x ad una versione successiva 4.y-STABLE tramite cvsup.

Requisiti minimi

  1. Albero completo dei sorgenti installato (con tutte le varie dir). (distribuzioni DEVELOPER o X-DEVELOPER al momento dell’installazione)
  2. Albero dei ports presente (opzionale ma fortemente consigliato). (rispondere “sì” alla domanda di installazione dei ports durante l’installazione)
  3. Cvsup (al momento in cui scrivo è la vers. cvsup-16.1f ) installato nel sistema.

Per installare al solito:

#cd /usr/ports/net/cvsup && make install clean

N.B. Se non avete installato i file del punto 1) e 2) al primo aggiornamento che fate, scaricherete tutto l’albero dei sorgenti e non solo le diff, quindi occhio per chi usa modem analogici a bassa velocità ed occhio anche alla bolletta del telefono.

Setup di base

1) Verificare che il cvsup sia installato nel sistema:

pkg_info -Ia | grep -i cvsup

che dovrebbe restituire un output più o meno simile a questo:

cvsup-16.1d A general network file distribution system optimized for CV

2) Creare una directory, es. /usr/sup

mkdir /usr/sup

3) Creare i file di configurazione del cvsup dentro questa directory:

3a) cvsup.stable per i sorgenti dell’intero OS

3b) cvsup.ports per aggiornare l’abero dei ports

3c) refuse per rifiutare quello che non si desidera.

---> cvsup.stable <---

## Defaults that apply to all the collections
*default host=cvsup10.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
*default umask=0022
## If your network link is a T1 or faster, comment out the following line.
*default compress
## Main Source Tree.
src-all

---> end <---
---> cvsup.ports <---

## Defaults that apply to all the collections
*default host=cvsup10.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default umask=0022
## If your network link is a T1 or faster, comment out the following line.
*default compress
## Ports Collection.
ports-all
---> end <----
---> refuse <---

doc/de*
doc/ru*
doc/fr*
doc/ja*
doc/zh*
doc/es*
ports/chinese/*
ports/french/*
ports/german/*
ports/japanese/*
ports/korean/*
ports/russian/*
ports/vietnamese/*
ports/ukrainian/*
---> end <----

N.B. Potete anche eliminare queste categorie di ports dal vostro HD (per risparmiare spazio) se prevedete di non utilizzarli mai.

cd /usr/ports
rm -r chinese french german ... etc etc

N.B. I file *-supfile li trovate anche nel vostro HD (se avete installato cvsup) :-)
Infatti il comando:

locate ports-supfile

restituisce questi file (sono i file di esempio, dategli un occhio):

/usr/share/examples/cvsup/ports-supfile
/usr/src/share/examples/cvsup/ports-supfile
/usr/sup/ports-supfile

ALTRI “TAG” per rami diversi da “STABLE”:

Per aggiornare ad una “RELEASE” (ad es. la attuale 4.6.2) il tag che per la stable era RELENG_4 diventa:

tag=RELENG_4_6

Per la “CURRENT” invece è un semplice punto (.):

tag=.

Breve spiegazione:
Come sappiamo infatti esistono altri 2 rami di sviluppo per FreeBSD: “RELEASE” e “CURRENT“.
In pratica, da quel che ho potuto intendere, il ramo “STABLE” è quello in perenne sviluppo, in cui vengono inclusi sempre nuovi aggiornamenti e nuovi drivers, etc. Di tanto in tanto, a seconda delle scadenze e dagli obiettivi prefissati, la “STABLE” viene congelata (freeze) e rilasciata così la “RELEASE” con tanto di “immagine iso” sui mirrors ufficiali (e non). Abbiamo così il nostro bel CD-ROM da cui iniziare una installazione (attualmente, nel momento in cui scrivo, siamo alla 4.6.2).

La “CURRENT” (Attualmente 5.0-DP2) è il ramo di “sviluppo”, in fase di testing, in cui vengono sperimentate ed incluse le nuove features. Alcune novità che raggiungono un livello ottimale di stabilità vengono incluse quindi anche in “STABLE”, indi automaticamente, prima o poi, anche nella “RELEASE” successiva.

A volte, in certi periodi, la “current” è pressochè inutilizzabile: frequenti crash, incongruenze, problemi complessi: assolutamente NON utilizzabile per sistemi di produzione. Attualmente è stata però rilasciata l’immagine ISO della 5.0-DP1 (Developer Preview), scaricabile dai soliti mirrors FTP, segno che la 5.0-RELEASE non è lontana: infatti la DP-1 (ora DP-2 ma senza immagine ISO) si riesce ad usare discretamente bene.

NOTA: Se si vuole intraprendere “l’avventura” della “CURRENT” è d’obbligo iscriversi alle mailing list ufficiali (in inglese) quali:

4) Creare o aggiornare il file /etc/make.conf con le seguenti linee.

---> aggiungere a /etc/make.conf <----

NOPROFILE=true

USA_RESIDENT=NO

SUP_UPDATE= yes
SUP= /usr/local/bin/cvsup
SUPFLAGS= -g -L 2
SUPFILE= /usr/sup/cvsup.stable
PORTSSUPFILE= /usr/sup/cvsup.ports
SUPHOST= cvsup10.freebsd.org

#scommentate questa riga se usate XFree86-4 (ossia la vers, superiore alla 3.3.6 di default)
#XFREE86_VERSION=4

KERNCONF= MY_PANDORA

---> end <----

N.B. SUPHOST in questo esempio (come nei file di configurazione è stato posto uguale a “cvsup10.freebsd.org”.
Questo però può essere cambiato se si desidera usare un host più vicino e/o meno carico per la nostra connessione.

Ad esempio: cvsup.de.freebsd.org ; cvsup.fr.freebsd.org ; cvsup2.freebsd.org ….. cvsup9.freebsd.org ecc.

Aggiornamento

5) Cominciare l’aggiornamento del sistema.

cd /usr/src
make update

make update fa partire il cvsup, con i parametri trovati nel file /etc/make.conf.

N.B. Dopo che “make update” ha finito di scaricare, il modem si potrebbe spegnere (con benefici per la bolletta per chi non avesse linee ADSL o altro). Se non funzionasse, perchè magari la versione di FreeBSD è troppo vecchia e questo nuovo modo di aggiornare non era ancora operativo, usare il vecchio sistema:

cvsup -g /usr/sup/ports-file (per aggiornare i ports)
cvsup -g /usr/sup/stable-file (per aggiornare i sorgenti)

Compilazione

6) Creazione kernel
Prima di tutto prepariamo il file del kernel (che ci servirà poi):

cd /usr/src/sys/i386/conf
cp GENERIC MY_PANDORA
vi MY_PANDORA

Modificate a piacere, salvate ed uscite.

N.B.In questo esempio il mio kernel si chiama MY_PANDORA (che per ragioni puramente storiche si preferisce salvare con un nome tutto maiuscolo).
Se volete chiamarlo in un altro modo dovete modificare anche la parte relativa al kernel nel file /etc/make.conf, nonchè la sezione interna al file di conf stesso come spiegato nell’articolo relativo alla compilazione del kernel di cui sopra.

N.B. 2 Se non si è pratici dell’editor vi, potete usare come sostituto ee (oppure aee, evoluzione di ee, presente nei ports).

Compilazione

7a) “Precedente” e (teoricamente sempre) funzionante ma “sconsigliato” modo di compilare:

cd /usr/src
make world
make kernel
mergemaster
shutdown -r now

7b) “Nuovo” modo (vivamente consigliato) di compilare il sistema: precisato anche nel “Makefile” che trovate nella vostra /usr/src dopo il “make update”. Trovate questo metodo descritto anche all’interno del file /usr/src/Makefile.

#cd /usr/src
#make buildworld
#make buildkernel KERNCONF=MY_PANDORA
#make installkernel KERNCONF=MY_PANDORA
#shutdown -r now (in “single user” mode fate boot -s al prompt del boot)
#mergemaster -p
#make installworld
#mergemaster -cvsi
#shutdown -r now

  • make buildworld: ricompila l’intero sistema.
  • make installworld: installa l’intero sistema compilato con make buildworld.
  • make buildkernel

    : compila il kernel generato dal file di config MY_PANDORA.

  • make installkernel

    : installa il kernel compilato con make buildkernel. In pratica, grazie all’esistenza della riga “KERNCONF=MY_PANDORA” nel file /etc/make.conf, il semplice comando make kernel sarebbe la somma di: make buildkernel KERNCONF=MY_PANDORA && make installkernel KERNCONF=MY_PANDORA.

  • mergemaster: aggiorna i file di config, praticamente tutti quelli che sono stati modificati dalla casa nella dir /etc, e talvolta anche il file MAKEDEV e relativa ri-configurazione nella dir /dev (aggiornate tutto escluso quello che avete di personalizzato, tipo /etc/master.passwd, /etc/group, named.conf, ppp.conf etc etc, e fate ricompilare a MAKEDEV i device nella dir /dev)
  • shutdown -r now: riavvia il sistema immediatamente.

Il sistema dopo il secondo mergemaster (quello ufficiale) dovrebbe essere finalmente aggiornato. Verificatelo con il comando:

uname -a

FreeBSD k6.droidez.org 4.7-STABLE FreeBSD 4.7-STABLE #2: Fri Oct 11 02:58:21
CEST 2002 [email protected]:/usr/obj/usr/src/sys/MY_PANDORA i386

In pratica, a causa di errori che si son verificati in aggiornamenti precedenti, dove andava a buon fine il make world ma NON il make kernel (non mi dilungo a spiegare il perchè), ci si trovava con un sistema pressochè inutilizzabile: ossia con i sorgenti aggiornati, ma il kernel vecchio, impossibile da compilare. Con questo ordine di compilazione si rimedia a questa cosa elegantemente, senza il pericolo di incappare in quell’errore di cui sopra.

Nota: Il “single user” si può omettere: non è un errore farlo e il sistema si compila in modo identico: usare il “single user” dopo il primo reboot è una sicurezza in più, soprattutto per sistemi di produzione e/o lenti.

Aggiunta

C’è da fare una precisazione per il discorso “DOCUMENTI”. Il metodo sopra descritto va benissimo, ma, se vogliamo “cvsuppare” (nuovo verbo = cvsuppare) anche l’albero dei docs, cioè aventuali modifiche nell’handbook, negli altri books e paper in /usr/share/doc ecc, dobbiamo creare un altro file in /usr/sup e fare una piccola aggiunta nel /etc/make.conf. Il mio consiglio è di farlo (i documenti sono preziosissimi), tanto più che ora dovrebbe essere stata appena aggiunta la dir /usr/doc/it_IT.ISO8859-1 in previsione di una futura traduzione della documentazione in italiano.

Creiamo allora anche il file cvsup.docs e mettiamolo anch’esso in /usr/sup:

---> cvsup.docs <---

# $FreeBSD: src/share/examples/cvsup/doc-supfile,v 1.3.2.2 2002/01/05 16:08:29 phantom Exp $

*default host=cvsup10.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
doc-all

---> end <----

Aggiungiamo a /etc/make.conf la riga:

DOCSUPFILE= /usr/sup/cvsup.docs

…e siamo pronti a scaricare il mondo!

Ancora una precisazione:
I ports sono INDIPENDENTI dai src del sistema, così come i docs lo sono sia dai ports che dai src. Quindi se volessimo aggiornare SOLO l’albero dei ports mantenendo la nostra versione attuale (uname -a) intatta, non dovremo far altro che rinominare /usr/sup/cvsup.stable in /usr/sup/cvsup.stable.OLD (ad esempio), con il comando:

mv /usr/sup/cvsup.stable /usr/sup/cvsup.stable.OLD

commentare con un # quindi la riga in /etc/make.conf relativa al “PORTSSUPFILE”:

1. PORTSSUPFILE= /usr/sup/cvsup.ports

e partire a fare SOLO il download dei nuovi ports e dei docs con il solo comando:

cd /usr/src && make update

(quindi niente make world, make kernel, mergemaster e relativo shutdown -r now). Se invece volessimo SOLAMENTE aggiornare l’albero dei ports e NON i docs e i src possiamo anche più semplicemente e senza toccare alcun files dare il comando:

cd /usr/ports && make update

Questa volta infatti siam partiti dalla directory /usr/ports, anzichè da /usr/src a lanciare il make update! Chiaro e semplice, vero?

Ultime considerazioni

a) L’aggiornamento può essere fatto anche se il sistema non è in single-user mode. Io ho fatto decine di make world anche su macchine di produzione mentre stavano lavorando, senza riscontrare nessun malfunzionamento . Se però preferite essere sicuri e/o state operando in un ambiente critico di produzione potete entrare in single-user mode e poi iniziare la sequenza al punto 7 (dopo aver dato un mount /).

b) Per velocizzare il processo i dischi devono essere montati con il softupdate attivo e l’opzione noatime.

Per verificare questo:

# mount
/dev/ad4s1a on / (ufs, local, noatime, soft-updates)
/dev/ad5s1e on /usr/local/gm (ufs, local, noatime, soft-updates)
procfs on /proc (procfs, local)

L’opzione noatime si attiva nel file /etc/fstab. Esempio:

/dev/ad4s1a / ufs rw,noatime 1 1

Il softupdates si attiva o al momento dell’installazione (solo da FreeBSD 4.3-RELEASE in poi) usando il tasto S nel menu disklabel o con il comando tunefs -n enable /dev/partizione_da_abilitare.

P.S. Il tempo di download sorgenti e di compilazione totale varia da macchina a macchina: può essere di una giornata circa su un vecchio 486 ad 1 ora circa su un pentium3 piuttosto veloce. Sulla mia (modesta) machina con cpu AMD-K6 da 450 mhz + 256 Mb di ram, ci impiego circa 1.5 ore, al max 2.

Buon cvsup! Andrea (droid)
Documento tratto (e leggermente modificato ed integrato da me) da Gianmarco Giovannelli – Gufi.

Articoli correlati

Il caso “Medusa Ransomware”

I ransomware stanno diventando sempre più una minaccia di rilevanza importante, quasi da non far dormire sonni tranquilli ad aziende sia pubbliche che private,...

Digital Transformation


 

Noleggia una Tesla per il tuo evento ICT!

Categorie