Build and publish managed kernel assets used by Cleanroom backends.
This repository currently owns the experimental Apple Silicon darwin-vz
minimal Linux kernels used by Cleanroom and SporeVM smoke tests. It produces
the same release asset names and manifest shape that Cleanroom already resolves
from GitHub Releases.
Requirements:
- Docker
python3gittar- ARM64 Docker execution support only when overriding
CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_DOCKER_PLATFORM=linux/arm64on a non-ARM64 host, for exampleqemu-user-staticplusbinfmt-supporton Ubuntu
Build the release assets locally:
scripts/build-release-assets.sh dist/kernelsThe default build writes the Cleanroom rootfs and initrd profiles, plus
separate SporeVM kernel assets:
cleanroom-darwin-vz-minimal-rootfs-arm64-linux-<version>-Imagecleanroom-darwin-vz-minimal-rootfs-arm64-linux-<version>-Image.configcleanroom-darwin-vz-minimal-rootfs-arm64-linux-<version>-Image.sha256cleanroom-darwin-vz-minimal-rootfs-arm64-linux-<version>.manifest.jsoncleanroom-darwin-vz-minimal-initrd-arm64-linux-<version>-Imagecleanroom-darwin-vz-minimal-initrd-arm64-linux-<version>-Image.configcleanroom-darwin-vz-minimal-initrd-arm64-linux-<version>-Image.sha256cleanroom-darwin-vz-minimal-initrd-arm64-linux-<version>.manifest.jsonsporevm-arm64-linux-<version>-Imagesporevm-arm64-linux-<version>-Image.configsporevm-arm64-linux-<version>-Image.sha256sporevm-arm64-linux-<version>.manifest.jsonsporevm-run-arm64-linux-<version>-Imagesporevm-run-arm64-linux-<version>-Image.configsporevm-run-arm64-linux-<version>-Image.sha256sporevm-run-arm64-linux-<version>.manifest.json
The legacy SporeVM kernel is based on the minimal initrd profile and enables
/dev/mem so SporeVM's diskless fork smoke helper can access its fixed
generation MMIO window. The SporeVM run kernel combines the minimal initrd
profile with virtio-blk, ext4, multiuser, System V IPC, POSIX timers, and
script interpreter support so spore run can use the same kernel for minimal
initrd commands and read-only rootfs execution, including rootfs init systems
that drop privileges, PostgreSQL workloads, and Ruby/Bundler binstubs. It also
enables the Docker-oriented kernel facilities needed for a warm in-guest Docker
daemon and Docker Compose workloads: namespaces, cgroups, seccomp, POSIX
message queues, file locking, tmpfs-backed shared memory, inotify, keys,
overlayfs, veth, bridge netfilter, NAT, iptables and nftables
compatibility, tun, macvlan, ipvlan, and vxlan. Neither is a Cleanroom
runtime profile.
The pipeline can run:
scripts/ci-build-release-assets.shThat writes direct release assets under dist/kernels/, creates
dist/kernels.tar.gz, and uploads both as Buildkite artifacts through
buildkite-agent when it is available.
Tagged Buildkite builds then run:
scripts/ci-publish-release.shThat downloads dist/kernels.tar.gz, creates the matching GitHub Release in
buildkite/cleanroom-kernels when needed, and uploads the individual kernel
assets plus the bundled kernels.tar.gz.
Tag and push the next conventional version:
mise run releaseThe task runs local checks, fetches tags, uses svu next to calculate the next
version, tags the current commit, and pushes the tag. Buildkite publishes
GitHub Release assets from tagged builds.
Useful environment variables:
CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_VERSION, default6.1.155CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_PROFILES, defaultrootfs initrdCLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_PROFILE, optional single-profile override for local buildsCLEANROOM_KERNELS_INCLUDE_SPOREVM, default1; set to0to skip SporeVM kernel assets inscripts/build-release-assets.shSPOREVM_KERNEL_ASSET_BASE, defaultsporevm-<arch>-linux-<version>SPOREVM_RUN_KERNEL_ASSET_BASE, defaultsporevm-run-<arch>-linux-<version>CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_ARCH, defaultarm64CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_DOCKER_IMAGE, defaultubuntu:22.04CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_DOCKER_PLATFORM, defaultlinux/amd64CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_CROSS_COMPILE, defaultaarch64-linux-gnu-when building arm64 from a non-arm64 Docker platformCLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_TARBALL_SHA256CLEANROOM_DARWIN_VZ_MINIMAL_KERNEL_ASSET_BASECLEANROOM_KERNELS_GITHUB_REPOSITORY, defaultbuildkite/cleanroom-kernelsCLEANROOM_KERNELS_RELEASE_TAG, default empty unlessBUILDKITE_TAGis setCLEANROOM_KERNELS_GITHUB_RELEASE_TOKEN, used by tagged release publishing
Cleanroom still expects managed kernel assets on the Cleanroom release today. The intended integration is:
- This repo builds and releases kernel artifacts with manifest checksums.
- Cleanroom release jobs fetch a pinned kernel artifact set from this repo.
- Cleanroom either preserves current runtime behavior by re-publishing those
verified files on its own releases, or migrates runtime resolution to read
buildkite/cleanroom-kernelsreleases directly.