Conociendo pacman, el gestor de paquetes de Arch Linux y descendientes

Saludos a los seguidores del Portal GUTL. Como he dicho en reiteradas ocasiones, junto a Ubuntu, una de las distribuciones GNU/Linux que me ha cautivado en el tiempo que llevo inmerso en el fascinante mundo Open Source es ArchLinux, una distribución que poco a poco fue sumando seguidores en la comunidad cubana de Software Libre, pero que es poco divulgada en los medios online de la intranet cubana. Con el tiempo, por la falta de acceso a repositorios (sin Internet se puede pero no es lo mismo) tuve que desistir de esta fabulosa distro, pero hace algunas semanas retomé esta relación de una manera medianamente incestuosa al aceptar una nueva relación con Manjaro, hija de ArchLinux. Hoy en GUTL estaremos hablando de pacman, el excelente gestor de paquetes presente en ArchLinux y descendientes, texto que servirá a aquellos que van cayendo presurosamente en brazos de Manjaro, cual sirena encantadora.

Como siempre hacemos en GUTL, lo primero es introducir al lector en el tema.

¿Qué es pacman?

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.

Pacman, el come cocos, realmente es un frontend de libalpm, verdadero sistema de administración de paquetes en Arch Linux.

Pacman, el come cocos, realmente es un frontend de libalpm, verdadero sistema de administración de paquetes en Arch Linux.

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.

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

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 en nuestra lista de correos en GUTL 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/i686/
Server = file:///media/MAIKEL_DAISY/MAIKEL/Repos/manjaro/stable/community/i686/
Server = file:///media/MAIKEL_DAISY/MAIKEL/Repos/manjaro/stable/extra/i686/

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!

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:

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

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

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

# pacman -Sg gnome

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

# pacman -R nombre_paquete

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

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

# pacman -Rsc nombre_paquete

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

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

# pacman -Rn nombre_paquete

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

# pacman -Syu

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

$ pacman -Ss cadena1 cadena2 ...

Para buscar paquetes ya instalados:

$ pacman -Qs cadena1 cadena2 ...

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

$ pacman -Si nombre_paquete

Para los paquetes instalados localmente:

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

$ pacman -Qii nombre_paquete

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

$ 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

Para listar todos los paquetes que dependen de un específico paquete, utilice whoneeds de pkgtools:

$ whoneeds nombre_paquete

Órdenes adicionales

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

# pacman -Syu nombre_paquete1 nombre_paquete2 ...

Descargar un paquete sin instalarlo:

# pacman -Sw nombre_paquete

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

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

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

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

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

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

¿Te resultó interesante? Compártelo ...



Maikel Llamaret Heredia

Publicado por Maikel Llamaret Heredia

https://swlx.info » Facebook » Twitter » Google+ » Linkedin » Forma parte de GUTL desde el 6 diciembre, 2011. Parte de la familia GUTL. Usuario de Tecnologías Libres desde hace varios años. Fiel a GNU/Linux y las filosofías del Software Libre y el Código Abierto. Linux User # 587451. Creador y actual mantenedor del Proyecto SWL-X. Freelancer dedicado al Desarrollo / Diseño Web y Marketing Online. Creador de Web & Media Integrated Solutions

