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>.