Pacman (gestor de paquetes)

Pacman

Pacman ejecutándose en una terminal.
Información general
Tipo de programa Sistema de gestión de paquetes
Autor Judd Vinet
Desarrollador Pacman Development Team
Lanzamiento inicial 02 de 2002
Licencia GPL
Información técnica
Programado en C
Versiones
Última versión estable 6.1.0[1]( 4 de marzo de 2024 (8 meses y 30 días))
Última versión en pruebas 2.9.7-TEST19 de agosto de 2005
Enlaces

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[2]​ y Chakra.[3]

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.

Configuración

[editar]

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

[editar]

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.[4]​ El siguiente es un PKGBUILD para el paquete patch, incluido en la documentación Pacman a manera de ejemplo:[5]

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

[editar]
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

[editar]

Lo que sigue es una muestra de las operaciones que se pueden realizar con pacman.[6]

Instalar paquetes

[editar]

Instalar paquetes específicos

[editar]

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

[editar]

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

[editar]

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

[editar]

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

[editar]

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 opió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

[editar]

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

[editar]

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

[editar]

Pacman almacena los paquetes descargados en /var/cache/pacman/pkg/ y no elimina las versiones antiguas o desinstaladas automáticamente. Esto tiene algunas ventajas:

  1. Permite realizar downgrade de un paquete sin necesidad de recuperar la versión anterior por otros medios, como de Arch Linux Archive.
  2. 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 opcioines.

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

[editar]

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:

# pacman -U file://ruta/al/paquete/nombre_del_paquete-versión.pkg.tar.xz

Instalar un paquete 'remoto' (no de un repositorio indicado en los archivos de configuración de pacman):

# pacman -U http://www.ejemplo.com/repo/ejemplo.pkg.tar.xz

Para inhibir las acciones derivadas de -S, -U y -R, puede utilizarse -p.

Pacman siempre enumerará los paquetes que se van a instalar o eliminar y pedirá permiso antes de realizar la acción.

Motivo de la instalación

[editar]

La base de datos de pacman diferencia los paquetes instalados en dos grupos, de acuerdo a la razón por la que fueron instalados:

  • explicitly-installed: (instalado explícitamente), son aquellos paquetes que se instalaron con una orden genérica de pacman como -S o -U;
  • dependencies: (dependencias), son aquellos paquetes que, pese a que nunca se pasaron (en general) por una orden de instalación de pacman, fueron implícitamente instalados porque eran requeridos por otro paquete que fue explícitamente instalado.

Al instalar un paquete, es posible forzar su motivo de instalación a dependency con:

# pacman -S --asdeps nombre_del_paquete

La lista de paquetes explícitamente instalados se puede mostrar con pacman -Qe, mientras que la lista complementaria de dependencias se puede mostrar con pacman -Qd.

Para cambiar el motivo de la instalación de un paquete ya instalado, ejecute:

# pacman -D --asdeps nombre_del_paquete

Utilice --asexplicit para realizar la operación opuesta.

Buscar un paquete que contenga un archivo específico

[editar]

Sincronice la base de datos de archivos:

# pacman -Fy

Busque un paquete que contenga un archivo, por ejemplo:

$ pacman -Fs pacman
core/pacman 5.0.1-4
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.36-1
    usr/lib/xscreensaver/pacman

Configuración

[editar]

La configuración de pacman se encuentra en el archivo /etc/pacman.conf. Este es el archivo donde el usuario configura el programa para que funcione de la manera deseada.[6]

Opciones generales

[editar]

Comparar versiones antes de actualizar

[editar]

Para ver versiones antiguas y nuevas de paquetes disponibles, descomente la línea «VerbosePkgLists» en/etc/pacman.conf.La salida de pacman -Syu se verá así:

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB

Evitar la actualización de un paquete

[editar]

Para omitir la actualización de un paquete en particular cuando vaya a actualizar el sistema, debe especificarlo así:

IgnorePkg=linux

Para ignorar la actualización de varios paquetes, utilice una lista separada por espacios, o utilice líneas adicionales de IgnorePkg. También se pueden utilizar la sintaxis «glob patterns». Si desea omitir paquetes pero solo una vez, puede utilizar la opción --ignore en la línea de órdenes, esta vez con una lista separada por comas.

Aún será posible actualizar los paquetes ignorados usando pacman -S: en este caso pacman le recordará que los paquetes han sido incluidos en una declaración de IgnorePkg.

Evitar la actualización de un grupo de paquetes

[editar]

