User Tools

Site Tools


guia_rapida_y_completa_de_pacman_arch

This is an old revision of the document!


Guía rápida y completa del gestor de paquetes pacman (Arch)

Paquetes Arch

Un paquete de Arch no es más que un archivo tar o 'tarball', comprimido usando xz, que contiene los siguientes archivos generados por makepkg:

Archivos binarios a instalar.

  • .PKGINFO: contiene todos los metadatos requeridos por pacman para tratar con paquetes, dependencias, etc.
  • .MTREE: contiene hashes y marcas de tiempo de los archivos que se incluyen en la base de datos local para que pacman pueda verificar la integridad del paquete.
  • .INSTALL: un archivo opcional utilizado para ejecutar comandos después de la fase de instalación/actualización/eliminación. (Este archivo sólo está presente si se especifica en el .PKGBUILD).
  • Changelog: un archivo opcional guardado por el responsable del paquete documentando los cambios del paquete. (No está presente en todos los paquetes.)

Actualizar sistema

# Actualizar sistema sin actualizar la información de los repositorios.
pacman -Su
 
# Actualizar sistema actualizando la base de datos de paquetes previamente (Uso recomendado).
pacman -Syu
pacman -Syu --ignore paquete # Ignorar un paquete en la actualización.

Evitar responder a preguntas de confirmación de pacman

Contestar siempre “yes/sí” a las preguntas de pacman (Are you sure? / ¿Continuar con la instalación? / … )

# ejemplo de actualización del sistema no interactivo.
pacman -Syu --noconfirm

Eliminar / Optimizar Cache

# Elimina de la cache todos los paquetes menos los actualmente instalados. (Impide un Rollback).
# Para borrados de cache (/var/cache/pacman/pkg/) selectivos usar "paccache".
# Permite también quitar repositorios no utilizados.
pacman -Sc 
pacman -Scc  # Solo en casos de necesidad (Ej. Disco duro lleno).
 
# Optimizar base de datos de pacman (fragmentación).
pacman-optimize

Eliminar paquetes huérfanos

# Paquetes huérfanos (Ya no son dependencia de ningún paquete).
pacman -Qtdq                # Lista paquetes huérfanos.
pacman -Rs $(pacman -Qtdq)  # Elimina paquetes huérfanos.

Instalar / Actualizar / Descargar un paquete

pacman -S paquete
 
# Instalar paquetes del repositorio testing (debe estar activado en /etc/pacman.conf).
pacman -S testing/paquete
 
# Instalar grupo de paquetes.
pacman -S gnome
 
# Descargar paquete sin instalarlo.
pacman -Sw paquete
 
# Instalar un paquete local o remoto desde una URL.
pacman -U /home/XX/paquete.tar.xz
pacman -U http://www.XXX/repo/paquete.tar.xz
 
# Reinstalar todos los paquetes excluyendo los que no se instalaron desde repositorios (pacman -Qmq).
pacman -S $(pacman -Qq | grep -v "$(pacman -Qmq)")
 
# Hacer un "downgrade" (desactualización) de una aplicación (NO para el Kernel).
cd /var/cache/pacman/pkg/
pacman -U paquete
# NOTA: Si tiene dependencias actualizadas hay que bajarlas de versión también.

Desinstalar paquetes

# Quitar un paquete con las dependencias que no están siendo usadas por otros paquetes.
pacman -Rs paquete
 
# Quitar un paquete con todas las dependencias.
pacman -Rcns paquete # Elimina dependencias más profundas (ser cuidadoso).
pacman -Rsc paquete  # Elimina dependencias
 
# Quitar un paquete con sus archivos de configuración.
pacman -Rn paquete
 
# Forzar desinstalación aunque el paquete sea dependencia importante de otra aplicación.
pacman -Rdd paquete

Buscar / Listar paquetes en los repositorios (-S)

# Buscar paquete para instalar (+ paquetes asociados).
pacman -Ss paquete
 
# Información sobre un paquete de los repositorios / Saber a qué repositorio pertenece un paquete.
pacman -Sii paquete  # Si se omite nombre de paquete listará toda la información de todos los paquetes.
 
# Listar grupos de paquetes / Listar aplicaciones pertenecientes a un grupo de paquetes.
pacman -Sg
pacman -Sg base qt  # Lista los paquetes de los grupos. 
 
