Automated tooling to customize, build, and test unattended Rocky Linux installation ISOs using Docker, mkksiso, and QEMU.
This project packages mkksiso into a predictable Docker container environment so you can inject Kickstart configurations, modify boot arguments, and output bootable ISOs consistently on both local development workstations and CI/CD runners.
- Reproducible Build Environment: Dockerized
mkksisotoolchain prevents host OS dependency mismatches. - Dynamic Network Provisioning: Uses native Anaconda
link1,link2binding to support arbitrary physical network interface names (eno1/eno2,eth0/eth1,em1/em2). - Hardware & Virtualization Ready: Boot options pre-configured to support bare-metal servers (e.g., HPE ProLiant Gen10 iLO consoles) and QEMU/KVM virtual machines.
- Automated Checksums: Generates
.sha256hash verification files on every build. - Virtual Testing: Built-in QEMU launcher script (
test-iso.sh) to quickly validate ISO installation without touching physical hardware.
.
├── Makefile # Primary task automation interface
├── docker-compose.yml # Container orchestration for mkksiso
├── Dockerfile # Build container definition
├── test-iso.sh # POSIX shell script to boot and test ISO in QEMU
├── ks/
│ └── ks.cfg # Unattended Kickstart configuration file
├── iso/ # Storage directory for official base ISOs (git-ignored)
└── output/ # Storage directory for generated custom ISOs (git-ignored)
- Docker and Docker Compose
- QEMU (
qemu-system-x86_64,qemu-img,ovmf) for local ISO testing - Make
Download the official Rocky Linux minimal ISO and place it inside the iso/ directory:
mkdir -p iso
# Example for Rocky Linux 10.2 minimal:
wget -P iso/ https://download.rockylinux.org/pub/rocky/10/isos/x86_64/Rocky-10.2-x86_64-minimal.isoModify ks/ks.cfg to fit your target server environment (users, storage layouts, package choices, network configs).
make helpBuilds the custom ISO and creates output/rocky-custom.iso.sha256:
make build-isoTo override defaults via environment variables or CLI:
make build-iso ROCKY_VERSION=10.2 BASE_ISO=Rocky-10.2-x86_64-minimal.iso OUTPUT_ISO=my-custom.isoBoots the newly generated ISO in a virtualized QEMU session:
make test-isoOverride default QEMU RAM/CPUs:
make test-iso MEMORY=8192 CPUS=4Removes all generated .iso and .sha256 files from the output/ directory:
make cleanYou can create a .env file in the repository root to persistently override defaults without editing the Makefile:
ROCKY_VERSION=10.2
BASE_ISO=Rocky-10.2-x86_64-minimal.iso
OUTPUT_ISO=rocky-custom.iso
BOOT_ARGS=console=ttyS0,115200n8 console=tty0 inst.text nomodesetGNU General Public License v2.0