En Archlinux y derivadas no son posibles las actualizaciones parciales.

Al igual que con los paquetes, saltarse un grupo de paquetes completo también es posible:

IgnoreGroup=gnome

Evitar que un archivo sea actualizado

[editar]

Todos los archivos enumerados con una directivaNoUpgrade nunca se tocarán durante la instalación/actualización de un paquete, y los nuevos archivos se instalarán con una extensión .pacnew.

NoUpgrade=ruta/al/archivo

La ruta se refiere a los archivos del paquete. Por lo tanto, no debe incluirse la barra inclinada.

Evitar la instalación de archivos en el sistema

[editar]

Para ignorar siempre la instalación de archivos o directorios específicos, enumérelos en NoExtract. Por ejemplo, para evitar la instalación de unidades de systemd, proceda así:

NoExtract=usr/lib/systemd/system/*

Las reglas posteriores anulan las anteriores, pero se puede negar una regla añadiéndole el signo !.

Mantener varios archivos de configuración

[editar]

Si tiene varios archivos de configuración y quiere compartir las opciones entre dichas configuraciones, puede utilizar la declaración Include de los archivos de configuración, por ejemplo:

Include = /ruta/a/configuraciones/comunes

Donde el archivo /ruta/a/configuraciones/comunes contiene las mismas opciones para ambas configuraciones.

Seguridad de los paquetes

[editar]

Pacman soporta firmas de los paquetes, que añaden una capa adicional de seguridad a los mismos. La configuración por defecto, 1=SigLevel = Required DatabaseOptional, permite la verificación de las firmas para todos los paquetes a nivel global: esto puede ser anulado en la línea SigLevel de cada repositorio en cuestión.

Front ends

[editar]

Existen varios front ends para Pacman que permiten llevar a cabo las tareas de mantenimiento de paquetes de forma gráfica:

  • AppSet, un gestor de paquetes avanzado.
  • Chase, demonio de KDE que maneja actualizaciones mediante libapqm.
  • kpacupdate, Pacman update notification tool para el system tray de KDE.
  • pacman-notifier, simple icono en bandeja que avisa acerca de actualizaciones, también permite gestionar actualizaciones. Escrito en Ruby y GTK.
  • alunn, notificador en bandeja de actualizaciones y noticias de archlinux.org.
  • pacupdate, un applet de la bandeja de sistema, que notifica al usuario de actualizaciones disponibles.
  • pacsyu, un applet que utiliza python 2, pygtk y vte; y que permite revisar el sistema y actualizarlo con un solo clic, además de ser independiente del escritorio, actualmente el desarrollador está trabajando en soporte para paquetes de AUR sin necesidad de una herramienta como Yaourt o Packer.
  • octopi, estupendo gestor de paquetes gráfico escrito en Qt para Arch, Manjaro, Chakra, KaOS y ArchBang. Permite mostrar información, instalar y actualizar paquetes automáticamente desde los repositorios oficiales y AUR: http://octopiproject.wordpress.com/about/
  • pamac, herramienta simple pero poderosa para instalar paquetes individuales escrita en GTK muy similar a Octopi. Cuenta además con un simple gestor de actualizaciones y soporte para AUR.

Véase también

[editar]

Referencias

[editar]
  1. pacman-6.0.1, pacman-repo, 4-03-2024, consultado el 05-03-2024 .
  2. The Frugalware Developer Team (17 de marzo de 2007). «Package management basics». Frugalware 0.6 (Terminus) Documentation. Archivado desde el original el 18 de octubre de 2018. Consultado el 23 de septiembre de 2007. 
  3. «Chakra Project. Preguntas Frecuentes». Archivado desde el original el 27 de agosto de 2011. Consultado el 20 de junio de 2011. 
  4. «makepkg(8) Manual Page». Consultado el 24 de noviembre de 2012. 
  5. «PKGBUILD(5) Manual Page». Consultado el 24 de noviembre de 2012. 
  6. a b «pacman (Español)». ArchWiki. 15 de septiembre de 2019. Consultado el 27 de mayo de 2020. 

Enlaces externos

[editar]

Fuentes

[editar]

 Este artículo incorpora texto de un trabajo de contenido libre. Licenciado bajo GNU Free Documentation License 1.3 o posterior Declaración de la licencia: pacman (Español), ArchWiki. Para aprender como añadir texto de licencias libres a artículos de Wikipedia, véase Wikipedia:Agregar textos en licencia libre en Wikipedia. Para más información sobre cómo reutilizar texto de Wikipedia, véanse las condiciones de uso.