
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.
¿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.
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.








