Build Linux Kernel with Docker Compose.
$ docker compose up ubuntu
Each service is one distribution's image with that distribution's toolchain.
On start the container fetches a single pinned stable kernel tag
(LINUX_VERSION in entrypoint.sh; override with
docker compose run -e LINUX_VERSION=v7.3 ubuntu), builds it with an
alldefconfig-based config plus modules, runs bindeb-pkg / binrpm-pkg
where the image has the tools, and serves the results from
/build-kernel/artifacts on port 8000 (see the port mapping in
docker-compose.yml). A tag that cannot be fetched fails the build.
archlinux and manjarolinux build Arch's official linux PKGBUILD
instead, cachyos builds CachyOS's linux-cachyos PKGBUILD (clang and
ThinLTO, _processor_opt=generic), and azurelinux and cbl-mariner
build Microsoft's kernel tree at its newest rolling-lts/mariner-3 tag.
Every push, plus a schedule on Monday and Thursday 00:00 UTC, builds all 50
distributions. Each job uploads artifacts/ (the packages and the kernel
config) as a workflow artifact. The longest jobs are the three that
build their distro's full kernel config, archlinux, manjarolinux and
cachyos, at two to three hours each; they run in parallel with the rest,
so a whole run takes about as long as the slowest of them.
CI builds the kernel on these 50 distributions and variants:
almalinux, almalinux-8, almalinux-kitten, alpine, alpine-edge, altlinux, amazonlinux, anolisos, archlinux, artixlinux, azurelinux, cachyos, cbl-mariner, centos, centos8, chimeralinux, debian, debian-12, debian-sid, devuan, fedora, fedora-rawhide, gentoo, gentoo-llvm, gentoo-musl, gentoo-musl-llvm, kalilinux, linux-mint, mageia, manjarolinux, miraclelinux, opencloudos, openeuler, openkylin, openmandriva, opensuse, opensuse-leap, oraclelinux, parrot, photon, pureos, rockylinux, slackware, solus, termux, ubuntu, ubuntu-24.04, void-linux, void-linux-musl, wolfi
The -12, -24.04 and -8 jobs pin the previous release of Debian, Ubuntu
and AlmaLinux: the toolchains there still differ from the current ones, which
is exactly the drift this repository is meant to catch.
The -rawhide, -sid, -edge and -kitten jobs build on development
branches to catch toolchain changes before they reach a release;
gentoo-musl and void-linux-musl build those distributions on musl,
and gentoo-llvm and gentoo-musl-llvm on Gentoo's LLVM stage3s, where
the kernel is built with clang (LLVM=1).
centos is CentOS Stream 10; centos8 is CentOS Linux 8.5.2111, the
last CentOS release before Stream, from vault.centos.org. Likewise
azurelinux is Azure Linux 3.0 and cbl-mariner stays on CBL-Mariner
2.0, its end-of-life predecessor.
Defined in Docker Compose but not built in CI:
- redhat: the public UBI repositories ship no bison/flex/dwarves, so the kernel cannot be built without a RHEL subscription
- sles: the public BCI image carries gcc 7.5 and clang 7/9 only, and the kernel refuses anything older than gcc 8 ("Sorry, this C compiler is not supported" out of olddefconfig); the full SLES repositories need a subscription
- amazonlinux2: its make is 3.82, and the kernel requires GNU Make 4.0 or newer ("GNU Make >= 4.0 is required. Your Make version is 3.82")
- Gentoo Wiki - Kernel
- Gentoo Wiki - Kernel/Building from userspace
- Gentoo Wiki - eclean
- Gentoo Packages - app-portage/flaggie
- gentoo/gentoo-docker-images
- gg7/gentoo-kernel/guide
- jeekkd/gentoo-kernel-build
- Linux Mint
- Linux Mint Installation Guide
- Upgrades
- Upgrade Mint from command line? - Linux Mint Forums