OCI container image build logic for an immutable Arch Linux system.
This repository defines the base Containerfile used to provision the OSTree deployment. It builds upon archlinux:latest and integrates bootc to enable atomic system updates. It is strictly vanilla Arch Linux, packaged as an immutable container.
| Package | Source |
|---|---|
| GNOME Shell + core apps | Arch official repos |
| systemd-boot (via bootc) | Arch official repos |
| Podman + Distrobox | Arch official repos |
| Nix package manager | Pre-built via ark-aur |
| Plymouth (boot splash) | Pre-built via ark-aur |
| MoreWaita icon theme | Pre-built via ark-aur |
| starship, fastfetch | Pre-built via ark-aur |
| bootc, bootupd, ostree | Pre-built via ark-aur |
VARIANT: Specifies kernel and driver combinations (e.g.,ark-zen-nvidia).
Supported variants: ark, ark-zen, ark-lts, ark-hardened, ark-nvidia, ark-zen-nvidia, ark-lts-nvidia, ark-hardened-nvidia.
podman build -t localhost/ark-image:test -f .github/Containerfile --build-arg VARIANT="ark-zen-nvidia" .github/All build files live inside .github/:
Containerfile— image definitionbls-sync.sh— BLS boot entry sync script (runs on every boot and after upgrades)ark-bls-sync.service— systemd service for boot-time BLS syncbls-sync.conf— drop-in for ostree/bootc finalize-staged servicesark-home.conf— tmpfiles.d entry ensuring/var/homeexists on every bootalga-wrapper.sh— wrapper that prefers updated alga binary from/var/lib/alga/binpacman.sh— catches accidentalpacmancalls on immutable host
After bootc upgrade, two boot entries appear in systemd-boot:
- Current deployment:
Arch Linux YYYYMMDDHHMMSS(new) - Rollback deployment:
Arch Linux YYYYMMDDHHMMSS(previous)
On each subsequent upgrade, the oldest deployment is pruned by OSTree, leaving always exactly 2 entries.
Deployment requires a bootable environment containing bootc. See the ark.linux Live ISO or the alga installer frontend.
MIT