---
title: "Capitolo 4. Installazione delle Applicazioni: Port e Package"
part: Parte I. Per Cominciare
prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
params:
  path: "/books/handbook/ports/"
---

[[ports]]
= Installazione delle Applicazioni: Port e Package
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 4
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ports-synopsis]]
== Sinossi

FreeBSD è distribuito con una ricca collezione di strumenti di sistema come parte base del sistema. Comunque, c'è molto che si può fare prima che sia necessario installare un'applicazione aggiuntiva di terze parti. FreeBSD fornisce due tecnologie complementari per installare software di terze parti sul tuo sistema: la FreeBSD Ports Collection (per installare dai sorgenti), ed i package (per installare da binari pre-compilati). Puoi usare entrambi questi sistemi per installare l'ultima versione della tua applicazione preferita dai dispositivi locali o direttamente dalla rete.

Dopo aver letto questo capitolo, saprai:

* Come installare i package contenenti i binari delle applicazioni di terze parti.
* Come compilare le applicazioni di terze parti dai sorgenti usando la collezione dei port.
* Come rimuovere i package o i port installati in precedenza.
* Come modificare i valori di default utilizzati dalla collezione dei port.
* Come trovare un package specifico.
* Come aggiornare le tue applicazioni.

[[ports-overview]]
== Uno Sguardo all'Installazione del Software

Se hai già usato un sistema UNIX(R) prima d'ora saprai che la procedura tipica per installare software di terze parti è simile a questa:

