Tutoriales

Cómo recuperar Linux roto después de una actualización interrumpida

Cuando la actualización de un paquete se detiene a mitad de camino, su administrador de paquetes puede permanecer bloqueado y dejar muchos paquetes solo parcialmente instalados. A continuación se explica cómo utilizar fusions, dpkg, apt, dnf check y rpm para desbloquear cerraduras y reparar daños de forma segura.

Imagina que empiezas una rutina apt upgrade o dnf upgrade en un Servidor vía SSHtu Wi-Fi se desconecta durante diez segundos y, cuando te vuelvas a conectar, la actualización ya no funcionará.

Eso por sí solo ya es molesto, pero el problema mayor surge cuando intentas ejecutar la actualización nuevamente porque ubuntu y Durban Es posible que vea el siguiente error:

E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 2143 (unattended-upgr)
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

En distribuciones basadas en RHEL, el problema se ve diferente porque dnf Podría detenerse y esperar a que finalice otro proceso, o dnf check Es posible que comience a informar que el mismo paquete se ha instalado dos veces.

La primera reacción de la mayoría de las personas es eliminar el archivo de bloqueo y forzar la instalación, pero esto a menudo convierte un pequeño problema en uno grande.

La buena noticia es que ambos administradores de paquetes mantienen registros detallados de lo que están haciendo, por lo que casi siempre pueden solucionarlo por sí solos sin necesidad de reinstalar el servidor.


Sólo necesita ejecutar los comandos correctos en el orden correcto y esta guía lo guiará a través de ellos para ambas series de distribución.

Boletín semanal de TechMint

conseguir Aprenda el curso intensivo de 7 días de Linux Únase a más de 34.000 profesionales de Linux que leen gratis todos los jueves.

Revise su correo electrónico para ver el enlace mágico para comenzar.

Algo salió mal. Por favor inténtalo de nuevo.

¿Por qué apt y dnf bloquean la base de datos del paquete?

Antes de ejecutar cualquier comando de reparación, puede resultar útil comprender qué estaba haciendo el administrador de paquetes cuando se detuvo la actualización, ya que cada paso de reparación deshace una parte específica del trabajo inacabado.

En sistemas basados ​​en Debian, apt depende de dpkguna herramienta de bajo nivel que realmente instala paquetes de software. dpkg bloquea ambos archivos antes de cambiar algo, /var/lib/dpkg/lock-frontend y /var/lib/dpkg/lockde modo que dos programas no puedan escribir en la base de datos del paquete al mismo tiempo.

Este es un bloqueo de archivo administrado por el kernel, lo que significa que Linux lo libera automáticamente cada vez que el proceso que lo contiene sale o se cancela. Entonces, si aún ve errores de bloqueo después de volver a conectarse, casi siempre significa que todavía se está ejecutando otro proceso y, en la mayoría de los casos, es el servicio de actualización desatendida en segundo plano.

dpkg Registre también el estado de cada paquete, como «desempaquetado» o»semi-configuración«Cuando una actualización se detiene a mitad de camino, algunos paquetes quedan en estos estados intermedios porque sus archivos se copiaron al disco pero sus scripts de instalación nunca se ejecutaron. Esto es exactamente lo que sucedió».dpkg fue interrumpido” El mensaje te lo dice.

En sistemas basados ​​en RHEL, Velocidad (este Administrador de paquetes RPMcual dnf Utilice a continuación) para actualizar paquetes instalando primero la nueva versión y luego eliminando la versión anterior. Si la actualización se detiene entre estos dos pasos, ambas versiones se registran como instaladas y dnf Estos paquetes no se tocarán hasta que se limpien los duplicados.

Si esto finalmente explica por qué eliminar archivos bloqueados dpkg es a menudo una mala solución, compártalo primero con cualquiera que todavía use rm /var/lib/dpkg/lock.

Utilice fusion y ps para comprobar qué programa mantiene el bloqueo

Dado que los procesos en ejecución son la causa más común de errores de bloqueo, esto es lo primero que se debe descartar. necesitas sudo Accede al servidor afectado, si te estás conectando vía SSH, inicia una sesión tmux antes de continuar (instálalo usando el siguiente comando) apt o dnf si aún no está allí), ya que perder la conexión nuevamente durante las reparaciones sólo empeorará las cosas.

En Ubuntu y Debian, fuser El comando muestra qué proceso está reteniendo dpkg Archivo de bloqueo:

sudo fuser -v /var/lib/dpkg/lock-frontend

producción:

                     USER        PID ACCESS COMMAND
/var/lib/dpkg/lock-frontend:
                     root       2143 F.... unattended-upgr

Si el proceso es unattended-upgradesla opción más segura es esperar a que se complete, ya que detenerlo durante el proceso de instalación puede dejar el sistema en el mismo estado corrupto en el que estás intentando reparar. Sólo debes detener el proceso si obviamente está bloqueado durante mucho tiempo. sudo kill 2143utilice el PID que usted mismo exportó.

Si el fusor no muestra ningún proceso, pero siguen apareciendo errores de bloqueo, entonces los archivos de bloqueo son restos de una actualización interrumpida y solo en este caso deben eliminarse:

sudo rm /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock

