Manual de FreeBSD
Anterior | Capítulo 4. Instalación de aplicaciones: «packages» y ports | Siguiente

# 4.5. Uso de la colección de ports

La siguiente sección incluye las instrucciones básicas para instalar o eliminar programas mediante la Colección de Ports de su sistema.

## 4.5.1. Cómo obtener la Colección de Ports

Para poder instalar ports primero debe hacerse, obviamente, con la Colección de Ports--; en esencia está compuesta por `Makefiles`, parches y ficheros con la descripción de los ports y está en `/usr/ports`.

Cuando instaló su sistema FreeBSD el programa sysinstall le preguntó si querí instalar la Colección de Ports. Si contestó que no siga estas instrucciones:

Mediante CVSup

Este es un método rápido de conseguir y mantener una copia de la Colección de Ports al dia mediante el protocolo CVSup. Si quiere saber más sobre CVSup consulte Uso de CVSup.

> Nota: La implementación del protocolo CVSup que se incluye en FreeBSD se llama csup. Apareció en FreeBSD 6.2. Los usuarios de releases anteriores de FreeBSD puden instalar `net/csup` como port o package.

Asegúrese de que `/usr/ports` está vacío antes de ejecutar csup por primera vez. Si ya tiene la Colección de Ports porque la ha instalado por otros medios csup no purgará los parches de ports eliminados.

1. Ejecute `csup`:

       # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile

   Cambie `cvsup.FreeBSD.org` por algún otro servidor CVSup que tenga cerca. Consulte Réplicas CVSup (Sección 30.2.2), donde encontrará una lista completa de las réplicas CVSup.

   > Nota: Puede usar una versión de `ports-supfile` confeccionada a su gusto, por ejemplo para evitar tener que indicarle el nombre del servidor CVSup a mano.

   > 1. Haga lo siguiente: como `root` copie `/usr/share/examples/cvsup/ports-supfile` en otro sitio, por ejemplo `/root` o su directorio /home.

   > 2. Edite `ports-supfile`.

   > 3. Reemplace `CHANGE_THIS.FreeBSD.org` por un servidor CVSup que esté cerca de donde esté usted. Consulte Réplicas CVSup (Sección 30.2.2) si necesita ver una lista completa de las mismas.

   > 4. Ejecute `csup`del siguiente modo:

   >        # csup -L 2 /root/ports-supfile

2. Al ejecutar csup(1) descargará y aplicará todos los cambios recientes que haya sufrido la Colección de Ports, pero tenga en cuenta que no actualizará ninguno de los ports que ya tenga instalados en su sistema.

Mediante portsnap

Portsnap es un método alternativo de distribuir la Colección de Ports. Se incluyó por primera vez en FreeBSD 6.0. Puede instalar portsnap(8) en versiones anteriores de FreeBSD como port (`ports-mgmt/portsnap`) o como package:

    # pkg_add -r portsnap

En uso de portsnap encontrará detallado el funcionamiento de Portsnap features.

1. Puede saltarse esta paso a partir de FreeBSD 6.1-RELEASE y en versiones recientes de Portsnap (port o package). `/usr/ports` se creará automáticamente la primera vez que ejecute portsnap(8). En versiones anteriores de portsnap había que crear un `/usr/ports` vacío si no existía previamente:

       # mkdir /usr/ports

2. Descargue una instantánea comprimida de la Colección de Ports en `/var/db/portsnap`. Hecho esto puede desconectar de Internet si quiere.

       # portsnap fetch

3. Si está ejecutando Portsnap por vez primera debe extraer la instantánea en `/usr/ports`:

       # portsnap extract

   Si ya tiene un `/usr/ports` y solamente está actualizando su árbol de ports ejecute lo siguiente:

       # portsnap update

Mediante Sysinstall

Este método implica el uso de sysinstall para instalar la Colección de Ports.

1. Como usuario `root` ejecute `sysinstall` (`/stand/sysinstall` en cualquier versión previa a FreeBSD 5.2); del siguiente modo:

       # sysinstall

2. Posiciónese en la opción Configure y pulse Intro.

3. Seleccione la opción Distributions y pulse Intro.

4. Seleccione la opción ports y pulse la barra espaciadora.

5. Seleccione el medio de instalación deseado (CDROM, FTP, etc.)

6. Diríjase a la opción Exit y pulse Intro.

7. Pulse X para salir de sysinstall.

## 4.5.2. Instalación de ports

Al hablar de la Colección de Ports lo primero que hay que explicar es a qué nos referimos cuando hablamos de un «esqueleto» (skeleton). El esqueleto de un port es un conjunto mínimo de ficheros que indican a FreeBSD cómo compilar e instalar un programa. Cada esqueleto incluye:

