Portsnap è un sistema per distribuire in modo sicuro l'albero dei port di FreeBSD. Circa ogni ora, viene generata una «snapshot» dell'albero dei port, che viene impacchettata e firmata criptograficamente. I file risultanti sono quindi distribuiti via HTTP.
Come CVSup, Portsnap usa un modello di aggiornamento a rchiesta: gli alberi dei port impacchettati e firmati sono messi sul server web che attende in modo passivo le richieste dei client. Gli utenti devono eseguire portsnap(8) manualmente o schedulare il job con cron(8) per scaricare periodicamente gli aggiornamenti in modo automatico.
Per ragioni tecniche, Portsnap
non aggiorna direttamente il «reale» albero
dei port in /usr/ports/
; invece, lavora
con una copia compressa dell'albero dei port memorizzata
di default in /var/db/portsnap/
. Questa
copia compressa viene quindi usata per aggiornare
l'albero dei port effettivo.
Se Portsnap è
installato dalla collezione dei port di FreeBSD, la locazione
di default per la sua snapshot compressa è
/usr/local/portsnap/
invece di /var/db/portsnap/
.
Su FreeBSD 6.0 e versioni più recenti, Portsnap è contenuto nel sistema base. Su versioni di FreeBSD più datate, può essere installato usando il port sysutils/portsnap.
Il funzionamento di Portsnap
è controllato dal file di configurazione
/etc/portsnap.conf
. Per la
maggior parte degli utenti, la configurazione di default
sarà sufficiente; per maggiori dettagli, consultare
la pagina man portsnap.conf(5).
Se Portsnap è
installato dalla collezione dei port di FreeBSD,
userà il file di configurazione posto in
/usr/local/etc/portsnap.conf
invece
di /etc/portsnap.conf
.
Questo file di configurazione non viene creato quando
viene installato il port, ma viene dato un file
di configurazione di base; per copiarlo nella giusta
posizione, esegui il comando seguente:
#
cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf
La prima volta che portsnap(8)
viene eseguito,
ha bisogno di scaricare una snapshot compressa
dell'intero albero dei port in
/var/db/portsnap/
(o
/usr/local/portsnap/
se
Portsnap è stato
installato dalla collezione dei port).
Dall'inizio del 2006 la sua dimensione
è di circa 41 MB.
#
portsnap fetch
Una volta che la snapshot compressa è stata
scaricata, una copia dell'albero dei port può
estratta in /usr/ports/
.
Questo è necessario perfino se l'albero dei port
è già stato creato in quella directory
(es., usando CVSup), poichè
stabilisce un punto di inizio dal qualche
portsnap
può
determinare quale parte dell'albero dei port necessita
di essere aggiornata.
#
portsnap extract
Nell'installazione di default la directory
/usr/ports
non viene creata. Se usi FreeBSD 6.0-RELEASE,
la directory dovrebbe essere creata prima di
usare portsnap
. Su versioni
di FreeBSD e Portsnap più recenti
questa operazione viene fatta in automatico al primo
utilizzo del comando portsnap
.
Dopo che una prima snapshot compressa
dell'albero dei port è stata scaricata
ed estratta in /usr/ports/
,
l'aggiornamento dell'albero dei port consiste
in due passi: scaricando gli
aggiornamenti della snapshot compressa, e usare questi
per aggiornare l'albero
dei port effettivo. Questi due passi possono
essere specificati a
portsnap
con un
comando singolo.
#
portsnap fetch update
Alcune versioni vecchie di portsnap
non supportano questa sintassi; se fallisce, prova
in questo modo:
#
portsnap fetch
#
portsnap update
Al fine di evitare problemi di
«affollamenti istantanei»
accedendo ai server di Portsnap,
portsnap fetch
non funziona
da un job cron(8). Esiste invece
un comando apposito portsnap cron
,
che attende una durata random fino a 3600 secondi prima
di scaricare gli aggiornamenti.
Inoltre, è fortemente racomandato che
portsnap update
non sia eseguito
da un job cron
, poichè
è soggetto a causare problemi se viene avviato
allo stesso tempo di compilazione o installazione di
un port. Ad ogni modo, è possibile aggiornare
i file INDEX
dei port, e può
essere fatto passando il flag -I
a
portsnap
. (Ovviamente, se
portsnap -I update
viene eseguito da
cron
, sarà necessario eseguire
successivamnte portsnap update
senza
la flag -I
al fine di aggiornare
il resto dell'albero.)
Aggiungendo la riga seguente in /etc/crontab
,
portsnap
aggiornerà
la snapshot compressa e i file INDEX
in
/usr/ports/
, e manderà una email
se qualche port installato non è
aggiornato:
0 3 * * * root portsnap -I cron update && pkg_version -vIL=
Se l'ora di sistema non è settata all'ora locale,
sostituisci 3
con un valore random
tra 0 e 23, al fine di disporre il carico sui server
Portsnap in modo uniforme.
Alcune versioni datate di portsnap
non supportano l'elenco di comandi multipli
(es., cron update
)
nella stessa invocazione di portsnap
.
Se la riga di comando
precedente fallisce, prova a sostituire
portsnap -I cron update
con
portsnap cron && portsnap -I update
.
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>.