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

  3. Seleccione la opción Distributions, y pulse Enter.

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

  7. Pulse X para salir de sysinstall.

El método alternativo para obtener y mantener actualizada la Colección de Ports es mediante CVSup. Lea el fichero de ports para CVSup que encontrará en /usr/share/examples/cvsup/ports-supfile. Consulte el capítulo Usar CVSup (Sección 28.2) para más información sobre cómo usar CVSup y el fichero mencionado.

Mediante CVSup

Si quiere un métido rápido para obtener la Colección de Ports use CVSup. Si quiere mantener su árbol de ports actualizado o bien saber más sobre CVSup lea los documentos mencionados previamente.

  1. Instale el port net/cvsup. Consulte Instalación de CVSup (Sección 28.2.1) para más información.

  2. Como usuario root copie el fichero /usr/share/examples/cvsup/ports-supfile a una nueva ubicación, por ejemplo al directorio /root o bien su propio directorio home.

  3. Edite el fichero ports-supfile.

  4. Cambie la parte “CHANGE_THIS” de CHANGE_THIS.FreeBSD.org por un servidor CVSup que le sea cercano. Consulte el el capítulo Mirrors de CVSup (Sección 28.2.2), donde encontrará una lista completa de réplicas de FreeBSD

  5. Ejecute cvsup:

    # cvsup -g -L 2 /root/ports-supfile
    
  6. Cuando ejecute esto se descargarán y aplicarán las actualizaciones de la Colección de Ports. Este proceso no incluye la recompilación de los ports de su sistema.

4.5.2. Instalación de ports

Al hablar de la Colección de Ports lo primero que debemos explicar es a qué nos referimos cuando hablamos de un “esqueleto” (skeleton). En sí mismo, un esqueleto de port 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 de construcción desde el 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.

AvisoAntes 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á 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).

4.5.2.1. Instalación de ports desde un CDROM

Los CDROM oficiales del Proyecto FreeBSD ya no incluyen distfiles. Ocupan mucho espacio y se aprovecha mucho mejor si se incluyen paquetes precompilados. Los CDROM del PowerPak sí incluyen distfiles; puede comprarlos en distribuidores como FreeBSD Mall. A lo largo de esta sección asumiremos que tiene un juego de CDROM de FreeBSD.

Inserte su CDROM en la unidad correspondiente. Móntelo en /cdrom. (Si utiliza un punto de montaje diferente configure la variable de make CD_MOUNTPTS). Para comenzar diríjase al directorio donde esté el port que quiere instalar:

# cd /usr/ports/sysutils/lsof

Una vez en el directorio lsof verá el esqueleto del port. El siguiente paso es compilar o “construir” el port. Para ello simplemente tecleamos make en la línea de ordenes. Hecho esto verá algo similar a lo siguiente:

# 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
...
[salida de la descompresión cortada]
...
>> 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
...
[salida de configure cortada]
...
===>  Building for lsof-4.57
...
[salida de la compilación cortada]
...
#

Observe que una vez que ha terminado la compilación regresará a la línea de órdenes. El siguiente paso es instalar el port. Debemos añadir una palabra a la orden make: install:

# make install
===>  Installing for lsof-4.57
...
[salida de la instalación cortada]
...
===>   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 regrese a la línea de órdenes podrá ejecutar la aplicación que acaba de instalar. Dado que el programa lsof se ejecuta con privilegios vemos una advertencia de seguridad. Debe tener muy en cuenta cualquier aviso que aparezca durante la compilación e instalación.

Nota: Puede ahorrar un paso ejecutando make install en una sola orden en lugar de ejecutar make y make install en dos pasos diferentes.

Nota: Algunas shells cuentan con una caché de órdenes disponibles en los directorios que aparecen en la variable de entorno PATH para agilizar las operaciones de búsqueda de los ejecutables de estos ficheros. Si usa alguna de estas shells teclée rehash una vez que ha instalado el port para poder usar su nuevo programa. Esta orden funciona con shells como tcsh. Para shells como sh ejecute shells/bash has -r. Consulte la documentación de su shell para más información.

