Pacman (gestor de paquetes)
# Pacman (gestor de paquetes)

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.

## 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:

## 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:

Para instalar una lista de paquetes con una expresión regular (regex):

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:

Para instalar un número de paquetes que comparten patrones similares en sus nombres uno puede usar la expansión de llaves. Por ejemplo:

Esto se puede ampliar a los niveles que sean necesarios:

**Instalar grupos de paquetes**

Algunos paquetes pertenecen a un grupo de paquetes], los cuales se pueden instalar simultáneamente. Por ejemplo, emitiendo la orden:

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:

que seleccionará los paquetes del 1 al 10 y 15 para la instalación, o bien:

que seleccionará todos los paquetes excepto 5 a 8 y 2 para la instalación.

Para ver qué paquetes pertenecen al grupo gnome, ejecute:

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:

Para eliminar un paquete y sus dependencias (siempre que no sean usadas por ningún otro paquete instalado):

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.

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 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:

### 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):

### 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 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:

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:

Para buscar paquetes ya instalados:

Para buscar nombres de archivos de paquetes en los paquetes de los servidores remotos:

Para mostrar información detallada acerca de un determinado paquete:

Para conocer los paquetes instalados en el sistema:

Pasando la doble opción -i también se mostrará la lista de archivos de respaldo y sus estados de modificación:

Para obtener una lista de los archivos instalados por un paquete:

Para obtener un listado de los archivos instalados por un paquete recibido desde un servidor remoto:

Para verificar la presencia de los archivos instalados por un 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:

Para consultar la base de datos para saber a qué paquete del servidor remoto pertenece un archivo:

Para listar todos los paquetes que no sean necesarios como dependencias (huérfanos):

Para listar todos los paquetes explícitamente instalados y no requeridos como dependencias:

**Pactree**

Para ver el árbol de dependencias de un 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:

También puede definir cuántas versiones recientes desea conservar. Para conservar solo una versión anterior:

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:

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:

pkgcacheclean y pacleaner (ambas del repositorio AUR) son dos alternativas más para limpiar la caché.

### Órdenes adicionales

Descargar un paquete sin instalarlo:

Instalar un paquete «local» que no proviene de un repositorio remoto (por ejemplo, el paquete proviene de AUR):

Para mantener una copia del paquete local en la caché de pacman:

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

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

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:

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:

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

### Buscar un paquete que contenga un archivo específico

Sincronice la base de datos de archivos:

Busque un paquete que contenga un archivo, por ejemplo:

## Configuración

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.

### Opciones generales

**Comparar versiones antes de actualizar**

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í:

**Evitar la actualización de un paquete**

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

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**

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:

**Evitar que un archivo sea actualizado**

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.

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**

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í:

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

**Mantener varios archivos de configuración**

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:

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

**Seguridad de los paquetes**

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

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.
