Los administradores de paquetes de Linux, como Apt y DNF, son extremadamente poderosos e intuitivos, pero eso no significa que las cosas no puedan salir mal. Ocasionalmente, la instalación de un paquete sale mal y usted tiene que recoger las piezas. Los administradores de paquetes tienen la capacidad de reparar paquetes rotos y omitir actualizaciones rotas para que su sistema vuelva a funcionar y evitar problemas en el futuro. Este artículo cubre cómo reparar paquetes rotos en Linux.
Estos consejos y trucos deberían ayudarlo a despegarse en la mayoría de los casos. Todos son bastante universales, pero cada situación es diferente, así que tenlo en cuenta cuando intentes depurar tu propia situación.
Reparación de paquetes rotos en Ubuntu/Mint/Debian
Apt tiene un par de banderas que puede usar para reparar dependencias faltantes o paquetes que se rompieron por una razón u otra 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ía. Esas dependencias probablemente no se incorporarán por sí solas, y dpkg
se quejará de que falta el paquete en ellos. En cualquier caso, puedes intentar los siguientes pasos.
Primero, ejecute una actualización para asegurarse de que no haya versiones más nuevas de los paquetes requeridos.
sudo apt --fix-missing update
A continuación, puede intentar obligar a Apt a buscar y corregir las dependencias faltantes o los paquetes rotos cuando intente instalar el paquete ofensivo nuevamente. Esto realmente instalará las dependencias faltantes y reparará las instalaciones existentes.
Otro lugar donde puede aparecer un error en la instalación de paquetes es el proceso de configuración. Detrás de escena, dpkg se encarga de esta parte, no Apt, por lo que sería lógico que cuando un paquete falla durante la configuración, dpkg es la herramienta a la que recurrir para solucionarlo.
Empiece por intentar forzar a dpkg a reconfigurar cualquier paquete roto o parcialmente configurado.
Si eso no resuelve el problema, puede adoptar un enfoque más contundente. Comience enumerando los paquetes que dpkg marcó como que requieren una reinstalación.
Debería ver los paquetes problemáticos allí. Siempre que no haya nada que no parezca pertenecer allí, puede forzar la eliminación de los paquetes rotos.
sudo dpkg --remove --force-remove-reinstreq [package name]
Cuando termine dpkg, intente limpiar con Apt.
sudo apt clean sudo apt update
Con un poco de suerte, eso te llevará de vuelta a donde empezaste. No obtendrá los paquetes rotos que intentó instalar, pero al menos Apt volverá a funcionar y podrá volver a usarlo para intentar instalar el paquete y sus dependencias.
Bloqueo DPKG permanente
Hay un problema menos común con los bloqueos de dpkg que le impiden hacer algo. Cada vez que intenta usar Apt o dpkg, obtiene un error que dice que ya hay otra aplicación… cuando no es así.
En realidad, es fácil eliminar el archivo de bloqueo que le impide usar Apt y volver a hacer lo que necesita. A veces, estos archivos de bloqueo permanecen en su lugar después de un error de instalación o un corte de energía, lo que descarrila el proceso y evita que el archivo se elimine automáticamente. En este caso, tendrás que hacerlo tú mismo.
sudo rm /var/lib/apt/lists/lock
Por si acaso, elimine el bloqueo en caché.
sudo rm /var/cache/apt/archives/lock
Reparación de paquetes rotos en Fedora/CentOS/RHEL
La reparación de paquetes rotos en Fedora/CentOS/RHEL es menos común, ya que yum y dnf hacen un gran trabajo para asegurarse de que los paquetes se instalen correctamente. Sin embargo, a veces las cosas se mezclan en el uso del paquete. El comando para hacer eso en sistemas basados en rpm es:
los -V
La opción es para verificar, lo que significa que revisará y comparará la información de los archivos instalados con la información almacenada en el rpm
base de datos. Esto es un poco inútil, ya que generalmente le dará una larga lista de archivos, pero puede darle un punto de partida si tiene problemas con una aplicación en particular. Puedes ejecutar un dnf reinstall
en cualquier paquete que vea en esa lista que podría estar causándole problemas.
sudo dnf --refresh reinstall PACKAGE_NAME
Eso configurará todos los metadatos como caducados, por lo que rastreará todos los repositorios que haya habilitado y buscará una nueva versión de ese paquete. Si encuentra que hay dependencias rotas con ese paquete, DNF probablemente se quejará y le dirá que use el --skip-broken
bandera. Esto también puede significar que no tiene un repositorio en particular habilitado para obtener una dependencia, por lo que es posible que deba investigar un poco allí.
Reparación de paquetes rotos en Arch
Aunque el administrador de paquetes de Arch tiene muchas similitudes con el de Debian, es una bestia completamente diferente. El primer paso para diagnosticar su problema es asegurarse de que los repositorios estén actualizados e intentar una actualización completa:
Si sus intentos de instalar su paquete o hacer una actualización del sistema siguen fallando, tenemos que aislar la causa de acuerdo con lo que le dijo la terminal:
“Paquete no válido o corrupto”
Hacer cambios en «pacman.conf» de cualquier manera puede causar problemas que causen pacman
para etiquetar incorrectamente los paquetes como corruptos. El culpable más probable aquí es un archivo parcial («.part») en el caché del administrador de paquetes, y su solución es eliminarlo:
sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete
Siempre existe la posibilidad de que el paquete que está intentando instalar esté corrupto y no proporcione metadatos válidos a Arch. En ese caso, tendrá que esperar a que el mantenedor del paquete lo actualice. Si el paquete está instalado en su sistema y causa problemas durante una actualización, elimínelo con:
sudo pacman -Rns [package name]
“No se puede bloquear la base de datos”
Al igual que el apt de Debian, el administrador de paquetes de Arch crea un archivo de bloqueo durante las operaciones. Si experimentó un corte de energía o pacman
experimentó una interrupción fuerte de la que no pudo eliminar el bloqueo, es muy probable que deje un archivo de bloqueo.
Primero, averigüe si algún proceso en su computadora todavía está usando el archivo:
sudo fuser /var/lib/pacman/db.lck
En la imagen de arriba, un proceso con ID 121497 está usando el bloqueo de archivos. Si tiene curiosidad sobre el proceso y desea obtener más información, utilice ps
:
En mi caso, otra instancia de pacman posee el archivo de bloqueo. La forma más segura de eliminar el bloqueo es eliminar primero ese proceso:
Ahora que el proceso está muerto, elimine el archivo de bloqueo:
sudo rm /var/lib/pacman/db.lck
¡Ya puedes irte!
“Archivos en conflicto/Existe un archivo en el sistema de archivos”
Esto sucede durante las actualizaciones donde pacman
detecta un conflicto. Antes de arreglar cualquier cosa, preste atención a la ruta del archivo del que se queja el administrador de paquetes.
Lo primero que tenemos que averiguar es a quién pertenece el archivo:
pacman -Qo [path to the file]
Si es propiedad de un usuario y no de otro paquete, simplemente elimínelo:
sudo rm [path to the file]
Si es propiedad de otro paquete, lo más seguro que puede hacer es esperar a que el mantenedor del paquete solucione este conflicto por sí mismo. Sin embargo, a veces esa no es una opción y desea hacer las cosas ahora.
La forma más sencilla de lograr esto es usando el --overwrite
bandera en pacman
. Solo sepa que esto generalmente no es seguro y podría provocar que algunas aplicaciones no funcionen correctamente en su sistema. Sugiero hacer copias de seguridad antes de ejecutar esto.
los --overwrite
flag permite que el administrador de paquetes de Arch ignore las reglas de propiedad para un archivo en particular y simplemente avance a través de la actualización. Ejemplo:
pacman -Syu --overwrite [file name]
Si el comando anterior no funciona, reemplace el nombre del archivo con su ruta absoluta. Algunos usuarios informaron que quitar la barra inclinada («/») delante de la ruta hace que el comando funcione cuando es obstinado.
Preguntas frecuentes
1. ¿Puedo aplicar Arch Fixes con un ayudante de AUR?
Generalmente, sí. Reemplace «pacman» con su ayudante AUR en los comandos de esta guía. Ejemplo:
2. ¿Son seguras estas instrucciones?
En su mayor parte, cada instrucción aquí es tan segura como cualquier otra operación de administración de paquetes. La principal excepción es cuando está eliminando archivos de bloqueo. Si tiene una forma de hacerlo, siempre es importante eliminar cualquier proceso que pueda estar usando esos archivos antes de eliminarlos. Esté al tanto de lo que está haciendo su sistema. ¡Es posible que haya olvidado una instancia de apt o pacman ejecutándose en alguna parte!
La mejor práctica sería siempre hacer una copia de seguridad de su sistema antes de cualquier actualización.
3. ¿Qué debo hacer si interrumpo una actualización?
Interrumpir un proceso de actualización presionando Ctrl + C , eliminando el proceso del administrador de paquetes o cerrando la terminal prematuramente dará como resultado cierto nivel de corrupción en la base de datos de paquetes que podría complicarle las cosas cuando intente instalar otra cosa. Para solucionar esto, borre el caché y repita la actualización.
En Debian/Ubuntu/Mint/Pop!_OS/etc.:
En Fedora/CentOS/RHEL:
En Arco:
Terminando
Con suerte, una de estas correcciones funcionó para usted y volverá a trabajar en su sistema Linux normalmente. Recuerde que la mejor manera de manejar una situación totalmente fuera de control es tratar de volver a ser como antes. No intente encender y agregar más cosas para resolver una rotura agregando más cosas a menos que sepa exactamente lo que está haciendo. Lo más probable es que termines con un lío enredado de cosas rotas que serán más difíciles de resolver.
También es posible que deba limpiar su sistema Linux para deshacerse de paquetes innecesarios y rotos. Si la causa es que una PC antigua no admite software más nuevo, también puede utilizar estas tres formas de hacer un buen uso de su PC anterior.