# Listar todos los paquetes disponibles en un repositorio notificando si alguno está instalado.
pacman -Sl            # Lista todos los paquetes de todos los repositorios.
pacman -Sl community  # Lista los paquetes dentro del repositorio community.
 
# Lista los ficheros pertenecientes a paquetes de los repositorios.
pkgfile -l paquete   # Si hay varios paquetes diferentes se debe especificar (ej. extra/nginx, extra/nginx-mainline, community/gitlab)
 
# Lista paquetes que contengan un fichero o directorio con la cadena "vim" (extra/gvim
extra/vim, community/radare2)
pacman -Fs vim       # Buscando por nombre mostrando información como la versión y ficheros.
pkgfile vim          # Busca por nombre pero solo muestra el nombre de los paquetes.
 
# Listar dependencias de paquetes.
pactree nmap        # Muestra las dependencias de un paquete en forma de árbol.
pactree -r paquete  # Muestra todos los paquetes que depende del paquete propuesto.
pacman -Si paquete1 paquete2 | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u # Listar dependencias de una lista de paquetes.
NOTA: Atención al idioma de la terminal, en este ejemplo inglés.

Buscar a qué paquete pertenece un fichero (-F)

# Actualizar la base de datos.
pacman -Fy
 
# Buscar a qué paquete partenece un fichero.
pacman -F fstrim.service
core/util-linux 2.36-2 [instalado]
    usr/lib/systemd/system/fstrim.service
 
# Buscar por nombre de ficherp pero usando expresiones regulares (-x).
pacman -Fx fstrim.s*
core/util-linux 2.36-2 [instalado]
    usr/lib/systemd/system/fstrim.service
    usr/lib/systemd/system/fstrim.timer
    usr/share/man/man8/fstrim.8.gz
community/libguestfs 1.42.0-4
    usr/include/guestfs-gobject/optargs-fstrim.h
community/man-pages-de 2.16-2
    usr/share/man/de/man8/fstrim.8.gz

Buscar / Listar paquetes en local (-Q)

# Muestra los paquetes instalados.
pacman -Qs  # Lista todos los paquetes instalados.
pacmab -Qe  # Lista únicamente los paquetes instalados de manera explícita.
 
# Buscar qué paquete contiene un determinado fichero en los repositorios.
pacman -Fo /*/*/pacman  # Buscando por ruta.
 
# Información de un paquete.
pacman -Q         # Lista todos los paquetes instalados.
pacman -Qs nmap   # Solo muestra la descripción del paquete instalado.
pacman -Qii nmap  # Muestra más información del paquete instalado como modificaciones sobre archivos de respaldo (configuraciones de aplicaciones que no son borradas al desinstalar la aplicación).
 
pacman -Qiikk filesystem     # Muestra la misma información del comando anterior pero además indica qué cambios se realizaron sobre qué ficheros (El identificador de grupo GID / Los permisos / La fecha de modificación / tamaño no concuerda)
 
# NOTA: Este último comandos es muy útil para conocer qué ficheros no han sido todavía sustituidos por su nueva versión ".pacnew".
# También si se quiere averiguar qué permisos implementaba un archivo de manera predeterminada.
# Recordemos que esta información está solo disponible si se instaló la aplicación mediante paquetería (Información /var/lib/pacman/local/XXX/mtree)
 
# Consultas sobre ficheros instalados por los paquetes.
pacman -Qo        # Averiguar a qué paquete instalado pertenece un determinado fichero.
pacman -Ql        # Lista los ficheros de un paquete instalado en el sistema.
pacman -Qlq paquete | grep -v '/$' | xargs du -h | sort -h # Lo mismo pero ordenando y mostrando el tamaño de los ficheros.
 
# Buscar paquetes instalados manualmente (paquetes que no estén en la base de datos de sincronización, por ejemplo los instalados desde yaourt, aurman, etc.).
pacman -Qm
 
# Lista paquetes instalados (>= 1MiB) ordenados por tamaño.
pacman -Qi | grep 'Nombre\|Tamaño' | cut -d: -f2 | paste  - - | awk -F'\t' '{ print $2, "\t", $1, "\t", $3 }' | grep  MiB | sort -h
# NOTA: Atención al idioma de la terminal, en este ejemplo español.
 
# Muestra paquetes instalados que no son requeridos por ningún otro paquete.
pacman -Qqte
 
