Small Linux boot experiment built around a tiny kernel config, a minimal BusyBox-based initramfs, and a local QEMU boot script.
This repository keeps the pieces needed to boot a very small Linux userspace:
- a kernel
.config - a minimal
initramfs/tree - a
start.shhelper that triggers a GitHub Actions build, downloads the releasedbzImageandinitrd.img, and boots them with QEMU
The default init mounts /proc, /sys, and /dev, installs BusyBox applets, and then drops into /bin/sh. If the kernel was built without CONFIG_DEVTMPFS, it falls back to creating the minimum /dev nodes needed for an interactive rescue shell on the serial console.
This project is directly inspired by blinry's article, Building a tiny Linux from scratch, which walks through assembling a minimal Linux system from a tiny kernel, BusyBox, and an initramfs.
Prerequisites:
ghqemu-system-x86_64tar- GitHub CLI authenticated with access to trigger Actions in the target repo
Run:
./start.shWhat happens:
start.shtriggers thebuild-linux-tinyconfig.ymlworkflow.- GitHub Actions builds
bzImagefrom the repository.config. - GitHub Actions packs
initramfs/intoinitrd.img. - The script downloads the release artifact and boots it with QEMU in serial mode.
If needed, override the branch used for the workflow dispatch:
RUN_REF=my-branch ./start.sh.config: Linux kernel configuration used by CIinitramfs/init: PID 1 inside the initramfsinitramfs/bin/busybox: static BusyBox binary used by the initramfsstart.sh: fetch-and-boot helper for local testing.github/workflows/build-linux-tinyconfig.yml: CI build and release pipeline
- The local boot path expects prebuilt artifacts from GitHub Actions rather than compiling the kernel on your machine.
- QEMU is started with
-nographic, so interaction happens through the terminal.