Pacman es el gestor de paquetes de la distribución GNU/Linux Arch Linux. Fue desarrollado por el creador de Arch Linux, Judd Vinet. Pacman es capaz de resolver las dependencias, y descargar e instalar automáticamente todos los paquetes necesarios. En teoría, el usuario solo necesita ejecutar una única orden para actualizar por completo el sistema. Además de ser utilizado en Arch Linux, Pacman también es usado en Manjaro, EndeavourOS, Parabola, Frugalware y Chakra.
El gestor de paquetes Pacman es uno de los puntos fuertes de Arch Linux. Combina un simple paquete binario con un formato fácil de usar sistema de construcción (makepkg y ABS). Pacman permite administrar fácilmente los paquetes, ya sea desde los repositorios oficiales de Arch Linux, o desde repositorios propios de usuarios.
Pacman mantiene el sistema actualizado al día mediante la sincronización de la lista de paquetes con el servidor primario. Este modelo cliente/servidor también le permite descargar e instalar paquetes completos con todas las dependencias requeridas con un simple comando.
Pacman utiliza archivos empaquetados en tar y comprimidos en gzip o xz para todos los paquetes, cada uno de los cuales contiene binarios compilados. Los paquetes son descargados a través de FTP, también se puede utilizar HTTP y archivos lOcales, dependiendo de cóMo Esté configuRadO cada repositorio. Cumple con Linux Arch Build System (ABS) utilizados para crear los paquetes desde el código fuente.
Pacman está escrito en lenguaje de programación C y utiliza el formato tar de bsdtar para empaquetar.k
Configuración Para configurar Pacman solamente hay que editar el archivo /etc/pacman.conf, donde se pueden añadir repositorios y definir diversas opciones, pudiendo incluso crear repositorios propios.
Paquetes y sistema de compilación Los paquetes de Pacman son archivos tar comprimidos, que contienen metadatos y una estructura de directorios con los archivos. Los paquetes se construyen con makepkg, usando guiones de Bash, conocidos como PKGBUILDs. El siguiente es un PKGBUILD para el paquete patch, incluido en la documentación Pacman a manera de ejemplo:
pkgname=patch pkgver=2.5.4 pkgrel=3 pkgdesc="A utility to apply patch files to original sources" arch=('i686' 'x86_64') url="http://www.gnu.org/software/patch/patch.html" license=('GPL') groups=('base-devel') depends=('glibc' 'ed') source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) md5sums=('ee5ae84d115f051d87fcaaef3b4ae782')
build() { cd "$srcdir"/$pkgname-$pkgver ./configure --prefix=/usr make }
package() { cd "$srcdir"/$pkgname-$pkgver make prefix="$pkgdir"/usr install }
Operaciones más comunes con Pacman Operación Descripción pacman -S Instala un paquete pacman -Syu Actualiza la base de datos y todos los paquetes pacman -Syyu Fuerza una actualización completa de la base de datos y actualiza todos los paquetes pacman -Ss Permite buscar un paquete específico pacman -Sw Descarga el paquete pero no lo instala pacman -Sc Borra la caché de pacman pacman -Scc Borra paquetes guardados y limpia repositorios no utilizados pacman -R Elimina un paquete pacman -Rsu Elimina el paquete junto a las dependencias que no son utilizadas por otros paquetes pacman -Q Muestra una lista de los paquetes instalados pacman -Qdt Muestra los paquetes huérfanos
Utilización
Lo que sigue es una muestra de las operaciones que se pueden realizar con pacman.
Instalar paquetes
Instalar paquetes específicos
Para instalar o actualizar un solo paquete o lista de paquetes (incluyendo las dependencias), ejecute la orden siguiente:
# pacman -S nombre_del_paquete1 nombre_del_paquete2 ...
Para instalar una lista de paquetes con una expresión regular (regex):
# pacman -S $(pacman -Ssq expresion-regular_paquete)
A veces hay varias versiones de un paquete en diferentes repositorios (por ejemplo, extra y testing=. Para instalar la versión desde el repositorio extra en este ejemplo, el repositorio debe definirse delante del nombre del paquete:
# pacman -S extra/nombre_del_paquete
Para instalar un número de paquetes que comparten patrones similares en sus nombres uno puede usar la expansión de llaves. Por ejemplo:
# pacman -S plasma-{desktop,mediacenter,nm}
Esto se puede ampliar a los niveles que sean necesarios:
# pacman -S plasma-{workspace{,-wallpapers},pa}
Instalar grupos de paquetes
Algunos paquetes pertenecen a un grupo de paquetes], los cuales se pueden instalar simultáneamente. Por ejemplo, emitiendo la orden:
# pacman -S gnome
el prompt le pedirá que seleccione los paquetes del grupo gnome que desea instalar.
En algunas ocasiones, un grupo contiene una gran cantidad de paquetes, y puede que solo le interese, o no desee instalar, unos pocos de ellos. En lugar de tener que introducir todos los números excepto los que no desea, quizás sea más conveniente, para seleccionar o excluir paquetes o intervalos de paquetes, la siguiente sintaxis:
Enter a selection (default=all): 1-10 15
que seleccionará los paquetes del 1 al 10 y 15 para la instalación, o bien:
Enter a selection (default=all): ^5-8 ^2
que seleccionará todos los paquetes excepto 5 a 8 y 2 para la instalación.
Para ver qué paquetes pertenecen al grupo gnome, ejecute:
# pacman -Sg gnome
Si un paquete de la lista ya está instalado en el sistema, este se volverá a reinstalar, incluso si ya está actualizado, a menos que se utilice la opción --needed.
Desinstalar paquetes
Para eliminar un solo paquete, dejando todas sus dependencias instaladas:
# pacman -R nombre_del_paquete
Para eliminar un paquete y sus dependencias (siempre que no sean usadas por ningún otro paquete instalado):
# pacman -Rs nombre_del_paquete
Para eliminar un paquete, sus dependencias y todos los paquetes que dependen de esas dependencias:
Esta operación es recursiva, y debe utilizarse con precaución, ya que puede eliminar muchos paquetes potencialmente necesarios.
# pacman -Rsc nombre_del_paquete
Para eliminar un paquete, el cual es requerido por otro paquete, sin quitar el paquete dependiente (la siguiente operación puede romper un sistema y debe evitarse):
# pacman -Rdd nombre_del_paquete
Pacman guarda los archivos de configuración importantes al quitar ciertas aplicaciones y los renombra con la extensión: .pacsave. Para evitar la creación de estos archivos de respaldo utilice la opción -n:
# pacman -Rn nombre_del_paquete
Actualizar paquetes
Pacman puede actualizar todos los paquetes del sistema con una sola orden. Esto proceso puede durar bastante dependiendo de cuánto tiempo haya estado el sistema sin actualizar. La siguiente orden sincroniza las bases de datos de los repositorios y actualiza los paquetes del sistema (excluyendo los paquetes «locales» que no estén en los repositorios configurados):
# pacman -Syu
Consultar la base de datos de los paquetes
Pacman puede consultar la base de datos de los paquetes presentes en el sistema con la opción -Q, las bases de datos de los servidores remotos con la opción -S y los archivos presentes en dichas bases con la opción -F. Vea pacman -Q --help, pacman -S --help y pacman -F --help para conocer las subopciones respectivas de cada opción.
Pacman puede buscar paquetes en la base de datos, la búsqueda se realiza tanto por los nombres como por las descripciones de los paquetes:
$ pacman -Ss cadena1 cadena2 ...
Algunas veces -s construye una ERE (Expresión Regular Extendida) que puede causar resultados no deseados, por lo cual debe limitarse para que coincida con el nombre del paquete y no con la descripción u otro campo:
$ pacman -Ss '^vim-'
Para buscar paquetes ya instalados:
$ pacman -Qs cadena1 cadena2 ...
Para buscar nombres de archivos de paquetes en los paquetes de los servidores remotos:
$ pacman -Fs cadena1 cadena2 ...
Para mostrar información detallada acerca de un determinado paquete:
$ pacman -Si nombre_del_paquete
Para conocer los paquetes instalados en el sistema:
$ pacman -Qi nombre_del_paquete
Pasando la doble opción -i también se mostrará la lista de archivos de respaldo y sus estados de modificación:
$ pacman -Qii nombre_del_paquete
Para obtener una lista de los archivos instalados por un paquete:
$ pacman -Ql nombre_del_paquete
Para obtener un listado de los archivos instalados por un paquete recibido desde un servidor remoto:
$ pacman -Fl nombre_del_paquete
Para verificar la presencia de los archivos instalados por un paquete:
$ pacman -Qk nombre_del_paquete
Pasando la opción k dos veces, se realizará un chequeo más exhaustivo.
Para consultar la base de datos para saber a qué paquete pertenece un archivo del sistema de archivos:
$ pacman -Qo /ruta/al/nombre_del_archivo
Para consultar la base de datos para saber a qué paquete del servidor remoto pertenece un archivo:
$ pacman -Fo /ruta/al/nombre_del_archivo
Para listar todos los paquetes que no sean necesarios como dependencias (huérfanos):
$ pacman -Qdt
Para listar todos los paquetes explícitamente instalados y no requeridos como dependencias:
$ pacman -Qet
Pactree
Para ver el árbol de dependencias de un paquete:
$ pactree nombre_del_paquete
Para ver el árbol dependiente de un paquete, se utiliza la opción inversa -r a pactree.
Estructura de la base de datos
Las bases de datos de pacman se encuentran, normalmente, en /var/lib/pacman/sync. Para cada repositorio especificado en /etc/pacman.conf habrá su correspondiente archivo de base de datos ubicado allí. Los archivos de base de datos son archivos en formato tar-gzip que contienen un directorio para cada paquete.
El archivo depends enumera los paquetes de los que depende este paquete, mientras que el archivo desc contiene una descripción del paquete, como el tamaño del archivo y el hash MD5.
Limpiar la memoria caché de los paquetes
Pacman almacena los paquetes descargados en /var/cache/pacman/pkg/ y no elimina las versiones antiguas o desinstaladas automáticamente. Esto tiene algunas ventajas:
Permite realizar downgrade de un paquete sin necesidad de recuperar la versión anterior por otros medios, como de Arch Linux Archive. Un paquete que se ha desinstalado se puede reinstalar fácilmente directamente desde la carpeta caché, sin necesidad de una nueva descarga desde el repositorio.
Sin embargo, es necesario limpiar deliberadamente la caché periódicamente para evitar que la carpeta crezca indefinidamente en tamaño.
El script paccache, proporcionado dentro del paquete pacman-contrib, elimina todas las versiones en caché de los paquetes instalados y desinstalados, excepto los 3 más recientes, por defecto:
# paccache -r
También puede definir cuántas versiones recientes desea conservar. Para conservar solo una versión anterior:
# paccache -rk1
Añada la opción u para limitar la acción de paccache a los paquetes desinstalados. Por ejemplo, para eliminar todas las versiones en caché de paquetes desinstalados:
# paccache -ruk0
Véase paccache -h para más opciones.
Pacman también tiene algunas opciones integradas para limpiar el caché y los archivos de base de datos sobrantes de los repositorios que ya no figuran en el archivo de configuración de /etc/pacman.conf. Sin embargo, pacman no ofrece la posibilidad de mantener una serie de versiones anteriores y, por lo tanto, es más agresivo que las opciones predeterminadas de paccache.
Para eliminar todos los paquetes en caché que no están instalados actualmente, y la base de datos de sincronización no utilizada:
# pacman -Sc
pkgcacheclean y pacleaner (ambas del repositorio AUR) son dos alternativas más para limpiar la caché.
Órdenes adicionales
Descargar un paquete sin instalarlo:
# pacman -Sw nombre_del_paquete
Instalar un paquete «local» que no proviene de un repositorio remoto (por ejemplo, el paquete proviene de AUR):
# pacman -U /ruta/al/paquete/nombre_del_paquete-versión.pkg.tar.xz
Para mantener una copia del paquete local en la caché de pacman: