arcbox-boot 0.2.0

Boot asset manifest types, asset manager, and CLI tools for ArcBox VM runtime
Documentation

ArcBox Boot Assets

boot-assets is the single source of truth for ArcBox VM boot artifacts (schema v7).

Each release publishes per-architecture tarballs plus a unified multi-target manifest:

  1. boot-assets-{arch}-v{version}.tar.gz
  2. boot-assets-{arch}-v{version}.tar.gz.sha256
  3. manifest.json (schema v7, multi-target)

The tarball contains:

  1. kernel — pre-built Linux kernel from arcbox-labs/kernel (all drivers built-in, CONFIG_MODULES=n)
  2. rootfs.erofs — minimal read-only rootfs (busybox + mkfs.btrfs + iptables-legacy + CA certs)
  3. manifest.json — per-arch manifest (merged into unified manifest at release time)

No agent binary, no runtime binaries, no initramfs. Agent and runtime are distributed via VirtioFS from the host.

Manifest Schema (v7)

The manifest supports multiple target architectures and host-side binaries:

{
  "schema_version": 7,
  "asset_version": "0.2.0",
  "built_at": "2026-03-03T12:00:00Z",
  "source_repo": "arcbox-labs/kernel",
  "source_ref": "v0.1.0",
  "source_sha": "abc123",
  "targets": {
    "arm64": {
      "kernel": { "path": "arm64/kernel", "sha256": "...", "version": "6.12.8" },
      "rootfs": { "path": "arm64/rootfs.erofs", "sha256": "..." },
      "kernel_cmdline": "console=hvc0 root=/dev/vda ro rootfstype=erofs earlycon"
    },
    "x86_64": {
      "kernel": { "path": "x86_64/kernel", "sha256": "...", "version": "6.12.8" },
      "rootfs": { "path": "x86_64/rootfs.erofs", "sha256": "..." },
      "kernel_cmdline": "console=ttyS0 root=/dev/vda ro rootfstype=erofs earlycon"
    }
  },
  "binaries": [
    {
      "name": "dockerd",
      "version": "27.5.1",
      "targets": {
        "arm64":  { "path": "bin/arm64/dockerd",  "sha256": "..." },
        "x86_64": { "path": "bin/x86_64/dockerd", "sha256": "..." }
      }
    }
  ]
}

CLI Usage

The tool is built with Rust. Install with cargo build --release.

# Build EROFS rootfs only
boot-assets build-rootfs --output build/rootfs.erofs --arch arm64

# Full release build (single arch)
boot-assets build-release \
  --version 0.2.0 \
  --kernel build/kernel-arm64 \
  --arch arm64

# With pre-built rootfs
boot-assets build-release \
  --version 0.2.0 \
  --kernel build/kernel-arm64 \
  --rootfs build/rootfs.erofs \
  --arch arm64 \
  --source-repo arcbox-labs/kernel \
  --source-ref v0.1.0

# Merge per-arch manifests into unified multi-target manifest
boot-assets merge-manifest dist/arm64/manifest.json dist/x86_64/manifest.json \
  --output dist/manifest.json

Build And Release

CI release workflow

Workflow file: .github/workflows/release.yml

Trigger:

  1. Push tag: v*
  2. Manual dispatch with explicit version

Pipeline stages:

  1. Download kernel — downloads pre-built ARM64/x86_64 kernels from arcbox-labs/kernel release
  2. Build EROFS rootfs — creates minimal rootfs from Alpine static binaries (per-arch)
  3. Assemble — packages kernel + rootfs.erofs + manifest.json into tarball (per-arch)
  4. Merge — merges per-arch manifests into unified multi-target manifest
  5. Release — publishes to GitHub Releases and Cloudflare R2

Local build

Prerequisites:

  1. Rust toolchain
  2. Docker (for extracting static Alpine binaries)
  3. mkfs.erofs (erofs-utils)
  4. Kernel binary from arcbox-labs/kernel release
# Build the CLI
cargo build --release

# Download kernel from arcbox-labs/kernel release
gh release download v0.1.0 --repo arcbox-labs/kernel --pattern "kernel-arm64" --dir build/

# Full release build
./target/release/boot-assets build-release \
  --version 0.2.0 \
  --kernel build/kernel-arm64 \
  --arch arm64

Output files are written to dist/.

EROFS Rootfs Contents

/ (EROFS, read-only, LZ4HC compressed)
├── bin/
│   └── busybox          # Static busybox (+ symlinks: sh, mount, mkdir, ...)
├── sbin/
│   ├── init             # Trampoline: mount /proc /sys /dev → mount VirtioFS → exec agent
│   ├── mkfs.btrfs       # Btrfs formatter (first-boot data disk)
│   ├── iptables         # iptables-legacy (Docker bridge networking)
│   └── (symlinks)       # iptables-save, iptables-restore, ip6tables, ...
├── lib/
│   └── ld-musl-*.so.1   # musl libc
├── cacerts/
│   └── ca-certificates.crt
└── (mount points)       # tmp/ run/ proc/ sys/ dev/ mnt/ arcbox/ Users/ etc/ var/