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.
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
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:
En el caso de paquetes desfasados de Python:
dnf remove python3
Actualizamos el repositorio EPEL
–> 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
–> 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).