Luego de casi una década usando Ubuntu, hace un año pasé a Manjaro, distro hija de ArchLinux (tiempo atrás ArchLinux compartió espacio en mi ordenador junto a Ubuntu). Hoy en SWL-X estaremos hablando de pacman, el excelente gestor de paquetes presente en ArchLinux y descendientes (como Manjaro), texto que servirá a aquellos que van cayendo presurosamente en brazos de Manjaro, cual sirena encantadora.

Pacman ¿Y eso qué es?

De seguro muchos relacionan este término con el llamado Comecocos, el videojuego arcade creado por el diseñador de videojuegos Toru Iwatani de la empresa Namco. Pero en este caso no estamos hablado de videojuegos, sino de gestores de paquetes.

El Pacman que nos interesa hoy 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, descargar e instalar automáticamente todos los paquetes necesarios. En teoría, un usuario sólo necesita ejecutar un único comando para actualizar por completo el sistema. Además de ser utilizado en Arch Linux, Pacman también es utilizado en Frugalware, Chakra y otras distribuciones derivadas de ArchLinux.

El gestor de paquetes Pacman es, desde mi punto de vista, el punto más fuerte de Arch Linux y lo que permite a esta distro encajar perfectamente en el concepto de distro KISS. 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 Arch o propio de usuarios. 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 pueden 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.

man pacman
Si los usuarios noveles de estos tiempos no fueran tan holgazanes se darían cuenta que lo más importante y urgente que necesitan saber de pacman se encuentra a un man pacman de distancia

En las entrañas del comecoco

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. Información en profundidad sobre el archivo de configuración se puede encontrar en la wiki de Arch Linux .

Ahora veremos como configurar pacman a nuestras necesidades cambiando algunos parámetros en el archivo anteriormente mencionado (/etc/pacman.conf).
Evitar la actualización de un paquete

Para omitir la actualización de un paquete determinado, especifíquelo en la línea apropiada:

IgnorePkg=linux

Para ignorar la actualización de varios paquetes utilice una lista separada por espacios, o use líneas adicionales IgnorePkg.
Evitar la actualización de un grupo de paquetes

Al igual que con un paquete, es posible ignorar la actualización de un grupo de paquetes:

IgnoreGroup=gnome

Evitar la instalación de archivos en el sistema

Para ignorar siempre la instalación de archivos o carpetas específicos enumérelos con NoExtract. Por ejemplo, para evitar la instalación de units de systemd use ésto:

