Cómo arreglar paquetes rotos en Linux

Paquetes rotos de Linux

Los gestores de paquetes de Linux, como Apt y DNF, son extremadamente potentes e intuitivos, pero eso no significa que las cosas no puedan salir mal. Ocasionalmente, una instalación de paquete falla y te quedas con los pedazos. Los gestores de paquetes tienen la capacidad de arreglar paquetes rotos y omitir actualizaciones rotas para que tu sistema vuelva a funcionar y evitar problemas en el futuro.

Este artículo cubre cómo arreglar paquetes rotos en Linux. Estas soluciones deberían ayudarte a salir del atolladero en la mayoría de los casos.

Tabla de Contenidos

  • Arreglar paquetes rotos en Ubuntu/Mint/Debian
  • Arreglar paquetes rotos en Fedora/CentOS/RHEL
  • Arreglar paquetes rotos en Arch
  • Preguntas Frecuentes

Arreglar paquetes rotos en Ubuntu/Mint/Debian

Apt tiene un par de banderas para arreglar dependencias faltantes o paquetes que se rompieron por alguna razón durante la instalación. Un uso común aquí sería instalar un .deb de terceros y descubrir que tenía dependencias que no conocías. Esas dependencias probablemente no se instalarán por sí solas, y dpkg se quejará de que no puede resolver las dependencias. En cualquier caso, puedes intentar los siguientes pasos:

Nota: aprende cómo funciona Apt antes de intentar cualquiera de las soluciones a continuación.

Paquetes de Linux arreglar faltantes

  1. Ejecuta una actualización para asegurarte de que no hay versiones más nuevas de los paquetes requeridos:
sudo apt --fix-missing update
  1. Fuerza a Apt a buscar y corregir cualquier dependencia faltante o paquetes rotos cuando intentes instalar nuevamente el paquete problemático. Esto instalará cualquier dependencia faltante y reparará las instalaciones existentes:
sudo apt install-f

Arreglar problemas de configuración de DPKG

Otro lugar donde puede aparecer un error en las instalaciones de paquetes es el proceso de configuración. Detrás de escena, dpkg se encarga de esta parte, así que cuando un paquete falla durante la configuración, dpkg es la herramienta para arreglarlo.

Paquetes de Linux configurar dpkg

  1. Comienza intentando forzar a dpkg a reconfigurar cualquier paquete roto o parcialmente configurado:
sudodpkg--configure-a
  1. Si eso no resuelve el problema, toma un enfoque más contundente. Comienza listando cualquier paquete que dpkg haya marcado como que requiere una reinstalación:
sudodpkg-l|grep ^..r

El comando anterior te mostrará los paquetes que causan problemas. Para este siguiente paso, verifica y asegúrate de que los paquetes marcados para reinstalación estén realmente rotos. Haz un sudo apt reinstall y presta atención a qué paquetes fallan al reinstalar.

  1. Para cada paquete que falle al reinstalar, obtén el nombre y elimina forzosamente el paquete roto:
sudodpkg--remove--force-remove-reinstreq[package name]
  1. Dpkg debería estar limpio ahora. Haz una limpieza con Apt:
sudo apt clean &&sudo apt update

Con un poco de suerte, eso te llevará de vuelta a donde comenzaste. No te devolverá los paquetes rotos que intentaste instalar, pero al menos Apt funcionará nuevamente, y podrás volver a usarlo para intentar instalar el paquete que originalmente intentabas instalar y sus dependencias.

Bloqueo permanente de DPKG

Hay un problema menos común con los bloqueos de dpkg que te impiden hacer cualquier cosa. Cada vez que intentas usar Apt o dpkg, obtienes un error que dice que otra aplicación ya lo está usando… cuando no es así.

Es fácil eliminar el archivo de bloqueo que te impide usar Apt y volver a hacer lo que necesitas. A veces, estos archivos de bloqueo permanecen en su lugar después de un error de instalación o un corte de energía, descarrilando el proceso y evitando que el archivo se elimine automáticamente. En este caso, tendrás que hacerlo tú mismo.

sudorm/var/lib/apt/lists/lock

Para mayor seguridad, elimina el bloqueo en la caché.

sudorm/var/cache/apt/archives/lock

