pacman (Español)
| Sumario |
|---|
| Pacman es el gestor de paquetes de Arch Linux. Los gestores de paquetes sirven para instalar, actualizar y eliminar software. Este artículo trata sobre la utilización básica y la solución de problemas más frecuentes. |
| Descripción |
| Los paquetes de Arch Linux son compilados por medio de makepkg y de un script específico para cada paquete (llamado PKGBUILD). Una vez creado, el paquete de software puede ser instalado y gestionado con pacman. Los PKGBUILDs para el software presente en los repositorios officiales estan disponibles del árbol de ABS; miles de paquetes más están disponibles del repositorio AUR (sin soporte oficial). |
| Relacionado |
| Downgrading Packages |
| Improve Pacman Performance |
| Pacman GUI Frontends |
| Pacman Rosetta |
| Pacman Tips |
| Pacman package signing |
| FAQ#Package Management |
| pacman-key |
| Pacnew and Pacsave Files |
| Recursos |
| libalpm(3) Manual Page |
| pacman(8) Manual Page |
| pacman.conf(5) Manual Page |
| repo-add(8) Manual Page |
El gestor de paquetes de pacman es una de las principales características distintivas de Arch Linux. Combina un simple formato de paquetes binarios con un fácil sistema de compilación de paquetes. El objetivo de pacman es hacer posible gestionar fácilmente los paquetes, si son de los repositorios oficiales de Arch o compilaciones propias del usuario.
Pacman mantiene el sistema actualizado mediante la sincronización de listas de paquetes con el servidor principal. Este modelo servidor/cliente también le permite descargar/instalar paquetes con un simple comando, completado con todas las dependencias necesarias.
Pacman está escrito en el lenguaje de programación C y utiliza para los paquetes el formato .pkg.tar.xz.
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. Información en profundidad sobre el archivo de configuración se puede encontrar en man pacman.conf.
Opciones Generales
Las opciones generales están en la sección [options]. Lea la página de man o en el pacman.conf predefinido para información adicional.
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
En esta sección se define qué repositorios utilizar, como se especifican en /etc/pacman.conf. Se puede especificar aquí directamente o incluirlo desde otro archivo (por ejemplo /etc/pacman.d/mirrorlist), siendo necesario mantener una sola lista.
/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
Seguridad de los paquetes
Pacman 4 soporta paquetes firmados, lo que añade un nivel adicional de seguridad para los paquetes. Para habilitar la verificación de la firma, consulte este artículo.
Uso
Lo que sigue es sólo una pequeña muestra de las operaciones que se pueden realizar con pacman. Para leer más ejemplos, consulte man pacman.
Instalar paquetes
Instalar paquetes específicos
Para instalar o actualizar un sólo paquete o lista de paquetes (incluyendo las dependencias), ejecute el comando 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
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:
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
Visite también https://www.archlinux.org/groups/ para ver qué grupos de paquetes están disponibles.
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:
# 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
Actualizar paquetes
Pacman puede actualizar todos los paquetes del sistema con un solo comando. Esto proceso puede durar bastante tiempo dependiendo de cuánto tiempo haya estados sin actualizar el sistema. Este comando 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
Pacman es una potente herramienta de gestión de paquetes, pero no está diseñado para gestionar y resolver automáticamente cada posible problema. Consulte The Arch Way (Español) si esto causa confusión. Los usuarios deben estar alerta y tomar la responsabilidad del mantenimiento de su propio sistema. Cuando se realiza una actualización del sistema, es esencial que los usuarios lean toda la información generada por la salida de pacman y usen el sentido común. Si un archivo de configuración modificado por el usuario debe ser actualizado por una nueva versión de un paquete, pacman creará un archivo .pacnew para evitar sobrescribir los ajustes modificados por el usuario. Pacman le pedirá, a continuación, al usuario que combine ambos archivos. Estos archivos requieren una intervención manual por parte del usuario y es una buena práctica hacerlo inmediatamente después de cada actualización o eliminación de paquetes. Véase Pacnew and Pacsave Files para más información.
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; véase:
$ 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
Comandos 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
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):
# pacman -Sc
Limpie el cache completamente de todos los paquetes:
# pacman -Scc
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.
Solución de problemas
Q: ¡Una actualización de un paquete XYZ me rompió el sistema!
El consejo más importante a recordar es que no actualice "a ciegas" el sistema. Lea siempre la lista de paquetes que vayan a ser actualizados. Preste atención si hay paquetes "sensibles" que van a ser actualizados (linux, xorg-server, y así sucesivamente). Si es así, por lo general, es una buena idea comprobar si hay alguna novedad en https://www.archlinux.org/ y buscar mensajes en el foro para ver si los usuarios están experimentando problemas como resultado de una actualización.
Si una actualización de paquetes se espera que (o se conoce por) causar problemas, los responsables del paquete se asegurarán de que pacman muestre un mensaje apropiado cuando el paquete se haya actualizado. Si experimenta problemas después de una actualización, compruebe la salida de pacman mirando el archivo del registro (/var/log/pacman.log).
Q: ¡Conozco un paquete de actualización para ABC que fue liberado, pero pacman dice que mi sistema está al día!
Q: Me sale el siguiente error en la actualización: "file exists in filesystem"!
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
Por qué está sucediendo esto: pacman ha detectado un conflicto de archivos, y por diseño, no sobrescribirá los archivos. Esta es una característica de diseño, no un defecto.
La cuestión es generalmente trivial de resolver. Una forma segura es comprobar primero si el archivo pertenece a otro paquete (pacman -Qo /ruta/al/archivo). Si el archivo es propiedad de otro paquete, reporte un informe de error. Si el archivo no es propiedad de otro paquete, cambie el nombre del archivo al que se refiere 'exists in filesystem' y vuelva a emitir el comando de actualización. Si todo va bien, el archivo puede ser eliminado.
Si ha instalado un programa manualmente sin usar pacman o usando una interfaz gráfica, hay que quitarlo y todos sus archivos y volver a instalarlo correctamente usando pacman.
Cada paquete instalado proporciona un archivo /var/lib/pacman/local/$package-$version/files que contiene metadatos acerca de este paquete. Si este archivo se corrompe -está vacío o falta- el resultado es un error por "file exists in filesystem" (el archivo existe en el sistema de archivos) al intentar actualizar el paquete. Este error normalmente se refiere a un solo paquete y, en vez de cambiar el nombre manualmente y más tarde la eliminación de todos los archivos que pertenecen al paquete en cuestión, puede ejecutar pacman -S --force $paquete para forzar a pacman a sobrescribir estos archivos.
pacman -Syu --force.Q: Obtengo un error cuando instalo un paquete: "not found in sync db"
pacman -Syy para forzar la actualización de todas las listas de paquetes.Q: Obtengo un error cuando se instala un paquete: "target not found"
pacman -Syy para forzar una actualización de todas las listas de paquetes. ambién podría ser que el repositorio que contiene el paquete no está habilitada en el sistema, por ejemplo, el paquete podría estar en el repositorio multilib, pero multilib no esté activado en el archivo pacman.conf.
Q: ¡Pacman me pregunta repetidamente por la actualización del mismo paquete!
/var/lib/pacman/local/, por ejemplo dos versiones de linux. pacman -Qi emite la versión correcta, pero pacman -Qu reconoce la versión anterior, por lo que intentará actualizar.
Solución: elimine la entrada en conflicto en /var/lib/pacman/local/.
Q: ¡Pacman se rompe durante una actualización!
- Arranque el sistema utilizando el soporte de instalación de Arch.
- Monte el sistema de ficheros raíz (root).
- Actualice la base de datos a través de pacman
pacman -Syy. - Vuelva a instalar el paquete roto a través de
pacman -r /ruta/a/root -S paquete.
Q: He instalado software usando "make install"; ¡estos archivos no pertenece a ningún paquete!
--force (por ejemplo (pacman -S --force). Véase Pacman Tips#Identify files not owned by any package para un script que busca en el sistema de archivos archivos huérfanos.
Q: Necesito un paquete con un archivo específico. ¿Cómo puedo saber lo que ofrece?
Q: ¡Pacman está completmente roto!. ¿Cómo puedo volver a reinstalarlo?
Q: Después de actualizar mi sistema, me sale el siguiente error al reiniciar: "unable to find root device", y mi sistema ya no puede arrancar.
--force de pacman puede ser una causa). Usted tiene dos opciones:
1. Pruebe la entrada Fallback.
- Una vez que se inicia el sistema, ejecute este comando (para el kernel linux de serie) ya sea desde la consola o desde un terminal para reconstruir la imagen initramfs:
-
# mkinitcpio -p linux
2. Si eso no funciona, a partir de la versión 2012 de Arch (CD/DVD o memoria USB), ejecute:
-
# mount /dev/sdxY /mnt #La partición raíz. # mount /dev/sdxZ /mnt/boot #Si utiliza una partición /boot. # arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
- Reinstalando el kernel (el paquete linux) automáticamente se volverá a generar la imagen initramfs con
mkinitcpio -p linux. No hay necesidad de hacer esto por separado.
- A continuación, se recomienda que ejecute
exit,umount /mnt/{boot,}yreboot
Q: Signature from "User <email@gmail.com>" is unknown trust, installation failed
archlinux-keyring, es decir, haciendo pacman-S archlinux-keyring.Q: Sigue saliendo el mensaje
- error: PackageName: signature from "User <email@archlinux.org>" is invalid
- error: failed to commit transaction (invalid or corrupted package (PGP signature))
- Errors occured, no packages were upgraded.
# hwclock -wantes de tratar de instalar/actualizar un paquete nuevo.
Q: Sigo recibiendo un error de "failed to commit transaction (invalid or corrupted package)"
*.part (paquetes descargados parcialmente) en /var/cache/pacman/pkg y elimínelos (a menudo causado por un uso personalizado de XferCommand en pacman.conf).Q: Me da un error cada vez que utilizo pacman diciendo 'warning: current locale is invalid; using default "C" locale'. ¿Qué debo hacer?
Q: ¿Cómo hacer que Pacman respete mi configuración del proxy?
$http_proxy, $ftp_proxy etc.) están establecidas. Si utiliza Pacman con sudo, necesita configurar sudo para pasar estas variables de entorno a Pacman.Q: ¿Cómo puedo volver a instalar todos los paquetes, manteniendo la información acerca de qué paquetes se han instalado de forma explícita y cúales como una dependencia?
sudo pacman -S $(pacman -Qeq) && sudo pacman -S --asdeps $(pacman -Qdq)