containerfile-runner
CI / build (pull_request) Successful in 14s
- 3-stage build: musl boco+boco-init (rust>=1.88, alpine:edge), linux-7.2 bzImage from kernel/config (pinned tarball, sha256-verified), slim runtime with qemu/virtiofsd/podman. - .containerignore: deny-all context (Cargo files, src/, init/, kernel/config) so the linux submodule no longer ships into every build. - Verified end-to-end: kernel boots under KVM, ext4 rootfs, userspace init. - NOTE: nested rootless podman cannot 'podman unshare -> container mount' (build path); boot path works as-is.
boco
Turn container images into bootable VMs
Example
# ./example/alpine/Containerfile
FROM alpine:latest
CMD ["/bin/sh"]
# Build the container
podman build ./example/alpine -t boco-alpine
# Make the container bootable. boco injects a custom init program,
# then packs the rootfs as a qcow2 disk.
boco build qcow2 boco-alpine
# Boot the image using QEMU, and drop into /bin/sh.
boco boot boco-alpine
# Cleanup
boco image rm boco-alpine
podman image rm boco-alpine
Can also be used to boot a more traditional systemd-based VM:
FROM archlinux:latest
# This works! Although you should probably add a user or some services.
CMD ["/sbin/init"]
Kernel
boco boots VMs using a shared kernel at $XDG_DATA_HOME/boco/registry/vmlinuz.
Place a suitable x86 bzImage there before running boco boot.
Languages
Rust
78.6%
Shell
21.3%
Dockerfile
0.1%