Nota: Por favor, tenga en cuenta que algunos ports tienen licencias que no permiten su inclusión en el CDROM. Probablemente es a consecuencia de un registro que se debe hacer antes de la descarga, que no esté permitida la redistribución en CDROM o quizás se deba a otra razón. Si quiere instalar un port que no está en el CDROM necesitará conexión a Internet Internet (consulte la siguiente sección).

4.5.2.2. Instalación de ports desde Internet

Como en la sección anterior, en esta sección se asume que tiene configurada su conexión a Internet. Si no es así deberá llevar a cabo la instalación mediante CDROM, o ponga usted una copia del distfile en /usr/ports/distfiles manualmente.

Instalar un port desde Internet se hace exactamente igual que cuando se hace desde un CDROM. La única diferencia entre estos dos métodos es que el fichero distfile se descarga desde Internet.

Los pasos son idénticos:

# 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
...
[salida de la descompresión del fichero cortada]
...
>> 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
...
[salida de la configuración cortada]
...
===>  Building for lsof-4.57
...
[salida de la compilación cortada]
...
===>  Installing for lsof-4.57
...
[salida de la instalación cortada]
...
===>   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.
#

Como puede ver la única diferencia es la línea que indica desde dónde se descarga el código.

El sistema de ports utiliza fetch(1) para descargar los ficheros, y usa distintas varibles de entorno como FTP_PASSIVE_MODE, FTP_PROXY, y FTP_PASSWORD. Puede ser necesario que modifique una o más de estas variables si está detrás de un cortafuegos o de un proxy FTP/HTTP. Consulte la página de manual de fetch(3) si quiere ver una lista completa de las opciones.

La opción make fetch facilita la tarea a los usuarios que no pueden estar permanentemente conectados. Ejecute la orden en /usr/ports y los ficheros necesarios se descargarán automáticamente. Esta orden funciona también en los subdirectorios, por ejemplo en /usr/ports/net. Si el port depende de bibliotecas o de otros ports la orden no descargará los distfiles de las dependencias. Reemplace fetch por fetch-recursive si quiere descargar también las dependencias del port.

Nota: Es posible compilar todos los ports de una categoria, o incluso todos si eso es lo que quiere, ejecutando la orden make en /usr/ports, igual que hemos visto en makefetch Tenga en cuenta que puede resultar peligroso, ya que algunos ports no pueden pueden coexistir. Por otra parte puede darse que algunos ports instalen dos ficheros distintos con el mismo nombre.

Puede darse el caso de que necesite descargar los tarballs de un sitio que no sea MASTER_SITES (cuyo valor indica el repositorio desde el que se descargan los ficheros). Para cambiar el valor de la opción MASTER_SITES haga lo siguiente:

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

En este ejemplo cambiamos la opción MASTER_SITES a ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.

Algunos ports permiten (o requieren) que se faciliten opciones de compilación que habiliten o deshabiliten componentes de la aplicación que no son necesarios, algunas opciones de seguridad o de otro tipo. www/mozilla, security/gpgme y mail/sylpheed-claws son casos típicos. Cuando existan estas opciones verá un mensaje al respecto.

4.5.2.3. Cómo reubicar el directorio de los ports

Algunas veces es útil (o imprescindible) usar diferentes distfiles y directorios de ports. Las variables PORTSDIR y PREFIX le ayudará con esto. Veamos un ejemplo:

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

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

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

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

Y claro,

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

Combinará los dos (es demasiado largo para escribirlo completamente pero debería darle una idea de cómo se haría).

También puede cambiar estas variables como parte su entorno. En el manual de su shell encontrará cómo hacerlo.

4.5.2.4. Uso de imake

Algunos ports que usan imake (un componente del Sistema X Window) no funcionan correctamente con PREFIX, e insistirán en instalar 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.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 por 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. Una vez ubicados en el directorio adecuado estamos listos para eliminar lsof. Para ello usaremos la orden make deinstall:

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

