Build customized Fedora installer ISOs with kickstart templating.
- libvirt with a qemu user session
virt-manageris installed- You have a QEMU/KVM User-Session (virsh link:
qemu:///session) configured. virt-firmwareis required to test secure boot features- your user is member of the
kvmgroup virt-install --osinfo listknows aboutfedora43. If not, you will have to edittests/scripts/bootstrap.shand setOS_VARIANTto the highest fedora version you found in this list. Tested withfedora42successfully.
- docker and docker-compose are installed
- see these install instructions and select your OS there.
- your user is member of the
dockergroup (really needed?) - the
docker.serviceis now required:- In order to patch the EFI image we need permission to create loopback devices. That doesn't work with rootless podman, so we are forced to use docker instead.
- go-task is installed.
- also called
taskin some distros- Ubuntu:
snap install task --classic
- Ubuntu:
- also called
The builder reads input/config.yml, which is not committed — copy an
example and edit it:
cp examples/minimal/config.yml input/config.yml # easy start
# or
cp examples/best-practice/config.yml input/config.yml # full hardware securityThe builder downloads the source Fedora ISO (and its OpenPGP-signed checksum)
for you and caches it under output/.
go-task build:all # build the projectpotos.base collection tarball + the ISO (-> output/)
go-task build # just the ISO (collection already staged)The e2e harness builds and boots the committed fixture at tests/input/config.yml
(into tests/output/), keeping it decoupled from your own input/ workspace:
go-task build-and-bootstrap # build the fixture ISO and boot it in a VM
go-task test:teardown # remove the testing VMOr step by step:
go-task build:test # build tests/input/config.yml -> tests/output/
go-task test:bootstrap # create a libvirt VM from the fixture ISO
go-task test:teardown # remove the testing VM- Rotate the bootstrap secrets the examples ship with (the disk
init_passwordanduki.mok_password) and theadminpassword_hashbefore any real use — they are intentionally well-known.
The test:bootstrap task will create a VM that uses UEFI and configures secureboot with libvirt.
Please make sure you have the required ovmf package installed that adds UEFI support to KVM.
In addition we will use swtpm to emulate a TPM for the testing VM.
- https://github.com/erik1066/fedora-setup-guide
- https://oneuptime.com/blog/post/2026-03-04-custom-rhel-9-iso-lorax-kickstart/view
- https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html
- https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/customizing_anaconda/index#deploying-and-testing-an-anaconda-add-on
- https://fedoraproject.org/wiki/InitialSetup