- Un `Makefile`. Este `Makefile` contiene diversas sentencias que le indican al sistema cómo compilarlo y dónde instalarlo en su sistema.

- Un fichero `distinfo`. Este fichero contiene información sobre los ficheros que se debe descargar para poder compilar el programa, así como el identificador «checksum», que se usa para comprobar mediante md5(1) que la descarga ha sido correcta y que el la integridad del fichero está garantizada.

- Un directorio `files`. Este directorio contiene los parches necesarios para compilar e instalar el programa en su sistema FreeBSD. Básicamente los parches son pequeños ficheros que especifican cambios en ficheros concretos. Su formato es en texto plano y suelen decir cosas como «borra la línea 10» o «Cambia la línea 26 por esto». Estos parches también se conocen como «diffs» ya que se generan con diff(1).

  Es posible que este directorio tambié contenga algún otro fichero necesario para compilar e instalar el port.

- Un fichero `pkg-descr`. Es una descripción más detallada del programa. En algunas ocasiones ocupa varias líneas.

- Un fichero `pkg-plist`. Es una lista de todos los ficheros que instalará el port. También le indica al sistema de ports qué ficheros eliminar durante la desinstalación del programa.

Algunos ports tienen otros ficheros, como `pkg-message`. El sistema de ports los usa para gestionar situaciones especiales. Si desea conocer los detalles, incluso sobre los ports en general, consulte el libro FreeBSD Porter's Handbook.

El port incluye las instrucciones necesarias para obtener software a partir del código fuente, pero no incluye el código. Puede obtener el código desde un CDROM o desde Internet. El código se distribuye del modo que el autor estime oportuno. Normalmente es un fichero tar comprimido con gzip, pero puede comprimirse con otra herramienta o incluso no estar comprimido. El código del programa, venga como venga, se llama «distfile». A continuación veremos los dos métodos de instalación de un port.

> Nota: Debe ser el usuario `root` para instalar ports.

> Aviso Antes de instalar cualquier port asegúrese de tener la Colección de Ports actualizada y de comprobar en http://vuxml.freebsd.org/ la existencia de posibles problemas de seguridad que pudiera tener el port.

> Puede realizar la comprobación de seguridad con portaudit antes de instalar cualquier aplicación. Esta herramienta está en la Colección de Ports (`security/portaudit`). Le rogamos que al menos considere ejecutar `portaudit -F` antes de instalar un port nuevo para que descargue la nueva base de datos de vulnerabilidades. Durante la comprobación diaria de seguridad actualizará la base de datos y hará una auditoría del sistema. Para más información lea las páginas de manúal de portaudit(1) y periodic(8).

La Colección de Ports asume que tiene usted conexión con Internet. Si no es así tendrá que disponer de una copia del distfile en `/usr/ports/distfiles`.

El primer paso es ubicarse en el directorio del port que desea instalar:

    # cd /usr/ports/sysutils/lsof

Una vez en el directorio `lsof` puede ver el esqueleto del port. El siguiente paso es compilar el port. Solamente tiene que teclear `make` en el prompt. Una vez hecho verá algo como esto:

    # make
    >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
    >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
    ===>  Extracting for lsof-4.57
    ...
    [La salida de la descompresión se ha eliminado]
    ...
    >> 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
    ...
    [La salida de la configuración se ha eliminado]
    ...
    ===>  Building for lsof-4.57
    ...
    [La salida de la compilación se ha eliminado]
    ...
    #

Una vez que acabe la compilación se le devolverá el control del prompt. El siguiente paso es instalar el port. Para ello bastará con que añada una palabra a la orden `make`: esa palabra es `install`:

    # make install
    ===>  Installing for lsof-4.57
    ...
    [La salida de la instalación se ha eliminado]
    ...
    ===>   Generating temporary packing list
    ===>   Compressing manual pages for lsof-4.57
    ===>   Registering installation for lsof-4.57
    ===>  SECURITY NOTE:
          This port has installed the following binaries which execute with
          increased privileges.
    #

Una vez que vuelva usted al prompt podrá ejecutar la aplicación que acaba de instalar. Dado que `lsof` es un programa que se ejecuta con privilegios altos se le ha mostrado una advertencia de seguridad. Durante la compilación e instalación es posible que hayan aparecido otros.

Le recomendamos que borre el directorio que contiene todos los ficheros temporales necesarios durante la compilación. No solo consume valioso espacio en disco sino que puede dar problemas cuando vaya a actualizar el port a una versión más reciente.

    # make clean
    ===>  Cleaning for lsof-4.57
    #

