Skip to main content

Build from source

This is the advanced path for release engineering, auditing, and custom image work. Normal operators should use prebuilt release images.

Local builds create local signing keys, local measurements, and verifier-policy work. They are not drop-in replacements for release artifacts.

Host Tools

On macOS:

brew install qemu swtpm erlang rebar3 python@3

Install Docker Desktop or another Docker runtime. Linux hosts need equivalent Docker, QEMU, swtpm, Erlang, rebar3, Python, and build-tool packages.

Build Images

Generate local signing material:

make signing-keys

Build the default laptop image:

make runtime-image

Build the no-TME compatibility image:

TME=0 make runtime-image

Outputs are under:

build/images/

Apply Local Inputs

For a locally built image, place config.json and optional wifi.conf beside the Makefile, then run:

make operator-config-apply IMAGE=build/images/lapee-runtime-tme-signed.img

For the no-TME image:

make operator-config-apply IMAGE=build/images/lapee-runtime-no-tme-signed.img

This edits the ESP. It does not rebuild or re-sign the UKI.

Write A Built Image

make write-image DEV=/dev/diskN IMAGE=build/images/lapee-runtime-tme-signed.img

Or build and write in one step:

make runtime-write DEV=/dev/diskN

The target device is erased.

QEMU Checks

make qemu IMAGE=build/images/lapee-runtime-tme-signed.img
make qemu-operator-config

The QEMU path boots the same USB image shape that is written to hardware and checks live ~measurement@1.0 and ~system@1.0 endpoints through a forwarded port.

Source Map

Key source-tree paths:

PathRole
MakefileBuild, write, signing, WiFi, config injection, and QEMU entry points.
arch/common/linux/Shared Linux/Buildroot appliance packaging.
arch/android/AndEE Android packaging and harnesses.
devices/common/Measurement, system, TPM, SNP, and shared PermawebOS devices.
scripts/Image assembly, Secure Boot, WiFi, QEMU, and verification helpers.
arch/common/linux/buildroot-external/board/lapee/rootfs-overlay/initPID 1 for the Linux appliance.
arch/common/linux/buildroot-external/board/lapee/rootfs-overlay/etc/lapee/lapee.jsonBase PermawebOS config.