Advertencia: Antes de eliminar este bloqueo, asegúrate de que no esté siendo utilizado. En Ubuntu, hay un actualizador que se inicia junto con el sistema que bloquea DPKG/APT cuando está buscando actualizaciones. Si no estás seguro de si el actualizador está en funcionamiento, presiona tu tecla de Windows para abrir el Centro de Actividades y escribe “Actualizador de Software”, luego presiona Enter para abrirlo.

Paquetes de Linux actualizador de Ubuntu

Si el actualizador dice que no puede ejecutarse, y no tienes terminales abiertas con gestores de paquetes ejecutándose en segundo plano, continúa con las instrucciones anteriores.

Si en lugar del problema de los paquetes rotos te enfrentas a un problema con el Centro de Software que no funciona, tenemos las soluciones.

Arreglar paquetes rotos en Fedora/CentOS/RHEL

Arreglar paquetes rotos en Fedora/CentOS/RHEL es un asunto menos común. dnf hace un gran trabajo asegurándose de que los paquetes se instalen correctamente. Dicho esto, todavía no es perfecto, y a veces las cosas se mezclan en la gestión de paquetes.

Nota: aprende las diferencias entre Fedora, CentOS y RHEL.

1. Listar paquetes problemáticos

El comando para resolver esto en sistemas basados en RHEL como Fedora es:

sudo rpm -Va

Paquetes de Linux verificar rpm

La opción -V es para verificar, lo que significa que revisará y comparará la información de los archivos instalados con la información almacenada en la base de datos rpm. Adjuntar -a a esto simplemente verifica todos los paquetes principales. Esto es ligeramente poco útil, ya que generalmente te dará una larga lista de archivos, pero puede darte un lugar por donde comenzar si tienes problemas con una aplicación en particular.

Por ejemplo, ver algo marcado como “faltante” en tu terminal te dirá que hay archivos faltantes en ese paquete en particular.

2. Intentar una reinstalación

Ejecuta un dnf reinstall en cualquier paquete que veas en esa lista que pueda estar dándote problemas.

sudo dnf --refresh reinstall [package name]

Eso establecerá todos los metadatos como expirados, por lo que recorrerá cada repositorio que tengas habilitado y buscará una nueva versión de ese paquete. Si encuentras que hay dependencias rotas con ese paquete, DNF probablemente se quejará y te dirá que uses la bandera --skip-broken. Esto simplemente omitirá ese paquete por completo y te permitirá actualizar tu sistema normalmente.

3. El último recurso – Eliminar paquetes

Si has llegado al punto en que tienes que usar --skip-broken para completar tus actualizaciones, es más higiénico para tu sistema eliminarlo por completo.

Recordando el nombre del paquete que no pudiste reinstalar correctamente, desinstálalo:

sudo dnf remove [package name]

Lo peor que podría pasar aquí es que termines eliminando una parte central de tu flujo diario, como tu navegador, obligándote a encontrar una alternativa.

Consejo: aprende a usar flatpak en Fedora para gestionar mejor tus paquetes.

Arreglar paquetes rotos en Arch

Aunque el gestor de paquetes de Arch tiene algunas similitudes con los otros listados aquí (es decir, tiene un archivo de bloqueo de base de datos y extrae dependencias de manera similar), es una bestia completamente diferente en cuanto a cómo está estructurada su lógica. El primer paso para diagnosticar tu problema es asegurarte de que los repositorios estén actualizados e intentar una actualización completa:

sudo pacman -Syu

Si tus intentos de instalar tu paquete o hacer una actualización del sistema siguen fallando, tenemos que aislar la causa según lo que te dijo el terminal:

Nota: aprende cómo funciona pacman antes de intentar arreglarlo.

“Paquete inválido o dañado”

Hacer cambios en “pacman.conf” de cualquier manera puede causar problemas que hagan que pacman etiquete incorrectamente los paquetes como corruptos. El culpable más probable aquí es un archivo parcial (“.part”) en la caché del gestor de paquetes, y tu solución es eliminarlo:

sudofind/var/cache/pacman/pkg/-iname"*.part"-delete

Siempre hay una posibilidad de que el paquete que estás intentando instalar esté efectivamente dañado y no proporcione metadatos válidos al gestor de paquetes de Arch. En ese caso, tendrás que esperar a que el mantenedor del paquete lo actualice. Si el paquete está instalado en tu sistema y causa problemas durante una actualización, elimínalo con:

