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.
Nota: 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).
Nota: 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
Nota: 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
Nota: 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=
Nota: 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.
Nota: 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 <[email protected]>.
Per domande su questa documentazione, invia una e-mail a <[email protected]>.