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

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

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 <[email protected]>.
Envíe sus preguntas sobre la documentación a <[email protected]>.