This is an old revision of the document!
Table of Contents
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
- Visualizar paquetes instalados por orden de instalación: Leer
- Aplicaciones para instalar paquetes de AUR: https://wiki.archlinux.org/index.php/AUR_helpers