Cómo gestionar paquetes con el gestor de paquetes binarios pkg en FreeBSD 12
FreeBSD es un sistema operativo de código abierto similar a Unix que se utiliza para alimentar servidores modernos, ordenadores de sobremesa y plataformas integradas. Una gran comunidad lo ha desarrollado continuamente durante más de treinta años. Sus avanzadas funciones de red, seguridad y almacenamiento han convertido a FreeBSD en la plataforma elegida por muchos de los sitios web más concurridos y los dispositivos de red y almacenamiento integrados más extendidos. Gigantes como Netflix, Yahoo!, WhatsApp, BBC y Sony utilizan FreeBSD de alguna forma. El sistema FreeBSD no es tan conocido como Linux, principalmente porque Linux se ha centrado durante muchos años en el escritorio y el proyecto FreeBSD ha tendido a basarse más en los servidores.
En este tutorial, aprenderás sobre la gestión de paquetes binarios mediante pkg en el sistema operativo FreeBSD 12, que es la versión más reciente en el momento de escribir este artículo. La mayor parte del material también se aplica a la versión anterior FreeBSD 11.
Requisitos previos
- Sistema operativo FreeBSD 12
- Acceso a la cuenta de root o sudo
Puertos y paquetes
En el sistema FreeBSD, tenemos dos métodos diferentes para instalar software adicional: mediante ports y mediante preconfiguración paquetes que la mayoría de los usuarios elegirán para instalar y gestionar el software.
Ports es un sistema para construir software adicional en FreeBSD. Con los Ports empiezas con el código fuente en bruto proporcionado por el proveedor del software y construyes el software exactamente como lo necesitas, activando y desactivando las características que quieras.
Los paquetes son software precompilado, y son el resultado de construir ports, utilizando las opciones que el mantenedor del port cree que serán más útiles para la mayor variedad de personas, y agrupándolas en un paquete para hacerlas fácilmente instalables. Los paquetes te permiten instalar, desinstalar y actualizar rápidamente el software complementario. Son lo que la mayoría de los usuarios utilizarán. El sistema de empaquetado de FreeBSD se llama paquete, o simplemente pkg
. La información de los paquetes se almacena en una base de datos SQLite que puedes consultar sobre los datos de los paquetes.
Otra información importante sobre la gestión de paquetes de FreeBSD es la ubicación de los binarios de los paquetes. Los paquetes instalan los binarios en /usr/local
, y la mayoría de los archivos de configuración acaban en /usr/local/etc
en lugar de /etc
. Si vienes del mundo de Linux puede que esto te parezca muy inusual.
El gestor de paquetes de FreeBSD – pkg
pkg
es el sustituto de última generación de las herramientas tradicionales de gestión de paquetes de FreeBSD, y ofrece muchas características que hacen que el manejo de los paquetes binarios sea más rápido y sencillo. pkg
es la forma más sencilla de instalar software que no esté ya incluido en el sistema base de FreeBSD. pkg
es un único programa con muchos subcomandos. Utilizarás pkg
para casi todas las operaciones con paquetes, como instalar, eliminar e investigar paquetes. Todas las operaciones y cambios en los paquetes deben ejecutarse como root
o a través de sudo
.
Así es como instalarías el paquete acme.sh
en FreeBSD:
pkg install acme.sh
Puedes alimentar el comando con -y
para evitar la pregunta Proceed with this action? [y/N]:
al instalar el software o puedes configurar pkg
para que asuma siempre -y
en un archivo de configuración.
Para eliminar el paquete, utilizarías
pkg delete acme.sh
Utiliza pkg help
para una referencia rápida sobre los subcomandos disponibles, o el comando pkg help
para mostrar la página del manual de un subcomando concreto.
pkg help pkg
help install
pkg help delete
Instalación de pkg
La versión estándar de FreeBSD no viene con el gestor de paquetes pkg
instalado. Tienes que instalarlo. La primera vez que intentes instalar algún paquete pkg
te pedirá que instales la herramienta de gestión de paquetes. Por ejemplo, digamos que el primer paquete que quieres instalar en tu nuevo FreeBSD es wget
, y verás el siguiente aviso en tu terminal:
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Pulsarás Y y ENTER en tu teclado y se iniciará la instalación de la herramienta de gestión de paquetes. Una vez instalado el sistema de empaquetado, se instalará el paquete de software inicial que querías instalar (wget
).
También puedes instalar el sistema de empaquetado por sí mismo, sin añadir otros paquetes, ejecutando pkg bootstrap
, pero eso se usa raramente, quizá sólo en los scripts de configuración del sistema. pkg
sabe cómo instalarse y actualizarse a sí mismo y a otros paquetes.
Cómo buscar paquetes
Ahora que tienes un gestor de paquetes instalado, puedes instalar paquetes. Si eres administrador de sistemas, estarás familiarizado con el hecho de que los distintos sistemas operativos asignan nombres diferentes a las versiones empaquetadas del mismo software. Un paquete para el servidor web Apache en FreeBSD, por ejemplo, tendrá un nombre completamente diferente al del paquete Apache en diferentes distribuciones de Linux. Así que, antes de instalar nada, tendrás que averiguar cuál es el nombre del paquete que quieres instalar.
Lalista de aplicaciones disponibles en FreeBSD crece constantemente. El Proyecto FreeBSD ofrece varios conjuntos de paquetes en un repositorio público, y se actualizan cada pocos días. Actualmente hay más de 25.000 paquetes.
Por ejemplo, intentemos buscar el servidor web Apache.
pkg search apache
# apache24-2.4.38 Version 2.4.x of Apache web server
Encontrará todos los paquetes con apache
en su nombre. Esto devolverá una larga lista, pero lo que buscas es el paquete apache24
. Hay una breve descripción de cada paquete. Esto debería ayudarte a la hora de decidir qué paquete instalar. Pero no siempre es sencillo.
Algunas búsquedas pueden generar cientos de resultados. Tendrás que utilizar diferentes opciones de la línea de comandos para recortar o ajustar los resultados de la búsqueda. Consulta la página man pkg-search
o la página de ayuda pkg help search
para saber más sobre las opciones de búsqueda más comunes.
Si no estás seguro de si un paquete es lo que quieres, puedes utilizar el siguiente comando para buscar detalles del paquete:
pkg search -R apache24
# name: "apache24"
# origin: "www/apache24"
# version: "2.4.38"
# comment: "Version 2.4.x of Apache web server"
# maintainer: "[email protected]"
# www: "https://httpd.apache.org/"
# abi: "FreeBSD:12:amd64"
# arch: "freebsd:12:x86:64"
# prefix: "/usr/local"
# . . .
# . . .
Este comando te dará mucha información útil sobre el paquete.
Cómo instalar nuevos paquetes con pkg
Para instalar software utiliza el subcomando install
de pkg y el nombre de un paquete a instalar.
pkg install apache24
Cuando instalas paquetes con pkg install
, pkg
consulta el catálogo de paquetes local, y luego descarga el paquete solicitado del repositorio en pkg.FreeBSD.org
. Una vez instalado el paquete, se registra en una base de datos SQLite guardada en /var/db/pkg/local.sqlite
. Ten cuidado de no borrar este archivo, de lo contrario, tu sistema perderá la pista de los paquetes que se han instalado. Si el software tiene dependencias, pkg
las averiguará y las instalará junto con el paquete base. Los paquetes instalados como dependencias se llaman paquetes automáticos.
pkg
tiene la capacidad de simplemente descargar paquetes a través de Internet, guardarlos en una ubicación del disco y poder instalarlos en otro momento. Puedes utilizar el comando pkg fetch
para descargar el paquete sin instalarlo.
pkg fetch nginx
Este comando recuperará sólo el paquete Nginx sin sus dependencias. Puedes utilizar la bandera -d
para obtener todas las dependencias, así como el paquete nombrado.
pkg fetch -d nginx
Los paquetes se descargan en el directorio de caché de paquetes /var/cache/pkg
. Después de obtener los paquetes, pkg
los pegará en este directorio. Puedes listar los archivos para ver lo que contiene.
ls /var/cache/pkg
Ahora, para instalar un paquete descargado después de una obtención, ejecuta pkg install
normalmente. El proceso de instalación utiliza los archivos en caché en lugar de los descargados.
Con el tiempo, el directorio de la caché de paquetes puede crecer. El comando pkg clean
elimina los paquetes almacenados en caché que han sido sustituidos por versiones más nuevas, así como los archivos de paquetes que ya no están en el repositorio.
pkg clean
Si quieres eliminar todos los paquetes en caché, utiliza la bandera -a
.
pkg clean -a
Si quieres limpiar la caché de paquetes automáticamente después de cada instalación o actualización de paquetes, configura la opción pkg.conf
AUTOCLEAN
a true
.
Cómo configurar pkg
El programa pkg
está diseñado para ser muy flexible. Cada subcomando tiene un montón de opciones. Puedes establecer un comportamiento personalizado pero consistente para la mayoría de los programas con el archivo de configuración de todo el sistema para pkg
, ubicado en /usr/local/etc/pkg.conf
.
pkg.conf
El archivo contiene los valores predeterminados comentados para pkg
. Sólo con leer ese archivo, puedes aprender mucho sobre el comportamiento de pkg
. La configuración está escrita en lenguaje de configuración universal (UCL) y hay muchas opciones de configuración comentadas y bastantes alias. Las variables pueden establecerse con un número entero, una cadena o un valor booleano
#PKG_DBDIR = "/var/db/pkg";
#PKG_CACHEDIR = "/var/cache/pkg";
#PORTSDIR = "/usr/ports";
#INDEXDIR = "";
#INDEXFILE = "INDEX-10"; # Autogenerated
#HANDLE_RC_SCRIPTS = false;
#DEFAULT_ALWAYS_YES = false;
#ASSUME_ALWAYS_YES = false;
. . .
Puedes definir alias para los subcomandos de pkg
en pkg.conf
. En la parte inferior de pkg.conf
, encontrarás una sección denominada ALIAS
. Cuando te encuentres ejecutando repetidamente comandos complejos, deberías añadir alias.
Para más información sobre el formato del archivo y las opciones, puedes consultar la página man de pkg.conf(5)
.
man pkg.conf
Cómo ver la información sobre los paquetes instalados
Si olvidas qué paquetes has instalado en un sistema, puedes utilizar el comando pkg info
para obtener una lista completa del software instalado.
pkg info
# atk-2.28.1 GNOME accessibility toolkit (ATK)
# avahi-app-0.7_2 Service discovery on a local network
# ca_root_nss-3.42.1 Root certificate bundle from the Mozilla Project
# . . .
# . . .
Si quieres más información sobre un paquete instalado, utiliza pkg info
y el nombre del paquete. Esto muestra los detalles de la instalación del paquete en un informe amigable.
pkg info nginx
# nginx-1.14.2_3,2
# Name : nginx
# Version : 1.14.2_3,2
# . . .
# . . .
Puedes ver mucha información útil como la versión del software, la hora de instalación del software, la licencia del software, las banderas de tiempo de compilación, etc. Consulta la página man pkg-info
para conocer todos los detalles.
Cómo eliminar paquetes
Para eliminar o desinstalar paquetes binarios utiliza el subcomando pkg delete
. También está disponible como pkg remove
.
pkg delete nginx
# or
pkg remove nginx
Obtendrás una lista de paquetes a eliminar y el espacio que liberarán.
Si eliminas un paquete del que dependen otros paquetes, pkg
elimina también los paquetes dependientes.
Cómo bloquear paquetes
Puede haber un momento en el que quieras que un paquete de tu servidor no se actualice nunca. Cuando bloqueas un paquete, pkg
no lo actualizará, degradará, desinstalará o reinstalará. Aplica las mismas reglas a las dependencias del paquete y a los programas de los que depende.
Utiliza pkg lock
para bloquear un paquete.
pkg lock openssl
Este paquete openssl
está bloqueado.
Para listar todos los paquetes bloqueados actualmente en el sistema, utiliza la bandera -l
.
pkg lock -l
Para eliminar el bloqueo, utiliza el comando pkg unlock
.
pkg unlock openssl
Para bloquear o desbloquear todos los paquetes del sistema a la vez, utiliza la bandera -a
.
pkg lock -a
pkg unlock -a
Repositorios de paquetes
pkg
soporta los repositorios de paquetes, que son colecciones de paquetes con nombre. Puedes añadir, eliminar, activar y desactivar repositorios. Debes configurar cada repositorio en su propio archivo utilizando el formato UCL. Los repositorios oficiales de FreeBSD pertenecen al directorio /etc/pkg
. FreeBSD viene con el repositorio "FreeBSD" habilitado. Encontrarás su archivo de configuración en /etc/pkg/FreeBSD.conf
.
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
Puedes añadir y eliminar repositorios según sea necesario. Como /etc/pkg
está reservado para los repositorios oficiales de FreeBSD, necesitarás otro directorio. La ubicación tradicional es /usr/local/etc/pkg/repos
. Si quieres utilizar un directorio diferente, tendrás que establecer una ubicación en pkg.conf
con la opción REPO_DIRS
. El directorio del repositorio local no existe por defecto, así que tendrás que crearlo con mkdir -p /usr/local/etc/pkg/repos
. Pon tus propias configuraciones de repositorio en ese directorio
Ejemplo de comandos de pkg
En esta sección, enumeraré algunos de los subcomandos más utilizados que probablemente usarás al administrar el servidor FreeBSD.
# Installs a package without asking any questions
pkg install -y package
# Makes a backup of the local package database
pkg backup
# Lists all installed packages
pkg info
# Shows extended information for a package
pkg info package
# Searches package repository
pkg search -i package
# Shows packages with known security vulnerabilities
pkg audit -F
# Shows which package owns the named file
pkg which file
# Removes unused packages
pkg autoremove
# Uninstalls a package
pkg delete package
# Removes cached packages from /var/cache/pkg
pkg clean -ay
# Updates local copy of the package catalog
pkg update
# Upgrades installed packages to their latest version
pkg upgrade
# Checks the integrity of all your packages
pkg check -saq
# Verifies that a package's files are unaltered
pkg check -s nginx
# Shows what files came with the package
pkg info -l nginx
# Lists non-automatic packages
pkg prime-list
Conclusión
FreeBSD implementa dos tecnologías complementarias para la instalación de software de terceros: la Colección de Ports de FreeBSD, para instalar desde el código fuente, y los paquetes, para instalar desde binarios preconstruidos. Pero como FreeBSD está moviendo el sistema más decididamente hacia la gestión universal de paquetes, deberías intentar gestionar el software de terceros con pkg
en la medida de lo posible. Evita usar los ports a menos que el software que quieras no tenga una versión empaquetada o necesites personalizar las opciones de compilación.