zbm-openwrt-clevis
Um ambiente de boot baseado em OpenWrt, gerado como uma única UKI, que desbloqueia uma raiz ZFS com criptografia nativa usando clevis e o TPM e depois inicia o sistema Linux de destino por meio de um ambiente ZFSBootMenu doador.
- OpenWrt
- ZFS
- TPM 2.0
- Clevis
- Status
- Releases com tag 0.90–0.95. A cadeia de boot é validada em um laboratório QEMU com OVMF e swtpm, iniciando o Ubuntu a partir de ZFS criptografado.
- Licença
- Não informada: o repositório não tem arquivo de licença.
- Plataformas
- Máquinas UEFI x86-64 com TPM 2.0 e rEFInd; OpenWrt 25.12 dentro da UKI.
O que resolve
O ZFSBootMenu inicia bem o ZFS criptografado, mas espera que uma pessoa digite a chave. Em um servidor remoto ou em uma máquina sem supervisão, isso não basta: o operador não consegue saber se o prompt pertence ao ambiente de boot em que ele confiava antes. Aqui a chave só é liberada automaticamente enquanto as medições do TPM coincidem com o estado que o operador aprovou na última reselagem. Caso contrário, o boot automático para, o operador é notificado e um sistema OpenWrt protegido por senha aguarda uma decisão manual.
Principais recursos
- Desbloqueio automático vinculado aos PCRs do TPM via
clevis; a política validadaclevis.pcr_ids=1,4,5,7,9também cobre a linha de comando do kernel passada pelo rEFInd. - Fallback para um sistema OpenWrt completo com login por senha ou chave SSH, e não para um shell sem senha; o
rootfica bloqueado na imagem base. - Desbloqueio manual e reselagem para um novo estado medido pelo console ou por SSH, inclusive via Wi-Fi ou com dois uplinks WAN.
- Três backends de armazenamento para o JWE selado: propriedades do ZFS, variáveis EFI ou um arquivo em uma partição VFAT.
- Atualizar o kernel e o initramfs de destino não exige novo desbloqueio manual: eles ficam dentro do pool criptografado, fora do ambiente medido.
- Mensagem opcional no Telegram quando o desbloqueio automático falha; ferramentas de reparo de disco e de rede na imagem.
Como funciona
O rEFInd carrega uma única UKI do OpenWrt e passa a ela a política na linha de comando do kernel. No boot, zbm-auto-boot executa zbm-start; o hook load-key pede ao clevis que recupere a chave e a entrega ao ambiente ZFSBootMenu doador, que lê o kernel e o initramfs de destino da raiz criptografada e os inicia com kexec. A entrada automática e a manual seguem o mesmo caminho e compartilham um único lock. O pool é importado como somente leitura, exceto por uma breve gravação quando uma reselagem salva o resultado em propriedades do ZFS.
UEFI → rEFInd → OpenWrt UKI → zbm-auto-boot → zbm-start
→ load-key hook / clevis → ZFSBootMenu → kexec → Ubuntu (ZFS)
Requisitos
- Um sistema de destino com raiz ZFS com criptografia nativa e chave em arquivo (
keylocation=file://…). - UEFI, rEFInd como gerenciador de boot e um TPM 2.0; a política fica na linha de opções do rEFInd.
- Máquina de build: o fluxo com OpenWrt ImageBuilder do repositório,
ukify,refinde as ferramentas de build habituais. - Laboratório:
qemu-system-x86_64, OVMF eswtpm; o destino validado é o Ubuntu sobre ZFS criptografado.
Esta página resume o README e a documentação do repositório em outubro de 2026. A fonte de referência é o próprio repositório.