# Buscar ficheros de paquetes instalados que hayan sido modificados (normalmente son ficheros de configuración).
pacman -Qii | awk '/^MODIFIED/ {print $2}'

Clonar conjunto de paquetes instalados entre dos sistemas Arch

pacman -Qqe > pkglist.txt  # Copiar lista de paquetes del PC "A".
pacman -S - < pkglist.txt  # Instalar en "B" listado de paquetes del PC "A".

Historial de pacman

Todo los comandos de pacman se registran en el fichero de log /var/log/pacman.log, lo cual nos permite poder obtener cualquier tipo e información, incluso cuando se ejecutaron comandos con paquetes inexistentes.

# Mostrar comandos que realmente instalaron algo.
grep -B 1 "transaction started" /var/log/pacman.log | grep  "pacman -S"
 
# Buscar por una fecha concreta.
grep -i 2018-03-25 /var/log/pacman.log

Crear un paquete a partir de un PKGBUILD

wget https://aur.archlinux.org/.../PKGBUILD
makepkg
sudo pacman -U path-to-generated.tar.xz

Administrar mirrors de repositorios

URL con el estado de todos los mirrors: https://www.archlinux.org/mirrors/status/

Obtener todos los repositorios de un país, ej. “Spain”.

awk '/^## Spain$/{f=1}f==0{next}/^$/{exit}{print substr($0, 2)}' /etc/pacman.d/mirrorlist

Crear un fichero mirrorlist cuando no se tiene ninguno.

# Descargar la lista de todos los mirrors.
curl -o /etc/pacman.d/mirrorlist https://www.archlinux.org/mirrorlist/all/
 
# Se debe descomentar el/los mirror/s que se quieran utilizar primeramente.
pacman -Syu pacman-mirrorlist

NOTA: En cada actualización que se haga del sistema (pacman -Syu) suele renovarse la lista de mirrors de repositorios. Suele ser conveniente renombrar el nuevo fichero “/etc/pacman.d/mirrorlist.pacnew” a “/etc/pacman.d/mirrorlist”. Sin olvidar descomentar los servidores deseados posteriormente.

Paquetes de python en Arch

Los paquetes de python se pueden instalar a mano, desde pacman o desde pip. Suele darse el caso de que un determinado módulo no está en los repositorios oficiales y sí en los repositorios que usa Pip. No hay ninguna norma general y cada usuario administra sus paquetes como considera oportuno, aquí se dan a conocer algunos consejos que pueden ser de ayuda para algunos usuarios principiantes.

Cuando el modulo es usado por el usuario y no root, se puede instalar en el entorno del usuario ($HOME/.local/lib/pythonX.X/site-package). De esa forma nunca habrá un conflicto con el administrador de paquetes del sistema.

Mostrar directorios usados por python (para el entorno de usuario es configurable mediante la variable PYTHONUSERBASE).

python -m site
pip install --user packagename

Solventar problemas de llaves GPG al instalar aplicaciones con pacman

pacman-key --refresh-keys
pacman -S archlinux-keyring

Solucionar "Pacman está en uso, espere."

Si no está el proceso pacman activo, entonces se debe eliminar el fichero de bloqueo db.lck. A veces se generan este tipo de ficheros al haberse finalizado el proceso pacman de manera forzada.

rm /var/lib/pacman/db.lck

Solucionar "error: no se pudo realizar la operación (archivos en conflicto)"

La solución es renombrar / eliminar el / los ficheros problemáticos.

Causas.

  • Instalaciones de aplicaciones de manera manual.
  • Corrupción de la base de datos.
  • Por defecto, Arch no sobrescribe ficheros que no deberían estar en directorios de instalación destino. Pero se puede dar, entre otros casos, que la versión antigua creara un fichero o enlace simbólico después de instalarse, y la nueva incluya el fichero propiamente dicho en el paquete para su instalación. En esos casos Arch avisa de manera predeterminada.

Solucionar error al actualizar: "invalid or corrupted package (PGP signature)"

Ejemplo.

:: File /var/cache/pacman/pkg/libtiff-4.0.10-1-x86_64.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)).
pacman -Sy archlinux-keyring && pacman -Syyu

Enlaces de interés

guia_rapida_y_completa_de_pacman_arch.1610745916.txt.gz · Last modified: 2021/01/15 22:25 by busindre