El árbol de ports de OpenBSD (derivado originalmente de FreeBSD) es un conjunto de Makefiles (uno por cada aplicación) el cual controla desde dónde y cómo obtener el código fuente del software, de cuál otro software depende, cómo modificar los fuentes para que se adapten a OpenBSD (en caso de que sea necesario), cómo configurarlo y compilarlo, cómo verificarlo y finalmente cómo instalarlo.



Además del Makefile, cada port contiene las instrucciones para crear el paquete una vez que la aplicación se ha compilado (PLIST), una descripción de la aplicación (DESCR), y el tamaño y checksums (distinfo). Toda esta información se mantiene en una jerarquía de directorios bajo /usr/ports, que contiene además tres subdirectorios especiales: distfiles/, donde el sistema de ports almacena los fuentes una vez descargados; infrastructure: el directorio principal de la infraestructura de ports, el cual contiene todos los scripts necesarios; packages: el cual contiene todos los paquetes binarios compilados por el sistema de ports.

El resto de los directorios conforman diferentes categorías de aplicaciones, las cuales pueden ser a su vez subdivididas en subcategorías.

Instalar el árbol de ports

De acuerdo al manual de OpenBSD, el árbol de ports está pensado para usuarios avanzados. OpenBSD recomienda utilizar paquetes binarios precompilados y evitar preguntas de principiante en las listas de correo del tipo "¿Cómo hago para que el árbol de ports funcione?", para eso está Linuxito ;)

Descargar y extraer el árbol de ports (por ejemplo, para la versión -release 5.9):

# cd && ftp ftp://openbsd.c3sl.ufpr.br/pub/OpenBSD/5.9/ports.tar.gz
# cd /usr/ && tar xzvf ~/ports.tar.gz

Actualizar el árbol de ports

Es imperativo mantener los sabores del sistema y árbol de ports sincronizados. Si se está utilizando la rama del sistema -stable, más vale que el árbol de ports también, de lo contrario pueden ocurrir todo tipo de errores.

Anteriormente expliqué cómo actualizar los fuentes de un sistema OpenBSD a la rama -stable. Esta rama (o "sabor" en la jerga OpenBSD), es la rama -release más parches de seguridad y mejoras de confiabilidad. El procedimiento para actualizar el árbol de ports a la rama -stable es similar.

Por ejemplo, para actualizar a la rama -stable 5.9, ejecutar:

# cd /usr/ports
# cvs up -rOPENBSD_5_9

Buscar un port

Al igual que en FreeBSD, es posible buscar ports utilizando el target "search" junto con la cadena "key=" y una palabra clave:

make search key=

Por ejemplo, si se desean buscar ports relacionados al software OpenVPN:

# cd /usr/ports/
# make search key=openvpn
Port:   openvpn-2.3.10
Path:   net/openvpn
Info:   easy-to-use, robust, and highly configurable VPN
Maint:  The OpenBSD ports mailing-list <ports@openbsd.org>
Index:  net security
L-deps: archivers/lzo2
B-deps: 
R-deps: 
Archs:  any

Port:   openvpn-auth-ldap-2.0.3p1
Path:   net/openvpn-auth-ldap
Info:   LDAP authentication plugin for OpenVPN 2.x
Maint:  Joel Sing <jsing@openbsd.org>
Index:  net security
L-deps: databases/openldap
B-deps: devel/re2c net/openvpn
R-deps: net/openvpn
Archs:  any

Port:   openvpn_bsdauth-7p0
Path:   net/openvpn_bsdauth
Info:   BSD Auth helper program for OpenVPN
Maint:  Felix Kronlage <fkr@openbsd.org>
Index:  net
L-deps: 
B-deps: net/openvpn
R-deps: net/openvpn
Archs:  any

Es posible obtener una salida más concisa filtrando la salida con grep -e "Port" -e "Info" -e "Path" -e "^$":

# make search key=openvpn | grep -e "Port" -e "Info" -e "Path" -e "^$" 
Port:   openvpn-2.3.10
Path:   net/openvpn
Info:   easy-to-use, robust, and highly configurable VPN

Port:   openvpn-auth-ldap-2.0.3p1
Path:   net/openvpn-auth-ldap
Info:   LDAP authentication plugin for OpenVPN 2.x

Port:   openvpn_bsdauth-7p0
Path:   net/openvpn_bsdauth
Info:   BSD Auth helper program for OpenVPN

Instalar un port

Cuando un usuario ejecuta make en el subdirectorio de un port específico, el sistema recorre de manera recursiva su árbol de dependencias, verifica cuáles están instaladas, compila e instala aquellas que faltan, y entonces continúa compilando el port deseado. Todo este proceso ocurre dentro de un directorio de trabajo que el port crea. Los ports nunca son instalados directamente en el sistema, sino que utilizan un directorio temporal. Todo lo que allí se compila e instala es luego conglomerado en un único paquete que queda almacenado dentro del subdirectorio packages/ dentro del árbol de ports. De esta forma, instalar un port realmente significa crear un paquete y luego instalar dicho paquete.

Si se desea instalar entonces el port "openvpn", el cual provee el software OpenVPN para crear redes privadas virtuales (VPNs), cambiar al subdirectorio correspondiente (de acuerdo al campo "Path:" en la salida de make search), y ejecutar make install:

# cd net/openvpn
# make install

Finalmente es recomendable limpiar el código fuente extraído y demás archivos que quedan luego del proceso de compilación ejecutando make clean=depends:

# make clean
===>  Cleaning for openvpn-2.3.10
# make clean=depends
===>  Cleaning for lzo2-2.09
===>  Cleaning for openvpn-2.3.10

make clean=depends limpia no sólo para el paquete sino también para todas las dependencias que fueron compiladas en el proceso.

Referencias

man ports

OpenBSD FAQ - Packages and Ports - Working with ports


Tal vez pueda interesarte


Compartí este artículo