> Nota: Puede ahorrarse teclear dos pasos si para instalar un port teclea `make `install clean`` en lugar de `make`, `make `install`` y `make `clean`` como tres pasos separados.

> Nota: Algunas shells mantienen una caché de órdenes disponibles en los directorios que aparecen en la variable de entorno `PATH` con el fin de acelerar las operaciones de búsqueda de ejecutables de esas órdenes. Si usa una de esas shells tendrá que utilizar la orden `rehash` tras instalar un port o no podrá ejecutar aplicaciones recién instaladas. Esta orden funciona en shells como `tcsh`. Utilice `hash -r` en shells `sh`. Para más información consulte la documentación de su shell.

Algunos DVD-ROM de terceros, como el FreeBSD Toolkit de FreeBSD Mall contienen distfiles. Puede usarlos con la Colección de Ports. Monte el DVD-ROM en `/cdrom`. Si utiliza un punto de montaje diferente asigne a `CD_MOUNTPTS` el valor adecuado. Los distfiles se irán copiando automáticamente a medida que vayan siendo necesarios.

> Nota: Por favor, tenga en cuenta que la licencia de unos cuantos ports muy concretos no permite su distribución en CD-ROM. Puede deberse a que es necesario rellenar un formulario de registro antes de descargarlo, porque la redistribución no esté permitida o por otra razón. Si quiere instalar un port que no está en el CD-ROM tendrá que tener salida a Internet.

El sistema de ports utiliza fetch(1) para descargar ficheros; en este proceso intervienen varias variables de entorno, como `FTP_PASSIVE_MODE`, `FTP_PROXY`, y `FTP_PASSWORD`. Si está detrás de un cortafuegos tendrá que asignar valores a una o más de estas variables, así como si necesita utilizar un proxy FTP/HTTP. Consulte fetch(3), donde econtrará una lista detallada.

La opción `make `fetch`` se creó para los usuarios que no disponen de conexión contínua. Ejecute esta orden en el directorio raíz (`/usr/ports`) y se descargarán todos los ficheros necesarios. Esta orden también funciona en directorios situados más abajo, por ejemplo `/usr/ports/net`. Tenga en cuenta que si un port depende de librerías u otros ports éstos distfiles no se descargarán, a menos que reemplace `fetch` por `fetch-recursive`, que se encargará de descargar todas las dependencias de cada port.

> Nota: Si quiere compilar todos los ports de una categoría y de una sola vez ejecutando la orden `make` en el directorio raíz, de muy similar manera que lo que se acaba de ver con `make`fetch``. Tenga en cuenta que esto es bastante peligroso porque algunos ports no pueden coexistir. También se dan casos de ports que instalan instalan dos ficheros diferentes con el mismo nombre.

En algunos casos (raros) el usuario tendrá que descargar los tarball de un sitio que no es el que se guarda en la variable de entorno `MASTER_SITES` (el sitio desde el que se descargan todos los demás normalmente). Puede sobreescribir la opción `MASTER_SITES` con la siguiente orden:

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

En este ejemplo vamos a darle a la opción `MASTER_SITES` el valor `ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/`.

> Nota: Algunos ports permiten (o incluso exigen) que se le faciliten opciones de compilación para activar o desactivar partes de la aplicación que no se necesiten, determinadas opciones de seguridad, etc. Casos típicos de esto son `www/mozilla`, `security/gpgme`, and `mail/sylpheed-claws`. Cuando debe usted tomar este tipo de decisiones se le muestra un mensaje con las opciones disponibles.

### 4.5.2.1. Sobreescribir directorios por omisión de ports

Algunas veces es útil (u obligatorio) utilizar un directorio de trabajo o un «target» distinto al que tenemos por omisión. Las variables de entorno `WRKDIRPREFIX` y `PREFIX` pueden sobreescribirse según nuestra conveniencia. Veamos un ejemplo:

    # make WRKDIRPREFIX=/usr/home/ejemplo/ports install

compilará el port en `/usr/home/ejemplo/ports` y lo instalará en `/usr/local`.

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

lo compilará en `/usr/ports` y lo instalará en `/usr/home/ejemplo/local`.

Y por supuesto,

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

combinará ambas; (ocupa demasiado para mostrarlo en una página, pero la idea general queda clara).

Puede asignar valores a estas variables del mismo modo que a cualquier otra de su entorno. Consulte la documentación de su shell para más información.

### 4.5.2.2. Uso de `imake`