NoExtract=usr/lib/systemd/system/*

Repositorios

Es este tema una de las preguntas más frecuentes diversos foros por aquellos usuarios que comienzan en el universo ArchLinux. Ahora veremos como configurar nuestra lista de repositorios para que pacman sepa realmente donde buscar lo que le pedimos instalar.

Para especificar la ubicación de nuestros repositorios podemos volver a modificar el archivo /etc/pacman.conf o hacerlo en otro archivo como puede ser /etc/pacman.d/mirrorlist manteniendo siempre una única lista.

nano /etc/pacman.conf

#[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.

#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

#[multilib]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

# An example of a custom package repository.  See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

Usando repositorios locales

Como buen cubano sin acceso a Internet y sin la mínima esperanza de tenerlo a un precio humanamente pagable y accesible cuando se me de la real gana, solo me queda como opción pedir el gran favor de que un alma caritativa me copie los repositorios de Manjaro (o de Arch Linux si es tu caso) a un disco externo y llevármelos a casa. Repito lo que he dicho varias veces a Debianitas que quieren migrar a este otro lado: “En Arch Linux no hay sources.list”. Acá es más sencillo, en mi caso, basta con editar el archivo /etc/pacman.d/mirrorlist dejándolo de la siguiente manera:

Server = file:///media/MAIKEL_DAISY/MAIKEL/Repos/manjaro/stable/core/x86_64/
Server = file:///media/MAIKEL_DAISY/MAIKEL/Repos/manjaro/stable/community/x86_64/
Server = file:///media/MAIKEL_DAISY/MAIKEL/Repos/manjaro/stable/extra/x86_64/

Te explico: el parámetro file:// indica que será una ubicación local y no a través de un protocolo de red (http, https o ftp), luego iría la dirección donde tienes el repositorio, indicas si es stable, testing o unstable, la rama (core, community o extra) y la arquitectura (i684, x86_64). ¡Listo!. También puedes hacer lo mismo modificando el archivo /etc/pacman.conf

Seguridad de los paquetes

A partir de Pacman 4, se soporta firmas de los paquetes, que añaden una capa adicional de seguridad a los paquetes. La configuración por defecto, SigLevel = Required DatabaseOptional, permite la verificación de las firmas para todos los paquetes a nivel global: esto puede ser anulado por la línea SigLevel de cada repositorio de los mostrados más arriba.

Pacman se sirve de claves GnuPG siguiendo el modelo de la red de confianza para comprobar la autenticidad de los paquetes. Actualmente hay cinco Claves Maestras de firmado. Se usan por lo menos tres de esas Claves Maestras para firmar los paquetes de los desarrolladores oficiales y las subclaves de los usuarios de confianza o TUs —del inglés: trusted user— con las que estos firman sus paquetes. El usuario también posee una clave PGP exclusiva que se genera cuando se configura pacman-key. La clave del usuario queda enlazada por tanto a las cinco Claves Maestras.

Ejemplos de redes de confianza:

  • Paquetes propios: el usuario elabora el paquete y lo firma con su clave personal.
  • Paquetes no oficiales: paquetes creados y firmados por desarrolladores. El usuario usa su clave personal para firmar las de cada uno de esos desarrolladores.
  • Paquetes oficiales: paquetes creados y firmados por desarrolladores. Las claves de esos desarrolladores se firmaron previamente usando las claves maestras de Arch Linux. El usuario usa su clave para firmar las claves maestras y, por tanto, tiene plena confianza en los desarrolladores.

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

sudo pacman -S nombre_paquete1 nombre_paquete2 ...

A veces hay varias versiones de un paquete en diferentes repositorios, por ejemplo, [extra] y [testing]. Para instalar la versión precedente necesita especificar el nombre del repositorio:

sudo pacman -S extra/nombre_paquete

Instalar grupos de paquetes

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

sudo pacman -S gnome

Desde la propia terminal se 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:

sudo pacman -Sg gnome

Si un paquete en la lista ya está instalado en el sistema, éste se volverá a reinstalar, incluso si ya está actualizado, a menos que se utilice la opción --needed. Al instalar paquetes, no actualice la lista de paquetes sin actualizar al mismo tiempo el sistema (es decir, pacman -Sy nombre_paquete); de lo contrario, se pueden producir problemas de dependencia.

Desinstalar paquetes

Para eliminar un solo paquete, dejando todas sus dependencias instaladas:

sudo pacman -R nombre_paquete

Para eliminar un paquete y sus dependencias que no son usadas por ningún otro paquete instalado:

sudo pacman -Rs nombre_paquete

Para eliminar un paquete, sus dependencias y todos los paquetes que dependen de esas dependencias:

Advertencia: Esta operación es recursiva, y debe utilizarse con precaución, ya que puede eliminar muchos paquetes potencialmente necesarios.

sudo pacman -Rsc nombre_paquete

Para eliminar un paquete, el cual es requerido por otro paquete, sin quitar el paquete dependiente:

sudo pacman -Rdd nombre_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 backup utilice la opción -n:

sudo pacman -Rn nombre_paquete

Pacman no eliminará las configuraciones creadas de la aplicación misma (por ejemplo “dotfiles”  - archivos que comienzan con un punto -  en la carpeta home).

Actualizando paquetes

Pacman puede actualizar todos los paquetes del sistema con una sola orden. Esto proceso puede durar bastante tiempo dependiendo de cuánto tiempo haya estados sin actualizar el sistema. Esta orden puede sincronizar las bases de datos de los repositorios y actualizar los paquetes del sistema (excluyendo paquetes “locales” que no están en los repositorios configurados):

sudo pacman -Syu

En lugar de actualizar inmediatamente tan pronto como las actualizaciones están disponibles, debemos tener presente que siendo Arch un distribución rolling release, una actualización puede tener consecuencias imprevistas. Esto significa que no es prudente actualizar si, por ejemplo, se necesitará tener el sistema estable por motivos de trabajo. Más bien, actualizar durante el tiempo libre y estar preparados para hacer frente a cualquier problema que pueda surgir.Antes de actualizar, se recomienda visitar la home page de Arch Linux para comprobar las últimas noticias (o suscribirse al feed RSS): cuando la actualización requiera la intervención extraordinaria del usuario (más allá de lo que puede ser manejado simplemente siguiendo las instrucciones dadas por pacman), se hará un news post apropiado.Si se encuentra con problemas que no pueden ser resueltos por estas instrucciones, asegúrese de buscar en el foro. Es probable que otros hayan encontrado el mismo problema y hayan publicado instrucciones para resolverlo.

Consultar la base de datos de paquetes

Pacman puede consultar la base de datos local de los paquetes con la opción -Q. Les recomendamos pasarle la vista a:

pacman -Q --help

y puede consultar las bases de datos sincronizadas con la opción -S; véase:

pacman -S --help

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:

sudo pacman -Ss cadena1 cadena2 ...

Para buscar paquetes ya instalados:

 sudo pacman -Qs cadena1 cadena2 ...

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

sudo pacman -Si nombre_paquete

Para los paquetes instalados localmente:

sudo pacman -Qi nombre_paquete

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

sudo pacman -Qii nombre_paquete

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

sudo pacman -Ql nombre_paquete

Para los paquetes no instalados, utilice pkgfile.

También se puede consultar la base de datos para saber qué paquete pertenece a un determinado archivo del sistema:

pacman -Qo /ruta/al/nombre_del_archivo

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

pacman -Qdt

Para listar el árbol de dependencias de un paquete:

pactree nombre_paquete
Órdenes adicionales

Actualizar el sistema e instalar una lista de paquetes (una sola línea):

sudo pacman -Syu nombre_paquete1 nombre_paquete2 ...

Descargar un paquete sin instalarlo:

sudo  pacman -Sw nombre_paquete

Instale un paquete ‘local’ que no proviene de un repositorio remoto (por ejemplo, el paquete viene de AUR):

sudo pacman -U /ruta/al/paquete/nombre_paquete-versión.pkg.tar.xz

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

sudo pacman -U file://path/to/package/package_name-version.pkg.tar.xz

Instale un paquete ‘remoto’ (no de un repositorio indicado en los archivos de configuración de pacman):

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

Para limpiar la caché de los paquetes descargados que no han sido instalados (/var/cache/pacman/pkg):

Advertencia: Haga esto solo si está seguro de que los paquetes instalados son estables y que una eventual downgrade no será necesaria, ya que se eliminarán todas las versiones anteriores de la carpeta de la caché, dejando solo las versiones de los paquetes que están instalados actualmente. Tener la versión antigua en el sistema es muy útil para el caso de que una futura actualización cause roturas.

sudo pacman -Sc

Limpie completamente la caché de todos los paquetes:

Advertencia: Esta operación borra la memoria caché por completo de todos los paquetes. Esta método se considera una mala práctica, porque si alguna vez necesita ejecutar el downgrade, no será capaz de hacerlo desde la carpeta de la caché. Probablemente tendrá que usar el Arch Rollback Machine.

sudo  pacman -Scc

Sugerencia: Como una alternativa tanto a la modalidad -Sc como a -Scc, considere la posibilidad de usar paccache con pacman. Este script ofrece un mayor control sobre qué y cuántos paquetes serán eliminados. Ejecute paccache -h para obtener instrucciones.

Las actualizaciones parciales no son soportadas

Arch Linux es rolling release, y las nuevas versiones de bibliotecas serán añadidas a los repositorios. Los Desarrolladores y los Trusted Users recompilarán consecuentemente todos los paquetes de los repositorios. Si el sistema se ha instalado con paquetes locales (como paquetes de AUR), los usuarios necesitarán recompilar sus dependencias cuando modifiquen a nivel soname.

Esto significa que las actualizaciones parciales no están soportadas. No utilice pacman -Sy paquete o cualquier equivalente como pacman -Sy y luego pacman -S paquete. Actualice siempre el sistema antes de instalar un paquete, especialmente si previamente se ha ejecutado una sincronización con los repositorios. Tenga mucho cuidado al usar IgnorePkg y IgnoreGroup por la misma razón.

Si se ha ejecutado una actualización y los binarios están rotos porque no pueden encontrar las bibliotecas correctas, no pruebe a “arreglar” el problema simplemente creando enlaces simbólicos. Las bibliotecas recibidas modifican soname cuando no son compatibles con versiones anteriores. Un simple pacman -Syu a un mirror correctamente sincronizado solucionará el problema, siempre y cuando pacman no esté roto.

Nota general

Advertencia: Tenga cuidado al utilizar el parámetro --force ya que puede causar serios problemas si se usa incorrectamente. Es muy recomendable que únicamente se utilice esta opción cuando Arch news indica expresamente que lo haga.

Existen otros detalles a tomar en cuenta pero creo que para aquellos que recién comienzan en Arch Linux, este resumen tomado en parte de la wiki de Arch puede ser suficiente para comenzar a gestionar los paquetes a instalar, desinstalar y actualizar en nuestro sistema. Además lo visto anteriormente nos puede dar una idea de lo potente que puede resultar pacman si lo comparamos con otros métodos de gestiones de paquetes de otras distribuciones. En futuros artículos, si hago tiempo y la lógica y los lectores me muestran que vale la pena hacerlo, estaremos comparando los más populares sistemas de gestión de paquetes existentes en el ecosistema de distribuciones libres.





Acerca del Autor
Maikel Llamaret HerediaMaikel Llamaret Heredia: Creador y actual Mantenedor del Proyecto SWL-X. Desarrollador y diseñador Web. Cofundador de Web & Media Integrated Solutions. Con más de 10 años de experiencia en la administración de sistemas GNU/Linux. Actualmente uno de los administradores de la Web del Grupo de Usuarios de Tecnologías Libres en Cuba.

Blog Comments powered by Disqus.

Entrada Anterior Siguiente Entrada