# bootapi-images Builds the AlmaLinux 9 **node rootfs** tarball that [bootapi](https://git.unkin.net/unkin/bootapi)'s image-based provisioning unpacks with Anaconda `liveimg`. On a `v*` tag it publishes `almalinux9-node-.tar.zst` to the artifactapi `rootfs-images` local repo, where the [bootapi-templates](https://git.unkin.net/unkin/bootapi-templates) `almalinux9-image` catalog entry's `rootfs_tarball` points. This is the build half; the kickstart/catalog that *consumes* the tarball live in bootapi-templates. Kept separate so that repo stays templates-only. ## What's baked in `packages.txt` is the package set installed into the rootfs — everything the `image.ks.tmpl` `%post` assumes is already present (kernel, grub2 BIOS+UEFI, dracut, NetworkManager, openssh, chrony, kexec-tools, curl, …). `puppet-agent` is added from the puppet platform repo in `scripts/build-rootfs.sh`. Per-host config (networking, hostname, puppet server, callback) stays in the kickstart `%post`. ## Layout ``` packages.txt # bake list (one package per line) scripts/build-rootfs.sh # dnf --installroot -> tar.zst .woodpecker/ # pre-commit + lint (PR); release build+upload (v* tag) Makefile # build / lint / patch|minor|major ``` ## Releasing an image `make patch|minor|major` tags `v` and pushes; CI builds the rootfs and uploads `almalinux9-node-.tar.zst`. Then bump `rootfs_tarball` in the bootapi-templates `almalinux9-image` catalog entry to the new version (immutable; overwrites are 409-rejected). Build locally (needs `dnf`, `tar`, `zstd`, root): ```bash make build VERSION=v0.0.0-dev ```