sudo pacman -Rns[package name]

“No se puede bloquear la base de datos”

Al igual que el apt de Debian, el gestor de paquetes de Arch crea un archivo de bloqueo durante las operaciones. Si experimentaste un corte de energía o pacman experimentó una interrupción dura y no pudo eliminar el bloqueo, es muy probable que deje atrás un archivo de bloqueo.

Primero, averigua si algún proceso en tu computadora aún está utilizando el archivo:

sudofuser/var/lib/pacman/db.lck

En la imagen anterior, un proceso con ID 121497 está utilizando el archivo de bloqueo. Si tienes curiosidad sobre el proceso y quieres más información, usa ps:

ps-p[PID#]

En mi caso, otra instancia de pacman posee el archivo de bloqueo. La forma más segura de eliminar el bloqueo es primero matar ese proceso:

sudokill[PID#]

Ahora que el proceso está muerto, elimina el archivo de bloqueo:

sudorm/var/lib/pacman/db.lck

¡Ya estás listo para continuar!

“Archivos en conflicto/El archivo existe en el sistema de archivos”

Esto ocurre durante las actualizaciones donde pacman detecta un conflicto de propiedad. Antes de arreglar cualquier cosa, presta atención a la ruta del archivo que el gestor de paquetes está reclamando.

Para averiguar quién es el propietario del archivo:

pacman -Qo[path to the file]

Si es propiedad de un usuario y no de otro paquete, simplemente elimínalo:

sudorm[path to the file]

Si es propiedad de otro paquete, lo más seguro es esperar a que el mantenedor del paquete solucione este conflicto por sí mismo. A veces, eso no es una opción, sin embargo, y quieres hacer las cosas ahora.

La forma más sencilla de lograr esto es usando la bandera --overwrite en pacman. Solo ten en cuenta que esto es generalmente inseguro y podría llevar a que algunas aplicaciones no funcionen correctamente en tu sistema. Te sugiero hacer una copia de seguridad antes de ejecutar esto.

La bandera --overwrite permite al gestor de paquetes de Arch ignorar las reglas de propiedad para un archivo en particular y simplemente pasar por encima de la actualización. Ejemplo:

sudo pacman -Syu--overwrite[file name]

Si el comando anterior no funciona, reemplaza el nombre del archivo con su ruta absoluta. Algunos usuarios han informado que eliminar la barra inclinada inicial (“/“) frente a la ruta hace que el comando funcione cuando está siendo obstinado.

Alternativamente, también podrías decirle a pacman que sobrescriba todo lo que necesite:

sudo pacman -Syu--overwrite='*'

“Paquete inválido o dañado (firma PGP)”

En algunos paquetes que están mal mantenidos, el desarrollador puede no tener el tiempo o la voluntad de actualizar correctamente la firma digital que certifica su paquete. Esto eventualmente resultará en un mensaje en tu terminal mientras intentas instalarlo, como, “la firma de [alguien] es de confianza marginal,” seguido de que el gestor de paquetes te pregunta si deseas eliminar el archivo.

Debido a que las actualizaciones de firma dependen completamente del mantenedor, no hay nada que puedas hacer realísticamente para solucionar la situación desde tu terminal. Si estás haciendo una actualización y deseas mantener el paquete, usa la bandera --ignore para ese paquete en particular:

sudo pacman -Syu--ignore[package name]

Si obtienes esto para muchos paquetes, tu llavero podría estar desactualizado. Actualízalo con:

sudo pacman -S archlinux-keyring

Preguntas Frecuentes

¿Puedo aplicar las soluciones de Arch con un ayudante de AUR?

Generalmente, sí. Reemplaza “pacman” con tu ayudante de AUR en los comandos de esta guía. Ejemplo: yay -Qo /path/to/file

¿Qué debo hacer si interrumpo una actualización?

Interrumpir un proceso de actualización ya sea presionando Ctrl + C, matando el proceso del gestor de paquetes, o cerrando la terminal prematuramente resultará en algún nivel de corrupción en tu base de datos de paquetes que podría complicar las cosas cuando intentes instalar algo más. Para solucionar esto, limpia la caché y repite la actualización.

Crédito de la imagen: Flickr. Todas las capturas de pantalla por Miguel Leiva-Gomez.