Bootable Linux images,
baked from recipes.
SBC Images publishes ready-to-write disk images for single-board computers, rebuilt on a schedule by boxes — a declarative, modular embedded Linux image builder. Describe a board in one HCL file; get a verified, compressed image you can write to an SD card.
What is this?
boxes is a build pipeline
for embedded Linux. Every target system is described in a single self-contained
HCL config under images/ — partition table, rootfs, packages,
kernel, bootloader — and a Nushell orchestrator runs that description through
small, reusable modules until a bootable disk image comes out. Backblaze-hosted
builds are compressed with zstd, checksummed with SHA-256, and published to
dl.sbcimages.org; this site lists every
build that has landed there. Nothing is hidden: the exact recipe for each image
is in the repository, and you can run the same build yourself.
How it works
-
Describe
A config like
images/aarch64/rockchip/rk3566/powkiddy-x55/archlinux.hcldeclares the whole pipeline:disk { type = "gpt" size = "6G" partitions = [ { type = "esp", name = "ESP", mkfs = "fat32", mountpoint = "/efi" }, { type = "linux-root", name = "Arch", mkfs = "ext4", mountpoint = "/" }, ] } rootfs { method = "tarball" tarball = "archlinux.ports.aarch64.drzee.latest" root = "${disk.root_mountpoint}" } -
Build
Modules run in declaration order — partition, debootstrap/untar the rootfs, install packages, build a unified kernel, sign, mount — producing a raw disk image:
./build.nu images/aarch64/rockchip/rk3566/powkiddy-x55/archlinux.hcl
-
Publish
A scheduled CI pipeline rebuilds every config from the latest source, zstd-compresses the result, and uploads
<image>-<date>.img.zstplus its.sha256sumto dl.sbcimages.org — which is what the downloads page browses.
Supported targets
Using an image
curl -O https://dl.sbcimages.org/<path>/<image>-<date>.img.zst curl -O https://dl.sbcimages.org/<path>/<image>-<date>.img.zst.sha256sum sha256sum -c <image>-<date>.img.zst.sha256sum zstd -d <image>-<date>.img.zst -o image.img sudo dd bs=4M if=image.img of=/dev/sdX conv=fsync status=progress
Any image writer that accepts raw block-device images (dd, balenaEtcher, Raspberry Pi Imager) will do. These are nightly-style builds — useful and mostly boring, but treat them like rolling releases, not vendor firmware.