Algunos ports que usan `imake` (un componente del Sistema X Window) no funcionan correctamente con `PREFIX` e insistirán en instalarse en `/usr/X11R6`. Del mismo modo algunos ports de Perl ignoran `PREFIX` y se instalan en el árbol de Perl. Hacer que estos ports respeten `PREFIX` es difícil y a veces imposible.

### 4.5.2.3. Reconfigurar ports

Al compilar ciertos ports se le presentará un menú basado en ncurses en el cual podrá elegir entre más o menos opciones de compilación. No es raro que los usuarios quieran volver a usar ese menú para añadir, quitar o cambiar opciones una vez que el port ya está compilado. Hay bastantes formas de hacerlo. Una manera es entrar al directorio que contiene el port y teclear `make `config``, que hará que se le presente de nuevo el menú con las opciones que estuvieran seleccionadas previamente. Otra opción es usar la orden `make `showconfig``, que le mostrará todas las opciones de configuración del port. Hay otra opción más, `make `rmconfig``, que borrará todas las opciones que estuvieran seleccionadas y le permitirá por tanto empezar desde cero. Todas estas opciones y muchas más las encontrará descritas con gran detalle en ports(7).

## 4.5.3. Cómo desinstalar ports

Ahora que sabe instalar ports probablemente quiera saber cómo eliminarlos; puede que haya instalado alguno y posteriormente se haya dado cuenta de que ha instalado el port incorrecto. Vamos a desinstalar el port del ejemplo anterior (que, para todos aquellos que no estaban atentos, era `lsof`). Igual que al instalar ports, lo primero que debemos hacer es ubicarnos en el directorio del port que deseamos eliminar del sistema, en nuestro caso `/usr/ports/sysutils/lsof`. Los ports se desinstalan exactamente igual que los packages; esto se explica en la sección de packages) utilizando la orden pkg_delete(1):

    # pkg_delete lsof-4.57

## 4.5.4. Actualización de ports

Antes de nada necesita ver una lista de ports instalados de los cuales exista una nueva versión en la Colección de Ports. Utilice pkg_version(1):

    # pkg_version -v

### 4.5.4.1. `/usr/ports/UPDATING`

Una vez actualizada la Colección de Ports (y antes de intentar actualizar ningún port) debe consultar `/usr/ports/UPDATING`. Este fichero describe todas las novedades, problemas que pueden encontrarse y pasos que deben seguir los usuarios al actualizar un port; hay cambios de formato, cambios de ubicación de ficheros de configuración o incompatibilidades con versiones anteriores.

Si `UPDATING` se contradice de cualquier modo con lo que lea aquí tenga muy encuenta que lo que aparezca en `UPDATING` tiene prioridad absoluta.

### 4.5.4.2. Actualización de ports con portupgrade

La aplicación portupgrade se diseñó para actualizar fácilmente los ports instalados en un sistema. Puede instalarla desde el port `ports-mgmt/portupgrade`. La instalación es como al de cualquier otro port, use la orden `make `install clean`` command:

    # cd /usr/ports/ports-mgmt/portupgrade
    # make install clean

Compruebe la lista de ports instalados con `pkgdb -F` y arregle todas las inconsistencias que aparezcan. Le recomendamos que haga esta comprobación de forma regular y siempre antes de una actualización.

Si ejecuta `portupgrade -a` portupgrade intentará actualizar todos y cada uno de los ports instalados en su sistema. Utilice el parámetro `-i` si quiere que le pida confirmación antes de actualizar cada uno de los ports.

    # portupgrade -ai

Si solamente quiere actualizar una sola aplicación (y no absolutamente todos los ports) utilice la orden <`portupgrade `nombre-de-aplicación``. Añada el modificador `-R` si quiere que portupgrade actualice antes todos los ports de los que depende la aplicación en cuestión.

    # portupgrade -R firefox

Si quiere usar packages en lugar de ports use el modificador `-P` flag. Con esta opción portupgrade busca en los directorios locales que aparezcan en `PKG_PATH` o descarga los packages desde un sitio remoto si es que no los encuentra en local. Si es imposible encontrar los packages ni en local ni en remoto portupgrade utilizará ports. Si no quiere usar ports pase lo que pase utilice el modificador `-PP`.

    # portupgrade -PP gnome2

Si quiere solamente descargar los distfiles (o los packages, usando `-P`) sin compilar ni instalar nada, use `-F`. Para más información consulte portupgrade(1).

### 4.5.4.3. Actualización de ports con portmanager