Como ve, ha sido muy fácil. Ha eliminado lsof de su sistema. Si quiere reinstalarlo ejecute make reinstall en el directorio /usr/ports/sysutils/lsof.

Las órdenes make deinstall y make reinstall no funcionan si ejecuta la orden make clean. Si quiere desintalar un port después de ejecutar make clean deberá usar la orden pkg_delete(1) como se describe en la sección de Paquetes del Handbook.

4.5.4. Los ports y el espacio de 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 en tamaño le recomendamos que después de compilar e instalar sofware desde los ports recuerde limpiar los directorios temporales work mediante la orden make clean. Esto eliminará el directorio work que queda después de compilar e instalar un port. También puede eliminar los ficheros de código del directorio distfiles y los ports instalados si lo estima conveniente.

Algunos usuarios limitan las categorías de ports disponibles configurando el fichero refuse. De esta forma, cuando ejecutan la aplicación CVSup, no descargará los ficheros de esas categoría. Puede encontrar más información sobre el fichero refuse en la Sección 28.2.2.1.

4.5.5. Cómo actualizar los ports

Nota: Una vez que actualice su colección de ports (y antes de intentar actualizar ningún port) debería leer el fichero /usr/ports/UPDATING. Este fichero describe varios problemas que los usuarios pueden encontrarse y los pasos adicionales para sortearlos al actualizar un port.

Mantener los ports actualizados puede ser una tarea tediosa. Por ejemplo, para actualizar un port debe ir al directorio del port, compilar el port, desinstalar el port viejo, instalar el port nuevo y por último limpiar el directorio después de compilarlo. Imagine hacer esto con cinco ports: tedioso ¿verdad?. Esto era un gran problema para los administradores, pero ahora tenemos herramientas para arreglarlo. Por ejemplo, la herramienta sysutils/portupgrade se hará cargo de todo esto. Instáleo como cualquier otro port mediante la orden make install clean.

Ahora debe crear la base de datos con la orden pkgdb -F. Esto leerá la lista de ports instalados y creará el fichero de base de datos en el directorio /var/db/pkg. Cuando ejecute la orden portupgrade -a, leerá esa base de datos y el fichero INDEX de los ports. Por último, portupgrade empezará a descargar, compilar, instalar y limpiar los ports que se han actualizado. portupgrade incluye muchas opciones para diferentes necesidades, las más importantes se exponen más adelante.

Si quiere actualizar una sola aplicación y no la base de datos completa use la orden portupgrade pkgname, incluyendo el parametro -r si portupgrade debe actualizar también todos los paquetes que dependan de este paquete, y -R si quiere que actualice todos los paquetes de los que depende esta aplicación.

Si prefiere usar paquetes en vez de ports en la instalación use el parámetro -P. Con esta opción portupgrade busca en los directorios locales que hay en PKG_PATH, o descarga los paquetes desde internet si no los encuentra en el sistema. Si no lo encuentra en local ni en el servidor remoto portupgrade usará los ports. Para evitar que use los ports especifique -PP.

Si solo quiere descargar los distfiles (o paquetes si usa -P) sin compilar o instalar nada, use -F. Para más información consulte portupgrade(1).

Nota: Es importante actualizar la base de datos de paquetes regularmente mediante la orden pkgdb -F; De este modo corregirá inconsistencias, sobre todo cuando portupgrade se lo pida. No cancele portupgrade mientras esté actualizando la base de datos de paquetes puesto que dejaría una base de datos inconsistente.

Hay más herramientas que pueden hacer todo esto; curiosée un poco en el directorio ports/sysutils, a ver qué encuentra.

Éste y otros documentos pueden obtenerse en ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para preguntas acerca de FreeBSD, leer la documentación antes de contactar con la lista <questions@FreeBSD.org>.
Para preguntas acerca de esta documentación, e-mail a <doc@FreeBSD.org>.