El error RuntimeError: TransactionItem not found for key: kernel-devel parece ser un error del gestor de paquetes dnf (en posible conflicto con yum) en CentOS, probablemente relacionado con un paquete duplicado y con una actualización de la distro.
No es muy común encontrarse con este error, a no ser que estemos realizando por ejemplo una actualización de kernel o una actualización de la versión de la distro Linux que estemos usando, que en este caso es CentOS. Por ejemplo es bastante probable que veas este error si estás intentando actualizar de CentOS7 a CentOS8 Stream.
Razones y causas del error RuntimeError: TransactionItem not found for key
Como decíamos antes, parece ser un bug de dnf que intenta instalar un kernel incorrecto, normalmente al realizar una actualización del sistema con dist-upgrade o full-upgrade
También tiene que ver con haber actualizado el gestor de paquetes del sistema, de yum a dnf. Aunque dnf es compatible con yum (en teoría) parece que dnf no funciona del todo bien en estos casos (sobre todo si además estamos saltando a una versión superior del sistema) y hay paquetes que no reconoce o los ve como duplicados.
Por ejemplo si ves este error es porque has ejecutado un update/upgrade de tu versión de sistema Linux:
dnf system-upgrade dnf upgrade |
Componentes involucrados en este error
- Gestor de paquetes (yum y dnf)
- Kernel (el viejo y el nuevo)
- Paquetes desfasados o duplicados al cambiar de gestor de paquetes (yum / dnf) en CentOS
Cómo solucionar el error RuntimeError: TransactionItem not found for key
La solución no es una sola ni es simple.
Te recomiendo que antes de tocar te asegures de que tienes una copia de seguridad completa del servidor.
Y luego como siempre, vamos analizando los problemas poco a poco con cabeza, e intentando resolver el problema.
–> El problema principal parece ser un paquete incompatible o desactualizado que no puede ser actualizado. Si conseguimos actualizarlo desaparecerá el problema.
Pero este “pequeño” problema nos lleva a otros problemillas algo complejos:
- El error tiene que ver con el gestor de paquetes yum o dnf (recuerda que estamos actualizando el sistema)
- El error afecta al kernel (si actualizas el sistema es kernel es probable que cambie y se actualice también)
Solución por pasos
- Podemos eliminar paquetes conflictivos (paquetes desfasados y conflictivos de python en este caso) y dejarlos actualizados después al instalar la versión correcta.
En el caso de paquetes desfasados de Python:
dnf remove python3 |
- Actualizar repos si fuera necesario (si estás tocando el kernel y actualizando tu distro es batante probable que tengas que hacerlo)
Actualizamos el repositorio EPEL
- Intentamos actualizar y subir la versión del sistema :
–> Con el gestor de paquetes yum:
sudo yum -y update yum -y upgrade |
–> Con el gestor de paquetes dnf:
dnf update dnf upgrade --best --allowerasing |
- Instalar el nuevo kernel:
–> Para CentOS7, el último kernel de soporte a largo plazo (Long Term):
sudo yum --enablerepo=elrepo-kernel install kernel-lt |
–> Para CentOS7, Instalación del kernel estable de Mainline (ml – Mainline):
sudo yum --enablerepo=elrepo-kernel install kernel-ml |
–> Para CentOS 8:
dnf -y install kernel-core |
CONCLUSIÓN
Si todo va bien al final verás que al actualizar paquetes ya no recibes el error “RuntimeError: TransactionItem not found for key” sino que los paquetes se actualizarán correctamente, además podrás ver que tienes el kernel adecuado instalado.
Puedes tomar como referencia este artículo en el que realizamos la migración de de CentOS7 a Cent0S Stream (los pasos seguidos son los mismos que tendrás que hacer para solucionar el error).