[.procedure]
====
. Scaricare il software, che potrebbe essere distribuito sotto forma di codice sorgente, o come binario.
. Scompattare il software dal suo formato di distribuzione (tipicamente un tarball compresso con man:compress[1], man:gzip[1], o con man:bzip2[1]).
. Individuare la documentazione (probabilmente un file [.filename]#INSTALL# o un file [.filename]#README#, o qualche file nella sottodirectory [.filename]#doc/#) e leggere come installare il software.
. Se il software è stato distribuito sotto forma di sorgente, compilarlo. Questa fase può coinvolgere la modifica di un [.filename]#Makefile#, oppure l'esecuzione di uno script `configure`, e qualche altro lavoro.
. Installare e testare il software.
====

E questo se tutto va bene. Se stai installando del software di cui non è stato deliberatamente effettuato il porting in FreeBSD potresti perfino dover modificare il codice per farlo funzionare correttamente.

Se vuoi, puoi continuare ad installare il software su FreeBSD nel modo "tradizionale". Comunque, FreeBSD fornisce due tecnologie che possono farti risparmiare molti sforzi: i package e i port. Nel momento in cui scrivo, sono disponibili più di FreeBSD.numports; applicazioni di terze parti tramite questi due metodi.

Per ogni applicazione, il package di FreeBSD per quella applicazione consiste in un singolo file che devi scaricare. Il package contiene una copia pre-compilata di tutti i comandi dell'applicazione, così come i file di configurazione e di documentazione. Una volta scaricato il package, questo può essere manipolato con i comandi di gestione dei package di FreeBSD, come man:pkg_add[1], man:pkg_delete[1], man:pkg_info[1], e così via. L'installazione di una nuova applicazione può essere fatta con un singolo comando.

In FreeBSD un port di un'applicazione è un insieme di file predisposti per automatizzare il processo di compilazione dell'applicazione partendo dal codice sorgente.

Ricorda che ci sono molte fasi che normalmente devi eseguire se vuoi compilare un programma autonomamente (scaricare, scompattare, correggere, compilare, installare). I file che costituiscono un port contengono tutte le informazioni necessarie per permettere al sistema di fare questo lavoro al posto tuo. Tu esegui una manciata di semplici comandi e il codice sorgente dell'applicazione viene automaticamente scaricato, estratto, corretto, compilato, ed installato.

Di fatto, il sistema dei port può anche essere usato per generare package che possono essere successivamente manipolati con `pkg_add` ed altri comandi di gestione dei package che saranno presentati tra poco.

Sia i package che i port comprendono il meccanismo delle _dipendenze_. Supponiamo che tu voglia installare un'applicazione che dipende da un specifica libreria. Sia l'applicazione che la libreria sono disponibili in FreeBSD come port o come package. Se usi il comando `pkg_add` o il sistema dei port per installare l'applicazione, entrambi noteranno che la libreria non è installata, e automaticamente la installeranno per prima.

Dato che le due tecnologie sono abbastanza simili, probabilmente vorrai sapere perché FreeBSD le usa entrambe. I package e i port hanno i loro punti forte, e l'utilizzo dell'uno o dell'altro dipende dalle proprie preferenze personali.

.Benefici dei Package
* Il tarball compresso di un package è tipicamente più piccolo del tarball compresso contenente il codice sorgente della stessa applicazione.
* I package non richiedono alcuna compilazione aggiuntiva. Per grandi applicazioni, come Mozilla, KDE, oppure GNOME questo può essere importante, sopra tutto se usi un sistema lento.
* I package non richiedono la conoscenza del processo di compilazione del software su FreeBSD.

.Benefici dei Port
* I package sono normalmente compilati con opzioni conservative, poiché devono poter funzionare su un parco macchine il più ampio possibile. Con l'installazione dai port, puoi aggiustare le opzioni di compilazione per produrre (per esempio) del codice che sia specifico per un Pentium IV o un processore Athlon.
* Alcune applicazioni hanno delle opzioni attivabili al tempo di compilazione che permettono di modificare il comportamento delle applicazioni stesse. Per esempio, Apache può essere configurato con un'ampia varietà di differenti opzioni built-in. Effettuando la compilazione dal port non sei costretto ad accettare le opzioni di default, e puoi settarle tu stesso.
+ 
In alcuni casi, ci possono essere più package per la stessa applicazione a seconda dei settaggi ivi contenuti. Per esempio, Ghostscript è disponibile come package [.filename]#ghostscript# e come package [.filename]#ghostscript-nox11#, a seconda che tu abbia o meno installato un server X11. Questa sorta di adattamento è possibile con i package, ma diviene impossibile nel caso in cui un'applicazione ha più di una o due diverse opzioni che si possono dare al tempo di compilazione.
* Le condizioni di licenza di alcune distribuzioni di software proibiscono la distribuzione dei binari. Tali software devono essere distribuiti come codice sorgente.
* Alcune persone non si fidano della distribuzione dei binari. Con il codice sorgente, puoi (in teoria) controllare il codice e cercare i suoi potenziali problemi.
* Se hai delle patch, hai bisogno del sorgente per applicarle.
* Ad alcune persone piace avere il codice sorgente, in modo tale da poterlo leggerlo se sono annoiati, hackerarlo, prenderne in prestito delle parti (licenza permettendo, naturalmente), e così via.

Per tenersi al corrente sugli aggiornamenti dei port, iscriviti alla {freebsd-ports} e alla {freebsd-ports-bugs}.

[WARNING]
====

Prima di installare qualche applicazione, dovresti verificare http://vuxml.freebsd.org/[http://vuxml.freebsd.org/] per eventuali problemi di sicurezza relativi alla tua applicazione.

Inoltre puoi installare il port package:security/portaudit[] che verificherà in modo automatico tutte le applicazioni installate a caccia di vulnerabilità note; una verifica verrà fatta anche prima della compilazione dei port. Puoi usare il comando `portaudit -F -a` dopo che hai installato qualche package.
====

Il resto del capitolo spiegherà come usare i package ed i port per installare e gestire il software di terze parti su FreeBSD.

[[ports-finding-applications]]
== Ricerca della Propria Applicazione

Prima di poter installare delle applicazioni devi sapere quale applicazione ti serve, e come viene chiamata.

La lista delle applicazioni disponibili su FreeBSD cresce continuamente. Fortunatamente, ci sono diversi sistemi per trovare quello che ti serve:

* Il sito web di FreeBSD mantiene all'indirizzo link:https://www.FreeBSD.org/ports/[http://www.FreeBSD.org/ports/] una lista aggiornata in cui puoi cercare tutte le applicazioni correntemente disponibili. I port sono divisi in categorie, e puoi sia cercare un'applicazione in base al nome (se lo conosci), sia visionare tutte le applicazioni disponibili in una data categoria.
* Dan Langille mantiene FreshPort, all'indirizzo http://www.FreshPorts.org/[http://www.FreshPorts.org/]. FreshPort segue in tempo reale i cambiamenti delle applicazioni nell'albero dei port, permettendoti di "controllare" uno o più port, e dandoti la possibilità di essere avvisato tramite email quando questi vengono aggiornati.
* Se non conosci il nome dell'applicazione che desideri, prova ad usare un sito come FreshMeat (http://www.freshmeat.net/[http://www.freshmeat.net/]) per trovare l'applicazione, quindi controlla sul sito di FreeBSD per vedere se è già stato effettuato il porting.
* Se sei a conoscenza del nome esatto del port, ma non sai in quale categoria esso sia, puoi usare il comando man:whereis[1] Semplicemente digita `whereis file`, dove _file_ è il programma che vuoi installare. Se viene trovato sul tuo sistema, ti verrà indicato dove si trova, in modo simile a quanto segue:
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+ 
Questo ci dice che `lsof` (un'utility di sistema) si trova nella directory [.filename]#/usr/ports/sysutils/lsof#.
* Un altro modo per trovare un determinato port è quello di usare il meccanismo di ricerca contenuto nella collezione dei port. Per usare questo servizio di ricerca, devi posizionarti nella directory [.filename]#/usr/ports#. Una volta in quella directory, lancia `make search name=nome-programma` dove _nome-programma_ è il nome del programma che vuoi cercare. Per esempio, se vuoi cercare `lsof`:
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Elenca informazioni sui file aperti (simile a fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps:
....
+ 
La parte di output sulla quale devi porre particolare attenzione è la riga "Path:", che ti dice dove puoi trovare il port. Le altre informazioni riportate non sono necessarie per installare il port, e quindi non saranno trattate in questa sede.
+ 
Inoltre per una ricerca più complessa puoi usare `make search key=stringa` dove _stringa_ fa parte del testo da cercare. Questo ricerca nei nomi dei port, nei commenti, nelle descrizioni e nelle dipendenze e può essere usato per cercare port che si riferiscono ad un argomento particolare anche se non conosci il nome del programma che stai cercando.
+ 
In entrambi i casi, la stringa di ricerca è case-insensitive. La ricerca per "LSOF" produrrà gli stessi risultati della ricerca per "lsof".

[[packages-using]]
== Utilizzo del Sistema dei Package

=== Installazione di un Package

Puoi usare l'utility man:pkg_add[1] per installare un package di FreeBSD da un file locale o da un server sulla rete.

.Scaricare un Package Manualmente e Installarlo da Locale
[example]
====

[source,shell]
....
# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz
....

====

Se non hai una raccolta di package locale (per esempio il set dei CDROM di FreeBSD) allora probabilmente ti risulterà più facile usare man:pkg_add[1] con l'opzione `-r`. In questo modo man:pkg_add[1] determina automaticamente la corretta release e il giusto formato dell'oggetto, quindi scarica il package da un sito FTP e lo installa.

[source,shell]
....
# pkg_add -r lsof
....

L'esempio qui sopra scarica il giusto package e lo installa senza nessun ulteriore intervento. Se vuoi specificare un sito mirror dei package di FreeBSD alternativo, invece del sito di distibuzione principale, devi settare la variabile `PACKAGESITE` come desiderato, in modo tale da sovrascrivere i settaggi di default. man:pkg_add[1] usa man:fetch[3] 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 la tua macchina è dietro un firewall, o se utilizzi un proxy FTP/HTTP. Leggi man:fetch[3] per la lista completa. Nell'esempio precedente si può anche notare che viene usato `lsof` al posto di `lsof-4.56.4`. Quando viene usata la modalità di prelevamento da remoto, il numero di versione del package non deve essere specificato. man:pkg_add[1] prenderà automaticamente l'ultima versione dell'applicazione.

[NOTE]
====
man:pkg_add[1] scaricherà la versione più recente della tua applicazione solo se stai usando FreeBSD.current; o FreeBSD.stable;. Se stai utilizzando una versione -RELEASE, allora verrà scaricata la versione del package che è stato costruito per la tua release. Tuttavia è possibile cambiare questo comportamento modificando la variabile di ambiente `PACKAGESITE` in modo opportuno. Per esempio, se hai un un sistema FreeBSD 5.4-RELEASE, di default man:pkg_add[1] tenterà di scaricare i package da `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/`. Se vuoi forzare man:pkg_add[1] a scaricare i package di FreeBSD 5-STABLE, setta `PACKAGESITE` a `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5-stable/Latest/`. 
====

I file dei package sono distribuiti nel formato [.filename]#.tgz#. Puoi trovarli in link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/], oppure sui CDROM della distribuzione di FreeBSD. Ogni CD contenuto nel set dei quattro CD (e nel PowerPak, ecc.) contiene i package nella directory [.filename]#/packages#. La disposizione dei package è simile a quella dell'albero [.filename]#/usr/ports#. Ogni categoria ha la propria directory, ed ogni package può essere trovato dentro la directory [.filename]#All#.

La struttura delle directory del sistema dei package eguaglia quella dei port; questi due sistemi lavorano l'uno con l'altro per formare l'intero sistema dei package/port.

=== Gestione dei Package

L'utility man:pkg_info[1] elenca e descrive i vari package installati.

[source,shell]
....
# pkg_info
cvsup-16.1          Un comune sistema di distribuzione dei file in rete ottimizzato per CVS
docbook-1.2         Meta-port delle varie versioni del DTD DocBook
...
....

L'utility man:pkg_version[1] riassume le versioni di tutti i package installati. Paragona le versioni dei package con le versioni correnti trovate nell'albero dei port.

[source,shell]
....
# pkg_version
cvsup                       =
docbook                     =
...
....

I simboli nella seconda colonna indicano il risultato del confronto tra la versione installata e quella disponibile in locale nell'albero dei port.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Simbolo
| Significato

|=
|Le versioni del package installato e di quello disponibile in locale nell'albero dei port sono uguali.

|<
|La versione installata è precedente a quella disponibile nell'albero dei port.

|>
|La versione installata è più aggiornata di quella trovata in locale nell'albero dei port. (L'albero dei port locale è probabilmente da aggiornare)

|?
|Il package installato non può essere trovato nell'indice dei port. (Questo può succedere, per esempio, se un port installato viene rimosso dalla collezione dei port oppure viene rinominato.)

|*
|Ci sono più versioni del package.
|===

=== Cancellazione di un Package

Per rimuovere un package installato in precedenza, usa l'utility man:pkg_delete[1].

[source,shell]
....
# pkg_delete xchat-1.7.1
....

=== Miscellanea

Tutte le informazioni sui package sono memorizzate nella directory [.filename]#/var/db/pkg#. La lista dei file installati e le descrizioni di ogni package possono essere trovate all'interno dei file di questa directory.

[[ports-using]]
== 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.

[[ports-tree]]
=== Ottenimento della Collezione dei Port

Prima che tu possa installare i port, devi procurarti la collezione dei port-che essenzialmente è un set di [.filename]#Makefiles#, patch, e file di descrizione collocati in [.filename]#/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:

[.procedure]
====
*Procedure: Il Metodo Sysinstall*

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

. Esegui da `root sysinstall` (`/stand/sysinstall` nelle versioni di FreeBSD precedenti alla 5.2) come mostrato qui sotto:
+
[source,shell]
....
# sysinstall
....
+
. Scorri verso il basso e seleziona [.guimenuitem]#Configure#, premi kbd:[Invio].
. Scorri verso il basso e seleziona [.guimenuitem]#Distributions#, premi kbd:[Invio].
. Scorri verso il basso fino a [.guimenuitem]#ports#, premi kbd:[Spazio].
. Scorri verso l'alto fino a [.guimenuitem]#Exit#, premi kbd:[Invio].
. Seleziona il modo di installazione desiderato, come CDROM, FTP, e così via.
. Scorri verso l'alto fino a [.guimenuitem]#Exit# e premi kbd:[Invio].
. Premi kbd:[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, [.filename]#/usr/shared/examples/cvsup/ports-supfile#. Guarda crossref:mirrors[cvsup,Usare CVSup] (crossref:mirrors[cvsup,Uso di CVSup]) per maggiori informazioni sull'uso di CVSup e del file menzionato.

[.procedure]
====
*Procedure: 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.

. Installa il package package:net/cvsup-without-gui[]:
+
[source,shell]
....
# pkg_add -r cvsup-without-gui
....
+ 
Guarda crossref:mirrors[cvsup-install,Installazione di CVSup] (crossref:mirrors[cvsup-install,Installazione]) per maggiori dettagli.
. Esegui `cvsup`:
+
[source,shell]
....
# cvsup -L 2 -h cvsup.FreeBSD.org /usr/shared/examples/cvsup/ports-supfile
....
+ 
Cambia _cvsup.FreeBSD.org_ in un server CVSup vicino a te. Guarda crossref:mirrors[cvsup-mirrors,Mirror CVSup] (crossref:mirrors[cvsup-mirrors,Siti CVSup]) per una lista completa dei siti mirror.
+
[NOTE]
======
Qualcuno potrebbe voler usare il suo [.filename]#ports-supfile#, per esempio per evitare di passare il server CVSup su linea di comando.

[.procedure]
.. In questo caso, da `root`, copia [.filename]#/usr/shared/examples/cvsup/ports-supfile# in una nuova locazione, come [.filename]#/root# o la tua directory home.
.. Modifica [.filename]#ports-supfile#.
.. Cambia _CHANGE_THIS.FreeBSD.org_ in un server CVSup vicino a te. Guarda crossref:mirrors[cvsup-mirrors,Mirror CVSup] (crossref:mirrors[cvsup-mirrors,Siti CVSup]) per una lista completa di siti mirror.
.. E ora esegui `cvsup`, in questo modo:
+
[source,shell]
....
# cvsup -L 2 /root/ports-supfile
....

======

. Poco dopo aver eseguito il comando man:cvsup[1] 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.
====

[[ports-skeleton]]
=== 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:

* Un [.filename]#Makefile#. Il [.filename]#Makefile# contiene varie espressioni che specificano come l'applicazione deve essere compilata e dove deve essere installata sul tuo sistema.
* Un file [.filename]#distinfo#. Questo file contiene informazioni sui file che devono essere scaricati per la compilazione del port e sui loro checksum (somme di controllo), utilizzati per verificare che quei file non siano stati corrotti durante il download.
* Una directory [.filename]#files#. Questa directory contiene le patch utilizzate per la compilazione e per l'installazione del programma sul tuo sistema FreeBSD. Le patch sono sostanzialmente piccoli file che specificano come modificare alcuni file. Sono in puro formato di testo, e in modo grossolano dicono "Rimuovi la riga 10" o "Cambia la riga 26 in ...". Le patch sono anche conosciute con il termine "diff" poichè sono generate dal programma man:diff[1].
+ 
Questa directory può anche contenere altri file utilizzati per la costruzione del port.
* Un file [.filename]#pkg-descr#. Questo file contiene una descrizione del programma più dettagliata, spesso su più righe di testo.
* Un file [.filename]#pkg-plist#. Questo file contiene l'elenco di tutti i file che saranno installati dal port. Dice anche al sistema dei port quale file rimuovere durante la disinstallazione.

Alcuni port hanno altri file, come [.filename]#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 extref:{porters-handbook}[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.

[NOTE]
====
Devi essere `root` per installare i port.
====

[WARNING]
====

Prima di installare qualche port, dovresti assicurarti di avere l'albero della collezione dei port aggiornato e dovresti verificare http://vuxml.freebsd.org/[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 applicazioni. Questo strumento può essere trovato nella collezione dei port (package: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 man:portaudit[1] e man:periodic[8].
====

[[ports-cd]]
==== 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 http://www.freebsdmall.com/[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 [.filename]#/cdrom#. (Se usi un punto di mount differente, setta la variabile make `CD_MOUNTPTS`.) Per prima cosa, vai nella directory del port che vuoi installare:

[source,shell]
....
# cd /usr/ports/sysutils/lsof
....

Una volta dentro la directory [.filename]#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:

[source,shell]
....
# 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`:

[source,shell]
....
# 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.

[NOTE]
====
Potresti anche evitare un passaggio lanciando solamente `make install` invece dei due passi separati `make` e `make install`.
====

[NOTE]
====
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 comando funzionerà per le shell come `tcsh`. Usa il comando `hash -r` per le shell come `sh` o package:shells/bash[]. Per maggiori informazioni guarda la documentazione della tua shell.
====

[NOTE]
====
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 <<ports-inet,prossima sezione>>).
====

[[ports-inet]]
==== Installazione dei Port da Internet

Questa sezione presuppone che tu abbia una connessione ad Internet funzionante. Se non ce l'hai, dovrai utilizzare <<ports-cd,l'installazione da CDROM>>, oppure dovrai copiare manualmente il distfile in [.filename]#/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:

[source,shell]
....
# 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 man: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 man: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 ([.filename]#/usr/ports#) e i file richiesti saranno scaricati. Questo comando funziona anche nelle categorie di livello inferiore, per esempio: [.filename]#/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.

[NOTE]
====
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:

[source,shell]
....
# 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/`.

[NOTE]
====
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 package:www/mozilla[], package:security/gpgme[], e package:mail/sylpheed-claws[]. Quando sono disponibili simili opzioni viene visualizzato un messaggio.
====

==== 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:

[source,shell]
....
# make PORTSDIR=/usr/home/example/ports install
....

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

[source,shell]
....
# make PREFIX=/usr/home/example/local install
....

compilerà in [.filename]#/usr/ports# ed installerà in [.filename]#/usr/home/example/local#.

E naturalmente,

[source,shell]
....
# 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.

==== 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 [.filename]#/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.

[[ports-removing]]
=== 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, [.filename]#/usr/ports/sysutils/lsof#. Dopo aver cambiato directory, sei pronto per disinstallare `lsof`. Questo viene fatto con il comando `make deinstall`:

[source,shell]
....
# 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 [.filename]#/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 man:pkg_delete[1] come discusso nella <<packages-using,sezione del Manuale riguardante i Package>>.

[[ports-disk-space]]
=== Port e Spazio su Disco

Usando la collezione dei port con il passare del tempo puoi facilmente esaurire lo spazio del tuo disco. Infatti compilando ed installando software con i port, l'albero dei port tende ad aumentare in dimensioni, quindi dovresti sempre ricordarti di ripulire le directory temporanee [.filename]#work# usando il comando `make clean`. Questo rimuoverà la directory [.filename]#work# dopo che un port è stato compilato ed installato. Inoltre puoi rimuovere i file sorgenti della distribuzione dalla directory [.filename]#distfiles#, e rimuovere i port installati che non sono più utilizzati.

Alcuni utenti limitano le categorie dei port disponibili mettendo un elemento nel file [.filename]#refuse#. In questo modo, quando viene eseguita l'applicazione CVSup, questa non scaricherà i file delle categorie specificate nel file [.filename]#refuse#. Maggiori informazioni riguardo il file [.filename]#refuse# possono essere trovate nella crossref:mirrors[cvsup-refuse-file,Il File refuse].

[[ports-upgrading]]
=== Aggiornamento dei Port

[NOTE]
====
Dopo che hai aggiornato la tua collezione dei port, prima di tentare di aggiornare un port, dovresti verificare il file [.filename]#/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 package: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 [.filename]#/var/db/pkg#. D'ora in avanti, quando esegui `portupgrade -a`, questo leggerà il database e il file dei port [.filename]#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.

Per usare i package invece dei port nell'installazione, usa l'opzione `-P`. Con questa opzione portupgrade cerca nelle directory locali elencate in `PKG_PATH`, o, se non sono stati trovati localmente, scarica i package da un sito. Se i package non sono stati trovati localmente ne è stato possibile scaricarli in remoto, portupgrade userà i port. Per impedire l'uso dei port, usa l'opzione `-PP`.

Per scaricare solo i distfile (o i package, se è stata specificata l'opzione `-P`) senza compilare o installare nulla, usa l'opzione `-F`. Per maggiori informazioni guarda la pagina man di man:portupgrade[1].

[NOTE]
====
È 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 [.filename]#ports/sysutils# e guarda se ti viene qualche idea.

[[ports-nextsteps]]
== Attività del Dopo Installazione

Di solito dopo aver installato una nuova applicazione dovresti leggere la documentazione che potrebbe essere stata inclusa, modificare qualche file di configurazione, assicurarti che l'applicazione parta nella fase di avvio (se è un demone), e così via;.

I passi precisi che devi seguire per configurare un'applicazione sono ovviamente diversi da applicazione a applicazione. Comunque, se hai appena installato una nuova applicazione e ti stai chiedendo "Cosa faccio ora?" questi consigli potrebbero aiutarti:

* Usa man:pkg_info[1] per scoprire quali file sono stati installati, e dove sono stati installati. Per esempio, se hai appena installato la versione 1.0.0 di FooPackage, allora questo comando
+
[source,shell]
....
# pkg_info -L foopackage-1.0.0 | less
....
+ 
mostrerà tutti i file installati dal package. Fai molta attenzione ai file nelle directory [.filename]#man/#, che sono le pagine man, a quelli nella directory [.filename]#etc/#, che sono i file di configurazione, e a quelli in [.filename]#doc/#, che forniscono una documentazione più esauriente.
+ 
Se non sei sicuro della versione dell'applicazione che hai appena installato, questo comando
+
[source,shell]
....
# pkg_info | grep foopackage
....
+ 
troverà tutti i package installati che contengono nel nome _foopackage_. Rimpiazza _foopackage_ nella tua riga di comando a seconda delle tue necessità.
* Una volta che hai scoperto dove sono state posizionate le pagine man dell'applicazione, esaminale usando man:man[1]. Analogamente, esamina i file di configurazione d'esempio, ed ogni ulteriore documentazione che può essere stata fornita.
* Se l'applicazione ha un sito web, cerca della documentazione aggiuntiva, le domande più frequenti (FAQ), ed altro ancora. Se non sei sicuro dell'indirizzo del sito web questo potrebbe essere presente nell'output di
+
[source,shell]
....
# pkg_info foopackage-1.0.0
....
+ 
Una riga contenete `WWW:`, se presente, dovrebbe fornire l'URL del sito dell'applicazione.
* I port che dovrebbero avviarsi in fase di avvio (come i server Internet) di solito installano uno script di esempio in [.filename]#/usr/local/etc/rc.d#. Dovresti verificare questo script ed eventualmente modificarlo o rinominarlo. Vedi la sezione crossref:config[configtuning-starting-services,Avvio dei Servizi] per maggiori informazioni.

[[ports-broken]]
== Avere a che Fare con Port non Funzionanti

Se ti dovessi imbattere in un port che per te non funziona, ci sono alcune cose che puoi fare, tra le quali:

. Scopri se c'è una soluzione pendente per il port nel link:https://www.FreeBSD.org/support/#gnats[database dei Report dei Problemi]. Se c'è, potresti usare la soluzione proposta.
. Chiedi aiuto a colui che mantiene il port. Digita `make maintainer` o leggi il [.filename]#Makefile# per trovare il suo indirizzo email. Ricorda di includere nel messaggio il nome e la versione del port (manda la riga `$FreeBSD:` del [.filename]#Makefile#) e l'output che descrive l'errore.
+
[NOTE]
====
Alcuni port non sono mantenuti da singole persone ma invece da una extref:{mailing-list-faq}[mailing list]. La maggior parte di questi indirizzi sono simili a mailto:freebsd-listname@FreeBSD.org[freebsd-listname@FreeBSD.org]. Tieni conto di questo quando mandi le tue questioni.

In particolare, i port mantenuti da mailto:freebsd-ports@FreeBSD.org[freebsd-ports@FreeBSD.org] in realtà non sono mantenuti da nessuno. Il supporto e i fix, se ce ne sono, arrivano dalla comunità facente parte di quella mailing list. Sono necessari altri volontari!
====

+ 
Se non ottieni una risposta, puoi usare man:send-pr[1] per segnalare un bug report (guarda l'articolo extref:{problem-reports}[Come Scrivere i Report dei Problemi per FreeBSD]).
. Aggiustarlo! Il extref:{porters-handbook}[Manuale del Porter] contiene informazioni dettagliate sull'infrastruttura dei "Port" affinchè tu possa aggiustare quel port che occasionalmente non funziona o perfino proporne uno tutto tuo!
. Prendi il package da un sito FTP vicino a te. La "principale" collezione dei package è su `ftp.FreeBSD.org` nella link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[directory dei package], ma _prima_ assicurati di controllare il tuo http://mirrorlist.FreeBSD.org/[mirror locale]! È più probabile che funzionino i package rispetto alla compilazione dal sorgente e sono anche molto più sbrigativi. Usa il programma man:pkg_add[1] per installare i package sul tuo sistema.