Este artículo tiene 14 comentarios

  1. No nos convirtamos en un blog monotemático como a un tiempo le pasó a DesdeLinux!
    Btw: Voy a aprovechar un descaso que tengo en estos días para instalarle Manjaro a la PC del curro a ver que tal va.

    • Ni idea de por donde viene eso de «portal monotemático» pero bueno… igualmente yo tengo mi liveUSB con Bellatrix la hermana mayor de Daniela que es la «jevita» que esta rompiendole «el coco» a los «Manjaneros» 😉

        • Te quejas y te unes??? Oskar tas acabando… Jejejeje. Hasta a mi que no veo más allá de Debian me han dado deseos de probar Manjaro, veamos como consigo ISOs y repos…

          • Parafraseando el programa plastificado del canal educativo (Fuera de rosca) que tengo que soportar todos los sabados antes de Rockanroleando:

            …Un efecto irreversible que viene dado por el…

            Y ahi le sonamos nosotros la parte de «constante escuchar hablar mas y mas veces de esta distro que potabilizó los sistemas Arch para los mortales» 😉

          • No es el constante hablar, sino, la experiencia de usuario… Yo usé Arch por allá por el 2014 cuando el arenoso KzkgGaara me copió un iso y los repos, y lo instalé de palito con interfaz fea de consola únicamente y después le puse KDE, y para nada me molestó hacer el proceso, pero ahora veo que todos están migrando y quisiera probar a ver que sabe la felicidad, digo, Manjaro…

            Es curiosidad, jejeje, mayormente curiosidad…

            [offtopic]Cada vez que yo veo de refilón el programa televisivo que mencionas, por DIOS!!! Me doy cuenta del inmenso mal gusto que hay en el mundo…[/offtopic]

          • Yo no me uno, no hay ningún articulo mio sobre Manjaro, si habrán comentarios. Me refería a los artículos.

          • @Ozkar, pues nada, no escribo más. No puedo escribir sobre lo que no utilizo (estás seguro que solo se está escribiendo sobre Manjaro en GUTL????) Cuando usaba Ubuntu, escribía sobre Ubuntu, ahora escribo sobre la distro que utilizo, pero nada, siempre hay un pero, sencillo, ¿Por qué no escriben los que usan otra distro? Si molestan los posts de Manjaro, repito, paro de escribir y punto.
            Acá, si no escribimos los mismos, nadie escribe. Al menos estas semanas mis posts van a escasear porque no tengo tiempo, así que imagino comiencen a venir posts de otras cuestiones que no sea Manjaro (o se muere de asco el Portal sin posts, como siempre)
            OT: Voy a poner tu post de Atom en borrador para que lo termines….

          • A ver, no es para que te amarres la bola de hierro a los pies y te lances al mar. Y todos saben a lo que me refiero, no se me pongan brutos. Y no es una critica, solo una sugerencia. Yo también estoy usando Manjaro, y agradezco articulos sobre este, pero no quiero que pase lo que una vez en DL.

    • Este post no es sobre Manjaro, es sobre pacman y Arch Linux. si no quieren que GUTL sea monotemático, que otros , además de Maikel, escriban y ayuden a tirar el carretón hacia adelante…

  2. Yes, Manjaro is awesome! Yo tengo una Toshiba Satellite CL45-C4330 o algo así y solo una instalación de Manjaro 15.12 fue exitosa 100%. Ubuntu, Debian y LinuxMint se instalaban pero no booteaban. Luego encontré la forma de hacer que estas últimas bootearan pero igual me daban palo cuando actualizaba de los repos, etc. Raro, eh? Lo malo es que no tengo repo ni muchos conocimientos pero gracias a Maikel voy aprendiendo. Alguien en Cienfuegos City con iso y repos?

    • Hola Jonas… en Cfgos no tenemos repositorios de Manjaro (al menos no conozco a nadie del Gulcf que haya «clamado» tener uno) pero si llevas tu HDD a la dirección provincial (el palacio) y solicitas que te hagan el respectivo rsync desde la nacional puedes acceder a Daniella, la última versión de Manjaro que si esta disponible desde los repositorios nacionales de JCCE. La parte de los isos de Daniella ya es otra historia pero con un poco de perseverancia uno puede descargar los de Bellatrix, la versión anterior de Manjaro y hacer un pacman -Syu

      PD: como es lógico lo ideal seria que primero pidas que hagan el rsync y luego te pases (preferiblemente luego de par de días) a recoger los repos.

      • La parte de los isos de Daniella ya es otra historia

        Por enésima vez repito, ¿Es tan difícil que se eliminen los ISOs viejos de Manjaro y se coloquen en su lugar los actualizados? Hay una cantidad de desecho viejo inservible ocupando espacio en la Zona de descargas que da una terrible apariencia de abandono, pero bueno, no lo repito, a hacer magia con pacman para actualizar de Bellatrix a Daniella con Isos muy, muy antiguos…

Los comentarios están cerrados.