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. Estas correcciones deberían ayudarlo a despegarse en la mayoría de los casos.
Reparación de paquetes rotos en Ubuntu/Mint/Debian
Apt tiene un par de indicadores para corregir las dependencias faltantes o los paquetes que se estropearon por un motivo u otro 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 no puede resolver las dependencias. En cualquier caso, puedes intentar los siguientes pasos:
Nota: aprenda cómo funciona Apt antes de intentar cualquiera de las soluciones a continuación.
- Ejecute una actualización para asegurarse de que no haya versiones más nuevas de los paquetes necesarios:
sudo apt --fix-missing update
- Obligue a Apt a buscar y corregir las dependencias faltantes o los paquetes rotos cuando intente instalar el paquete ofensivo nuevamente. Esto instalará las dependencias que falten y reparará las instalaciones existentes:
sudo apt install -f
Solución de problemas de configuración de DPKG
Otro lugar donde puede aparecer un error en la instalación de paquetes es el proceso de configuración. Entre bastidores, dpkg
se ocupa de esta parte, por lo que cuando un paquete falla durante la configuración, dpkg es la herramienta para solucionarlo.
- Empiece por intentar forzar a dpkg a reconfigurar cualquier paquete roto o parcialmente configurado:
sudo dpkg --configure -a
- Si eso no resuelve el problema, adopte un enfoque más contundente. Comience enumerando los paquetes que dpkg marcó como que requieren una reinstalación:
sudo dpkg -l | grep ^..r
El comando anterior le mostrará los paquetes que causan problemas. Para este próximo paso, verifique y asegúrese de que los paquetes marcados para reinstalar estén realmente dañados. hacer un sudo apt reinstall
y preste atención a qué paquetes no se reinstalan.
- Para cada paquete que no se reinstale, obtenga el nombre y elimine a la fuerza el paquete roto:
sudo dpkg --remove --force-remove-reinstreq [package name]
- Dpkg ahora debería estar limpio. Haz una limpieza 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 que intentaba instalar originalmente 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 otra aplicación ya lo está usando… cuando no es así.
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 el caché.
sudo rm /var/cache/apt/archives/lock
Advertencia: Antes de quitar este candado, asegúrese de que no esté en uso. En Ubuntu, hay un actualizador que se inicia junto con el sistema que bloquea DPKG/APT cuando busca actualizaciones. Si no está seguro de si el actualizador se está ejecutando, presione la tecla Win para abrir el Centro de actividades y escriba «Actualizador de software», luego presione Entrar para abrirlo.
Si el actualizador dice que no se puede ejecutar y no tiene terminales abiertos con administradores de paquetes ejecutándose en segundo plano, continúe con las instrucciones anteriores.
Si en lugar del problema de los paquetes rotos, se enfrenta a un problema con el Centro de software que no funciona, tenemos las soluciones.
Reparación de paquetes rotos en Fedora/CentOS/RHEL
La reparación de 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: aprenda las diferencias entre Fedora, CentOS y RHEL.
1. Lista de paquetes problemáticos
El comando para resolver esto en sistemas basados en RHEL como Fedora es:
sudo rpm -Va
Él -V
La opción es 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. Adjuntar -a
a esto solo verifica todos los paquetes principales. Esto es un poco inútil, ya que generalmente le dará una larga lista de archivos, pero puede brindarle un punto de partida si tiene problemas con una aplicación en particular.
Por ejemplo, ver algo marcado como «faltante» en su terminal le indicará que faltan archivos en ese paquete en particular.
2. Intente una reinstalación
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 simplemente omitirá ese paquete por completo y le permitirá actualizar su sistema normalmente.
3. El último recurso: eliminar paquetes
Si ha llegado al punto en que tiene que usar --skip-broken
para completar sus actualizaciones, es más higiénico para su sistema eliminarlo por completo.
Recordando el nombre del paquete que no pudo reinstalar correctamente, desinstálelo:
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 buscar una alternativa.
Propina: aprenda a usar flatpak en Fedora para administrar mejor sus paquetes.
Reparación de paquetes rotos en Arch
Aunque el administrador de paquetes de Arch tiene algunas similitudes con los otros enumerados aquí (es decir, tiene un archivo de bloqueo de base de datos y extrae dependencias de manera similar), es una bestia completamente diferente en lo que respecta a cómo se estructura su lógica. El primer paso para diagnosticar su problema es asegurarse de que los repositorios estén actualizados e intentar una actualización completa:
sudo pacman -Syu
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:
Nota: aprenda cómo funciona pacman antes de intentar solucionarlo.
“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 al administrador de paquetes de 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 y 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
:
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 eliminar primero ese proceso:
sudo kill [PID#]
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 de propiedad. Antes de arreglar cualquier cosa, preste atención a la ruta del archivo del que se queja el administrador de paquetes.
Para saber 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ínelo:
sudo rm [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. 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 una copia de seguridad antes de ejecutar esto.
Él --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:
sudo 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.
Alternativamente, también podría simplemente decirle pacman
para sobrescribir todo lo que necesita para:
sudo pacman -Syu --overwrite='*'
“Paquete no válido o dañado (firma PGP)”
En algunos paquetes que tienen un mantenimiento deficiente, es posible que el desarrollador no tenga el tiempo o la disposición para actualizar correctamente la firma digital que certifica su paquete. Eventualmente, esto dará como resultado un mensaje en su terminal mientras intenta instalarlo, como «firma de [someone] es una confianza marginal”, seguido del administrador de paquetes que le pregunta si desea eliminar el archivo.
Debido a que las actualizaciones de firmas dependen completamente del mantenedor, no hay nada que pueda hacer de manera realista para solucionar la situación desde su terminal. Si está realizando una actualización y desea conservar el paquete, utilice el --ignore
bandera para ese paquete en particular:
sudo pacman -Syu --ignore [package name]
Si obtiene esto para muchos paquetes, es posible que su llavero esté desactualizado. Actualízalo con:
sudo pacman -S archlinux-keyring
Preguntas frecuentes
¿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: yay -Qo /path/to/file
¿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 complicar las cosas cuando intente instalar otra cosa. Para solucionar esto, borre el caché y repita la actualización.
Credito de imagen: Flickr. Todas las capturas de pantalla por Miguel Leiva-Gomez.
Danos tu opinión