RuntimeError: TransactionItem not found for key: kernel-devel

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.
 
RuntimeError TransactionItem not found for key

 

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

 

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