zbm-openwrt-clevis
Un entorno de arranque basado en OpenWrt, compilado como una única UKI, que desbloquea una raíz ZFS con cifrado nativo mediante clevis y el TPM y después arranca el sistema Linux de destino a través de un entorno ZFSBootMenu donante.
- OpenWrt
- ZFS
- TPM 2.0
- Clevis
- Estado
- Versiones etiquetadas 0.90–0.95. La cadena de arranque está validada en un laboratorio QEMU con OVMF y swtpm, arrancando Ubuntu desde ZFS cifrado.
- Licencia
- No indicada: el repositorio no tiene archivo de licencia.
- Plataformas
- Máquinas UEFI x86-64 con TPM 2.0 y rEFInd; OpenWrt 25.12 dentro de la UKI.
Qué resuelve
ZFSBootMenu arranca bien ZFS cifrado, pero espera que una persona escriba la clave. En un servidor remoto o en una máquina desatendida eso no basta: el operador no puede saber si la solicitud pertenece al entorno de arranque en el que confió antes. Aquí la clave se libera automáticamente solo mientras las mediciones del TPM coinciden con el estado que el operador aprobó en el último resellado. En caso contrario, el arranque automático se detiene, se avisa al operador y un sistema OpenWrt protegido por contraseña espera una decisión manual.
Funciones principales
- Desbloqueo automático vinculado a los PCR del TPM mediante
clevis; la política validadaclevis.pcr_ids=1,4,5,7,9también cubre la línea de comandos del kernel que pasa rEFInd. - Recurso a un sistema OpenWrt completo con inicio de sesión por contraseña o clave SSH, no a un shell sin contraseña;
rootestá bloqueado en la imagen base. - Desbloqueo manual y resellado para un nuevo estado medido por consola o SSH, también por Wi-Fi o con dos enlaces WAN.
- Tres backends de almacenamiento para el JWE sellado: propiedades de ZFS, variables EFI o un archivo en una partición VFAT.
- Actualizar el kernel y el initramfs del sistema de destino no requiere un nuevo desbloqueo manual: residen dentro del pool cifrado, fuera del entorno medido.
- Mensaje opcional de Telegram cuando falla el desbloqueo automático; herramientas de reparación de discos y de red en la imagen.
Cómo funciona
rEFInd carga una única UKI de OpenWrt y le pasa la política en la línea de comandos del kernel. En el arranque, zbm-auto-boot ejecuta zbm-start; el hook load-key pide a clevis que recupere la clave y la entrega al entorno ZFSBootMenu donante, que lee el kernel y el initramfs de destino desde la raíz cifrada y los inicia con kexec. La entrada automática y la manual siguen el mismo camino y comparten un único bloqueo. El pool se importa en solo lectura, salvo una breve escritura cuando un resellado guarda su resultado en propiedades de ZFS.
UEFI → rEFInd → OpenWrt UKI → zbm-auto-boot → zbm-start
→ load-key hook / clevis → ZFSBootMenu → kexec → Ubuntu (ZFS)
Requisitos
- Un sistema de destino con raíz ZFS con cifrado nativo y la clave en un archivo (
keylocation=file://…). - UEFI, rEFInd como gestor de arranque y un TPM 2.0; la política va en la línea de opciones de rEFInd.
- Equipo de compilación: el flujo con OpenWrt ImageBuilder del repositorio,
ukify,refindy las herramientas de compilación habituales. - Laboratorio:
qemu-system-x86_64, OVMF yswtpm; el destino validado es Ubuntu sobre ZFS cifrado.
Esta página resume el README y la documentación del repositorio a octubre de 2026. La fuente de referencia es el propio repositorio.