existir LokiLinux, RHELy AlmaLinux, dnf No fallará debido a errores de bloqueo. En cambio, se detiene e imprime un mensaje, como esperar a que se complete el proceso del pid 3871.

Puedes usar ps para averiguar cuál es el proceso, reemplazando el PID con el PID del mensaje:

ps -fp 3871

si se vuelve fondo dnf-makecache o dnf-automatic Trabaja y dale unos minutos para completar. Si el PID ya no existe, su próximo comando dnf funcionará normalmente.

Arreglar la actualización de apt fallada usando dpkg

Ahora que no hay nada bloqueado, el siguiente paso en Ubuntu y Debian es completar la configuración de los paquetes no terminados. Este es el orden»dpkg fue interrumpidoEl error le pide que ejecute:

sudo dpkg --configure -a

Verás una serie de «configuración» Comportamiento dpkg Trabaja a través de listas. No importa si el comando no imprime nada, ya que simplemente significa que no hay paquetes esperando ser configurados.

Al completar estas suites a menudo se revelan dependencias faltantes, lo que apt Informar errores como E: Dependencias insatisfechas. Pruebe «apt –fix-broken install» sin utilizar ningún paquete (o especifique una solución).

Puedes arreglarlos con:

sudo apt install -f

una vez apt Una vez completado, verifique nuevamente que el repositorio de paquetes sea consistente y luego complete la actualización que inició originalmente:

sudo dpkg --audit
sudo apt update
sudo apt upgrade

Si dpkg –configure -a acaba de evitar que tenga que reinstalar su servidor, comparta esta guía con compañeros de equipo que administran computadoras Ubuntu o Debian.

Reparar la actualización de dnf bloqueada usando dnf

este apt La reparación consiste en hacer el trabajo dpkg Eso es la mitad del trabajo, pero en los sistemas basados ​​en RHEL, a menudo lo que quedan son paquetes duplicados, por lo que el primer paso es encontrarlos:

sudo dnf check

producción:

openssl-libs-1:3.2.2-6.el10.x86_64 is a duplicate with openssl-libs-1:3.2.2-4.el10.x86_64

Cada línea muestra un registro con dos versiones del paquete, es decir, «Se ha instalado la nueva versión y no se ha eliminado la versión anterior.«Como se mencionó anteriormente. El número de versión exacto variará en su sistema.

Puede eliminar copias antiguas usando el siguiente comando:

sudo dnf remove --duplicates

si dnf o rpm En cambio, se queja del repositorio de paquetes en sí, con el siguiente error Error: No se puede abrir la base de datos del paquete en /var/lib/rpmreconstruya el índice de la base de datos RPM:

sudo rpm --rebuilddb

Después de eliminar duplicados y leer el repositorio nuevamente, el paso final es volver a alinear cada suite con su repositorio:

sudo dnf clean all
sudo dnf distro-sync

Utilice el historial de tmux y dnf para evitar errores de actualización

Ahora que su sistema vuelve a estar sano, algunos hábitos le ayudarán a evitar volver a pasar por esta reparación. La mayoría de las actualizaciones rotas son causadas por una conexión SSH interrumpida, por lo que ejecutar una actualización grande dentro de tmux mantendrá la actualización ejecutándose en el servidor incluso si su conexión se interrumpe y le permitirá volver a conectarse más tarde. tmux attach.

En los servidores de producción, tome una instantánea o confirme que la copia de seguridad esté actualizada antes de realizar actualizaciones importantes, ya que las instantáneas convertirán una actualización fallida en una reversión rápida en lugar de una solución prolongada.

En sistemas basados ​​en RHEL, dnf También mantiene un registro de cada transacción, que puede incluir en el historial de dnf. Si una actualización en particular causa problemas, sudo dnf history undo ID Es posible revertirlo siempre que la versión anterior del paquete todavía esté disponible en su repositorio.

Si alguna vez perdió una actualización de una sesión SSH eliminada, comparta esta información con cualquier persona que todavía esté realizando actualizaciones dnf sin usar tmux.

generalizar

Una actualización fallida puede parecer impactante, pero ambos apt y dnf Conserve suficiente información para restaurar limpiamente. Primero averigüe qué es lo que retiene la cerradura, luego deje que dpkg --configure -a, apt install -f, dnf checky dnf distro-sync Complete la reparación en lugar de forzarla.

Si administra un servidor basado en RHEL, Cursos RHCSA (RHEL 10 / EX200) Cubre RPM, dnf y recuperación del sistema como parte de la preparación completa del examen. Del lado de Ubuntu, manual de ubuntu profundizar en apt, dpkgy gestión diaria del sistema.

Nos encantaría saber cómo maneja este problema en su servidor. ¿Dejas que las actualizaciones desatendidas se ejecuten en producción o las desactivas y parcheas manualmente? Si encuentra un error de dpkg o rpm que ninguno de estos pasos soluciona, publique el mensaje exacto en los comentarios para que podamos trabajar juntos para resolverlo.

Si este artículo fue útil, Con alguien de tu equipo.

Boletín semanal de TechMint

conseguir Aprenda el curso intensivo de 7 días de Linux Únase a más de 34.000 profesionales de Linux que leen gratis todos los jueves.

Revise su correo electrónico para ver el enlace mágico para comenzar.

Algo salió mal. Por favor inténtalo de nuevo.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba