Problema
En muchas distribuciones basadas en Debian (Ubuntu, Linux Mint, etc.) los comandos apt y dpkg pueden fallar de forma catastrófica cuando un módulo DKMS no logra compilarse para el kernel activo. El síntoma típico es:
dpkg --configure -ase queda atascado.- Cada intento de
sudo apt install …termina condpkg: error processing package … (--configure): installed … package post‑installation script subprocess returned error exit status 11. - Los logs muestran rutas como
/var/lib/dkms/<module>/…y mensajes de “bad exit status” o “module build failed”.
El problema no es exclusivo de un paquete concreto; cualquier operación que requiera configurar paquetes dependientes del kernel (headers, image, generic‑hwe) se ve bloqueada. El resultado es un sistema que no puede instalar actualizaciones, ni siquiera parches de seguridad.
Causa
Los fallos de DKMS aparecen cuando el proceso de recompilación automática de un módulo encuentra:
- Fuentes incompatibles con la versión del kernel actual (cambios en la API, encabezados faltantes, etc.).
- Dependencias rotas: paquetes como
linux-headers-$(uname -r)no están configurados, lo que impide quemakeencuentre los archivos de desarrollo. - Scripts de post‑instalación defectuosos que abortan con código 11 cuando DKMS devuelve error.
- Rutas de configuración personalizadas (por ejemplo, módulos instalados manualmente en
/var/lib/dkms/nintendo/...) que permanecen aunque el usuario ya no los necesite. - Permisos o espacio insuficiente en
/var/lib/dkmso en el directorio de compilación (/tmp), provocando fallos demake.
En la práctica, el escenario más frecuente es que un módulo instalado para una necesidad puntual (controlador de joystick, tarjeta Wi‑Fi, etc.) quede registrado en DKMS y, tras una actualización del kernel, la recompilación falle. Como DKMS está enlazado a los scripts de linux-headers y linux-image, el gestor de paquetes detiene toda la transacción.
Solución
La estrategia general consiste en aislar o eliminar el módulo problemático, asegurarse de que los encabezados del kernel estén configurados y, finalmente, volver a ejecutar la configuración pendiente de dpkg. Se pueden seguir dos rutas:
1. Desinstalar el módulo DKMS que falla
# 1. Identificar el nombre exacto del módulo que aparece en los logs
dkms status
# 2. Eliminar la versión problemática (ejemplo: nintendo 3.2)
sudo dkms remove -m nintendo -v 3.2 --all
# 3. Borrar los archivos residuales
sudo rm -rf /var/lib/dkms/nintendo
2. Forzar la recompilación con encabezados correctos
# 1. Instalar/reinstalar los headers del kernel activo
sudo apt-get install --reinstall linux-headers-$(uname -r)
# 2. Intentar recompilar todos los módulos DKMS pendientes
sudo dkms autoinstall
# 3. Reconfigurar los paquetes rotos
sudo dpkg --configure -a
Si el módulo sigue fallando pero no es esencial, simplemente deshabilítalo:
# Renombrar el script que invoca DKMS en la fase de post‑instalación
sudo mv /etc/kernel/postinst.d/dkms /etc/kernel/postinst.d/dkms.disabled
Esto permite que apt continúe sin intentar compilar el módulo problemático. Posteriormente, se puede volver a habilitar el script y solucionar el módulo de forma aislada.
3. Limpieza de paquetes rotos y actualización completa
sudo apt-get -f install # Corrige dependencias rotas
sudo apt-get update
sudo apt-get upgrade
Si después de los pasos anteriores el gestor sigue marcando errores, una reinstalación completa del meta‑paquete linux-generic-hwe-24.04 (o la variante correspondiente) suele resolver conflictos de dependencias:
sudo apt-get install --reinstall linux-generic-hwe-24.04
Cuándo aplicar esta solución
Aplica cuando:
- Los logs de
dpkgoaptmencionan explícitamente rutas bajo/var/lib/dkms/y un “bad exit status” al compilar módulos. - La salida de
dkms statusmuestra módulos en estado “installed” o “failed” para el kernel actual. sudo apt-get -f installno logra reparar la situación.
No aplica si:
- El error proviene de paquetes que no usan DKMS (por ejemplo, problemas de dependencias de Python o Java).
- Los logs indican fallos de red, falta de espacio en disco o errores de permisos fuera de
/var/lib/dkms.
Código
# Paso 1: listar módulos DKMS y buscar el que falla
dkms status
# Paso 2: eliminar el módulo problemático (reemplaza <module> y <version>)
sudo dkms remove -m <module> -v <version> --all
sudo rm -rf /var/lib/dkms/<module>
# Paso 3: reinstalar encabezados del kernel activo
sudo apt-get install --reinstall linux-headers-$(uname -r)
# Paso 4: forzar recompilación de los módulos restantes
sudo dkms autoinstall
# Paso 5: reconfigurar paquetes pendientes
sudo dpkg --configure -a
# Paso 6: reparar dependencias y actualizar
sudo apt-get -f install
sudo apt-get update && sudo apt-get upgrade
Verificación
- Ejecuta
sudo dpkg --configure -a. La salida debe terminar sin errores. - Revisa
dkms status. Todos los módulos deben aparecer como “installed” o “removed”, sin estados “failed”. - Corre
sudo apt install <cualquier-paquete>(por ejemplo,curl). La instalación debe completarse sin interrupciones. - Confirma que el kernel actual arranca sin mensajes de DKMS en
dmesgo en los logs dejournalctl -b.
Notas adicionales
- Respaldar antes de borrar: si el módulo podría ser necesario en el futuro, copia su carpeta a
/tmpantes de eliminarla. - Espacio en
/tmp: durante la compilación DKMS usa/tmpcomo directorio de trabajo. Asegúrate de que haya al menos 1 GB libre. - Módulos de terceros: muchos controladores de hardware (por ejemplo, controladores de joystick, tarjetas Wi‑Fi USB) se instalan vía DKMS. Si no los usas, es más seguro desinstalarlos después de una actualización mayor del kernel.
- Kernel múltiple: si mantienes varios kernels instalados, repite la reinstalación de headers para cada versión que necesites (p.ej.,
linux-headers-6.17.0-29-generic). - Automatización: para servidores donde DKMS no es requerido, considera desactivar el script
dkmsen/etc/kernel/postinst.d/para evitar bloqueos futuros.
Con este enfoque, puedes recuperar la capacidad de usar apt y dpkg sin necesidad de reinstalar todo el sistema, manteniendo el entorno limpio y listo para futuras actualizaciones.