4.5 Utilizzo della Collezione dei Port

Le sezioni seguenti forniscono le istruzioni basilari sull'uso della collezione dei port per installare e rimuovere programmi dal tuo sistema.

4.5.1 Ottenimento della Collezione dei Port

Prima che tu possa installare i port, devi procurarti la collezione dei port--che essenzialmente è un set di Makefiles, patch, e file di descrizione collocati in /usr/ports.

Durante l'installazione del tuo sistema FreeBSD, sysinstall ti ha chiesto se volevi installare la collezione dei port. Se hai rifiutato, puoi seguire queste istruzioni per ottenerla:

Il Metodo Sysinstall

Questo metodo richiede ancora l'uso di sysinstall per installare manualmente la collezione dei port.

  1. Esegui da root /stand/sysinstall come mostrato qui sotto:

    # /stand/sysinstall
    
  2. Scorri verso il basso e seleziona Configure, premi Invio.

  3. Scorri verso il basso e seleziona Distributions, premi Invio.

  4. Scorri verso il basso fino a ports, premi Spazio.

  5. Scorri verso l'alto fino a Exit, premi Invio.

  6. Seleziona il modo di installazione desiderato, come CDROM, FTP, e così via.

  7. Scorri verso l'alto fino a Exit e premi Invio.

  8. Premi X per uscire da sysinstall.

Un altro metodo per ottenere la tua collezione dei port e per mantenerla aggiornata consiste nell'utilizzo di CVSup. Dai un'occhiata al file di CVSup riguardante i port, /usr/share/examples/cvsup/ports-supfile. Guarda Usare CVSup (Sezione A.5) per maggiori informazioni sull'uso di CVSup e del file menzionato.

Il Metodo CVSup

Questo è un rapido metodo che utilizza CVSup per ottenere la collezione dei port. Se vuoi mantenere il tuo albero dei port aggiornato, o imparare di più su CVSup, leggi la sezione menzionata in precedenza.

  1. Installa il port net/cvsup. Guarda Installazione di CVSup (Sezione A.5.2) per maggiori dettagli.

  2. Da root, copia il file /usr/share/examples/cvsup/ports-supfile in un nuovo posto, come in /root o nella tua directory home.

  3. Edita ports-supfile.

  4. Cambia CHANGE_THIS.FreeBSD.org in un server CVSup vicino a te. Guarda Mirror CVSup (Sezione A.5.7) per una lista completa dei siti mirror.

  5. Esegui cvsup:

    # cvsup -g -L 2 /root/ports-supfile
    
  6. Poco dopo aver eseguito questo comando verranno scaricate e applicate alla tua collezione dei port tutte le modifiche recenti, anche se di fatto i port già compilati sul tuo sistema non verranno aggiornati.

4.5.2 Installazione dei Port

La prima cosa che dovrebbe essere chiara quando si ha a che fare con la collezione dei port è l'effettivo significato di “scheletro” di un port. Brevemente, lo scheletro di un port è un insieme minimo di file che dice al tuo sistema FreeBSD come compilare ed installare un programma in modo pulito. Ogni scheletro di un port include:

Alcuni port hanno altri file, come pkg-message. Il sistema dei port li usa per affrontare speciali situazioni. Se vuoi maggiori dettagli su questi file, e sui port in generale, leggi attentamente il Manuale del Porter di FreeBSD.

Il port include istruzioni su come compilare il codice sorgente, ma non include il codice sorgente stesso. Devi prendere il codice sorgente da un CDROM o da Internet. L'autore del codice sorgente può distribuirlo come desidera. Quasi sempre è un file di archivio tar compresso con gzip, ma potrebbe essere stato compresso con un altro tool o perfino potrebbe essere non compresso. Il codice sorgente del programma, in qualsiasi forma sia, è chiamato con il termine “distfile”. I due metodi per installare un port di FreeBSD sono descritti qui sotto.

Nota: Devi essere root per installare i port.

Avvertimento: Prima di installare qualche port, dovresti assicurarti di avere l'albero della collezione dei port aggiornato e dovresti verificare http://vuxml.freebsd.org/ per eventuali problemi di sicurezza relativi alla tua applicazione.

Una verifica delle vulnerabilità di sicurezza può essere fatta in modo automatico con portaudit prima dell'installazione di nuove aplicazioni. Questo strumento può essere trovato nella collezione dei port (security/portaudit). Esegui portaudit -F prima di installare un nuovo port, per aggiornare la base di dati delle vulnerabilità. Durante la verifica giornaliera del sistema verrà fatto un controllo di integrità e un aggiornamento della base di dati delle vulnerabilità. Per maggiori informazioni leggi le pagine man portaudit(1) e periodic(8).

4.5.2.1 Installazione dei Port dal CDROM

Le immagini ufficiali su CDROM del progetto FreeBSD non includono più i distfile. Occupano molto spazio che è meglio utilizzato per i package precompilati. I prodotti su CDROM come il FreeBSD PowerPak includono i distfile, e puoi ordinare questi set da un venditore come FreeBSD Mall. Questa sezione presuppone che tu abbia un simile set di CDROM di FreeBSD.

Metti il tuo CDROM di FreeBSD nell'apposito lettore. Montalo su /cdrom. (Se usi un punto di mount differente, l'installazione non funzionerà.) Per prima cosa, vai nella directory del port che vuoi installare:

# cd /usr/ports/sysutils/lsof

Una volta dentro la directory lsof, vedrai lo scheletro del port. Il prossimo passo riguarda la compilazione, o “costruzione”, del port. Questo viene fatto semplicemente digitando make al prompt. Una volta che hai fatto questo, dovresti vedere qualcosa simile a quanto segue:

# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===>  Extracting for lsof-4.57
...
[l'output dell'estrazione è stato tagliato]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[l'output della configurazione è stato tagliato]
...
===>  Building for lsof-4.57
...
[l'output della compilazione è stato tagliato]
...
#

Nota che una volta terminata la compilazione ritornerai al tuo prompt. Il prossimo passo riguarda l'installazione del port. Per installarlo, devi semplicemente affiancare una parola al comando make, e questa parola è install:

# make install
===>  Installing for lsof-4.57
...
[l'output dell'installazione è stato tagliato]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      I binari di questo port richiedono l'esecuzione con alti privilegi.
#

Quando ritornerai al tuo prompt, dovresti essere in grado di eseguire l'applicazione che hai appena installato. Siccome lsof è un programma che lavora con alti privilegi, viene mostrato un avvertimento di sicurezza. Durante la compilazione e l'installazione dei port, dovresti fare attenzione ad ogni avvertimento che appare.

Nota: Potresti anche evitare un passaggio lanciando solamente make install invece dei due passi separati make e make install.

Nota: Alcune shell mantengono una cache dei comandi che sono disponibili nelle directory elencate nella variabile d'ambiente PATH, per velocizzare le operazioni di ricerca dei file eseguibili di questi comandi. Se stai usando una di queste shell, potresti dover usare il comando rehash dopo l'installazione di un port, prima di poter usare il nuovo comando. Questo succede sia per le shell che fanno parte del sistema base (come tcsh) sia per le shell che sono disponibili dai port (per esempio, shells/zsh).

Nota: Per cortesia sii consapevole che le licenze di alcuni port non permettono l'inclusione degli stessi sul CDROM. Questa limitazione potrebbe essere dovuta dalla necessità di compilare un form di registrazione prima di scaricare il software, o perché la ridistribuzione non è permessa, o per altre ragioni. Se desideri installare un port non incluso nel CDROM, dovrai essere collegato ad Internet per farlo (vedi la prossima sezione).

4.5.2.2 Installazione dei Port da Internet

Questa sezione presuppone che tu abbia una connessione ad Internet funzionante. Se non ce l'hai, dovrai utilizzare l'installazione da CDROM, oppure dovrai copiare manualmente il distfile in /usr/ports/distfiles.

L'installazione di un port da Internet viene fatta nello stesso modo con cui viene fatta l'installazione da CDROM. L'unica differenza tra i due modi è che il distfile del port viene preso da Internet invece che dal CDROM.

I passi richiesti sono gli stessi:

# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===>  Extracting for lsof-4.57
...
[l'output dell'estrazione è stato tagliato]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[l'output della configurazione è stato tagliato]
...
===>  Building for lsof-4.57
...
[l'output della compilazione è stato tagliato]
...
===>  Installing for lsof-4.57
...
[l'output dell'installazione è stato tagliato]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      I binari di questo port richiedono l'esecuzione con alti privilegi.
#

Come puoi vedere, la sola differenza sta nella riga che dice da dove il sistema sta ottenendo il distfile del port.

Il sistema dei port usa fetch(1) per scaricare i file, il quale rispetta varie variabili d'ambiente, incluse FTP_PASSIVE_MODE, FTP_PROXY, e FTP_PASSWORD. Puoi aver bisogno di settarne qualcuna se sei dietro a un firewall, o se usi un proxy FTP/HTTP. Guarda fetch(3) per la lista completa.

Gli utenti che non possono essere sempre connessi ad Internet possono usare l'opzione make fetch. Esegui tale comando in cima alla directory (/usr/ports) e i file richiesti saranno scaricati. Questo comando funziona anche nelle categorie di livello inferiore, per esempio: /usr/ports/net. Nota che se un port dipende da una libreria o da altri port, quel comando non preleverà anche i distfile di questi port. Sostituisci fetch con fetch-recursive se vuoi prelevare anche tutte le dipendenze di un port.

Nota: Puoi compilare tutti i port di una categoria o perfino tutti i port eseguendo make in cima alla directory, in modo simile a quanto fatto per il suddetto metodo make fetch. Comunque, questo è rischioso poichè alcuni port non possono coesistere. Inoltre, alcuni port potrebbero richiedere di installare due diversi file con lo stesso nome.

In alcuni casi rari, gli utenti potrebbero voler acquisire i tarball da un sito diverso dal MASTER_SITES (la locazione di default dove i file sono scaricati). Puoi sovrascrivere l'opzione MASTER_SITES con il comando seguente:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

In questo esempio abbiamo settato MASTER_SITES a ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.

Nota: Alcuni port permettono (o perfino richiedono) l'impostazione di alcune opzioni di compilazione che abilitano/disabilitano parti dell'applicazione opzionali, settaggi di sicurezza, e altre personalizzazioni. Alcune applicazioni che mi vengono in mente sono www/mozilla, security/gpgme, e mail/sylpheed-claws. Quando sono disponibili simili opzioni viene visualizzato un messaggio.

4.5.2.3 Cambiare le Directory dei Port di Default

Qualche volta è utile (o necessario) utilizzare directory per i distfile e i port diverse da quelle di default. Le variabili PORTSDIR e PREFIX possono sovrascrivere le directory di default. Per esempio:

# make PORTSDIR=/usr/home/example/ports install

compilerà il port in /usr/home/example/ports e installerà ogni cosa sotto /usr/local.

# make PREFIX=/usr/home/example/local install

compilerà in /usr/ports ed installerà in /usr/home/example/local.

E naturalmente,

# make PORTSDIR=../ports PREFIX=../local install

è una combinazione dei due (è troppo lungo da scrivere per intero su questa pagina, ma dovrebbe darti lo stesso un'idea generale).

Alternativamente, queste variabili potrebbero essere settate nel tuo ambiente. Leggi la pagina man della tua shell per sapere come fare.

4.5.2.4 Avere a che Fare con imake

Alcuni port che usano imake (una parte dell'X Window System) non funzionano bene con PREFIX, e si ostinano ad installarsi sotto /usr/X11R6. In modo analogo, alcuni port di Perl ignorano PREFIX e si installano nell'albero del Perl. Far rispettare a questi port PREFIX è spesso un lavoro difficile o persino impossibile.

4.5.3 Rimozione dei Port Installati

Ora che sai come installare i port, probabilmente ti chiederai come rimuoverli, caso mai ne installassi uno e successivamente ti accorgessi che hai installato il port sbagliato. Rimuoveremo il port utilizzato nel nostro esempio precedente (che era lsof se non sei stato attento). Come con l'installazione dei port, la prima cosa che devi fare è andare nella directory del port, /usr/ports/sysutils/lsof. Dopo aver cambiato directory, sei pronto per disinstallare lsof. Questo viene fatto con il comando make deinstall:

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for lsof-4.57

È stato abbastanza facile. In questo modo hai rimosso lsof dal tuo sistema. Se volessi reinstallarlo, puoi farlo lanciando make reinstall dalla directory /usr/ports/sysutils/lsof.

Le sequenze make deinstall e make reinstall non funzionano più una volta che hai dato un make clean. Se vuoi disinstallare un port dopo un make clean, usa pkg_delete(1) come discusso nella sezione del Manuale riguardante i Package.

4.5.4 Port e Spazio su Disco

Usando la collezione dei port puoi facilmente esaurire lo spazio del tuo disco. Per questa ragione dovresti sempre ricordarti di ripulire le directory di lavoro dei port usando l'opzione make clean. Questo rimuoverà la directory work usata per la compilazione ed l'installazione del port. Inoltre puoi rimuovere i file tar dalla directory distfiles, e rimuovere i port installati che non sono più utilizzati.

Alcuni utenti limitano le categorie dei port mettendo un elemento nel file refuse. In questo modo, quando viene eseguita l'applicazione CVSup, questa non scaricherà i file delle categorie specificate nel file refuse.

4.5.5 Aggiornamento dei Port

Nota: Dopo che hai aggiornato la tua collezione dei port, prima di tentare di aggiornare un port, dovresti verificare il file /usr/ports/UPDATING. Questo file riporta alcuni problemi che gli utenti potrebbero incontrare durante l'aggiornamento di un port con le relative soluzioni.

Mantenere i tuoi port aggiornati può essere un lavoro noioso. Per esempio, per aggiornare dovresti andare nella directory del port, compilare il port, disinstallare il vecchio port, installare quello nuovo, e quindi ripulire la directory di lavoro. Immagina di fare tutto ciò per cinque port, noioso vero? Questo era uno dei maggiori problemi per gli amministratori di sistema, e ora abbiamo strumenti che fanno questo lavoro per noi. Per esempio l'utility sysutils/portupgrade fa tutto questo! Installalo come qualsiasi altro port, usando il comando make install clean.

Ora crea un database con il comando pkgdb -F. Verrà letta la lista dei port installati e verrà creato un file database nella directory /var/db/pkg. D'ora in avanti, quando esegui portupgrade -a, questo leggerà il database e il file dei port INDEX. Infine, portupgrade incomincerà a scaricare, compilare, effettuare backup, installare, e ripulire i port che devono essere aggiornati. portupgrade è fornito di molte opzioni a seconda dei casi di utilizzo, tra i quali uno è particolarmente importante.

Se vuoi aggiornare solo una determinata applicazione, e non il database completo, usa portupgrade pkgname, con l'opzione -r se portupgrade dovrebbe agire anche su tutti i package che dipendono dal dato package, o con l'opzione -R per agire su tutti i package richiesti dal dato package. Se vuoi usare i package invece dei port per l'installazione, usa l'opzione -P e se vuoi scaricare solo i distfile senza compilare o installare nulla, allora usa l'opzione -F. Per maggiori informazioni guarda la pagina man di portupgrade(1).

Nota: È importante aggiornare in modo regolare il database dei package usando il comando pkgdb -F per rattoppare eventuali incoerenze, specialmente quando portupgrade te lo chiede. Non interrompere portupgrade mentre sta aggiornando il database dei package, poichè ciò comporterà un database inconsistente.

Esistono altre utility che fanno simili lavori, controlla la directory ports/sysutils e guarda se ti viene qualche idea.

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