SBC Images

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

  1. Describe

    A config like images/aarch64/rockchip/rk3566/powkiddy-x55/archlinux.hcl declares 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}"
    }
  2. 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
  3. Publish

    A scheduled CI pipeline rebuilds every config from the latest source, zstd-compresses the result, and uploads <image>-<date>.img.zst plus its .sha256sum to dl.sbcimages.org — which is what the downloads page browses.

Supported targets

archlinux-efi

rpi4 · aarch64

archlinux-efi-headless

rpi4 · aarch64

archlinux

powkiddy-x55 · aarch64

ubuntu-26.04-efi-zfs

generic · x86_64

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.