Acabamos de lanzar. El sitio y el servicio aún se están puliendo: le pedimos disculpas de antemano por posibles imprecisiones o fallos. ¿Ha visto un error o algo no funciona como esperaba? Escríbanos y lo corregiremos enseguida.

← Todos los proyectos
ES
Más allá de TAKT

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 validada clevis.pcr_ids=1,4,5,7,9 tambié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; root está 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, refind y las herramientas de compilación habituales.
  • Laboratorio: qemu-system-x86_64, OVMF y swtpm; 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.