Portmanager es otra aplicación pensada para la actualización sencilla de ports instalados en el sistema. Puede encontrarla en `ports-mgmt/portmanager`:

    # cd /usr/ports/ports-mgmt/portmanager
    # make install clean

Puede actualizar todos los ports que tenga instalados con una sola orden:

    # portmanager -u

Si usa el modificador `-ui` se le pedirá confirmación a cada paso que Portmanager vaya a dar. Portmanager también puede usarse para instalar nuevos ports. A diferencia del habitual `make `install clean`` actualizará todos los ports que dependan antes de compilar e instalar ese port que queramos instalar.

    # portmanager x11/gnome2

Si aparecen problemas con las dependencias del port que quiere instalar puede usar Portmanager para recompilar todos ello en el orden correcto. Una vez que acabe el port que estaba dando problemas será también recompilado.

    # portmanager graphics/gimp -f

Para más información consulte portmanager(1).

### 4.5.4.4. Actualización de ports con portmaster

Portmaster es otra aplicación para actualizar ports. Portmaster se diseñó para que utilizara las herramientas del sistema «base» (es decir, no depende de otros ports) y utiliza la información que se almacena en el directorio `/var/db/pkg/` para determinar qué port es el que hay que actualizar. Puede encontrarlo en `ports-mgmt/portmaster`:

    # cd /usr/ports/ports-mgmt/portmaster
    # make install clean

Portmaster agrupa los ports en cuatro categorías:

- «Root ports» (no tienen dependencias, ningún port depende de ellos)

- «Trunk ports» (no tienen dependencias, otros ports dependen de ellos)

- «Branch ports» (tienen dependencias, otros ports dependen de ellos)

- «Leaf ports» (tienen dependencias, ningún port depende de ellos)

Puede ver una lista de los ports instalados y buscar actualizaciones para ellos usando el modificador `-L` :

    # portmaster -L
    ===>>> Root ports (No dependencies, not depended on)
    ===>>> ispell-3.2.06_18
    ===>>> screen-4.0.3
            ===>>> New version available: screen-4.0.3_1
    ===>>> tcpflow-0.21_1
    ===>>> 7 root ports
    ...
    ===>>> Branch ports (Have dependencies, are depended on)
    ===>>> apache-2.2.3
            ===>>> New version available: apache-2.2.8
    ...
    ===>>> Leaf ports (Have dependencies, not depended on)
    ===>>> automake-1.9.6_2
    ===>>> bash-3.1.17
            ===>>> New version available: bash-3.2.33
    ...
    ===>>> 32 leaf ports

    ===>>> 137 total installed ports
            ===>>> 83 have new versions available

Con la siguiente orden puede actualizar todos los ports del sistema:

    # portmaster -a

> Nota: Por omisión Portmaster guardará una copia de seguridad (un package) de cada port antes de borrarlo. Si la instalación de la nueva versión funciona Portmaster borrará el package. Si utiliza `-b` le dirá a Portmaster que no borre automáticamente el package. Si usa el modificador `-i` arrancará Portmaster en modo interactivo, lo que significa que le pedirá confirmación antes de actualizar cada port.

Si se encuentra con errores durante el proceso de actualización puede utilizar el modificador `-f` para actualizar o recompilar todos los ports:

    # portmaster -af

También puede usar Portmaster para instalar nuevos ports en el sistema, actualizando todas sus dependencias antes de compilar e instalar el nuevo port:

    # portmaster shells/bash

Por favor, consulte portmaster(8) para más información.

## 4.5.5. Los ports y el espacio en disco

Usar la Colección de Ports consume mucho espacio de disco según pasa el tiempo. Por culpa de la tendencia del árbol de ports a crecer sin parar le recomendamos que después de compilar e instalar sofware desde los ports recuerde limpiar los directorios temporales `work` mediante la orden `make `clean``. Puede limpiar de un plumazo los directorios temporales de toda la Colección de Ports con la siguiente orden:

    # portsclean -C

Rápidamente acumulará gran cantidad de viejas distribuciones de código en `distfiles`. Puede borrarlos a mano, pero también puede usar la siguiente orden para borrar todos los distfiles que no tengan relación con ningún port:

    # portsclean -D

También puede borrar todos los distfiles sin relación con ningún port instalado en el sistema:

    # portsclean -DD

> Nota: `portsclean` forma parte de la «suite» portupgrade.

No olvide borrar los ports instalados una vez que deja de necesitarlos. Hay una herramienta muy útil para ayudar a automatizar esta tarea: `ports-mgmt/pkg_cutleaves`.

Anterior | Inicio | Siguiente
Uso del sistema de packages | Subir | Después de instalar un port

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.