A [bootc](https://github.com/bootc-dev/bootc) installer designed to install an image as quickly as possible. This project enables the creation of bootable ISOs directly from bootc container images, where all customizations are embedded within the container image itself.
1.**A bootc-compatible container image** hosted in a container registry (e.g., GitHub Container Registry, Docker Hub, Quay.io) or locally stored in podman's container storage. This image _must_ adhere to the [Container Image Specification](#container-image-specification).
2.**GitHub Actions** (for automated builds).
### Container Image Specification
Your `bootc` container image must adhere to a specific contract for Titanoboa to successfully build an ISO. All customizations for the ISO (bootloader entries, kernel arguments, Flatpaks, etc.) are expected to be embedded within your container image.
This contract is also known as the [Container-native ISO contract v0.1.0 spec](https://github.com/ondrejbudai/bootc-isos/blob/3b3a185e4a57947f57baf53d2be5aee469274f98/README.md#container-native-iso-contract-v010).
#### `iso.yaml`
Your container image must contain a file at `/usr/lib/bootc-image-builder/iso.yaml` in YAML format. This file configures the ISO's label and GRUB2 boot entries.
The `iso.yaml` file supports the following top-level keys:
-`label` (string): The label for the ISO.
-`grub2` (object): GRUB2 configuration, supporting these keys:
-`default` (integer): The default menu item (0-indexed).
-`timeout` (integer): Default timeout in seconds.
-`entries` (array of objects): GRUB2 menu entries. Each entry must have:
-`name` (string): Name of the entry.
-`linux` (string): Path to the kernel + kernel arguments (e.g., `/images/pxeboot/vmlinuz quiet rhgb`).
-`initrd` (string): Path to the initramfs (e.g., `/images/pxeboot/initrd.img`).
**Example `iso.yaml` (inside your container image):**
This example shows how an image like `ublue-os/bluefin` consumes Titanoboa, assuming the `bluefin-dx:gts` image already contains its full ISO configuration.
For local development and testing, you can build ISOs directly from a local container image that adheres to the [Container Image Specification](#container-image-specification).
After building your ISO via the GitHub Action, you can download the artifact and test it in a virtual machine locally. For local testing during development, you can adapt the `main.sh` script to build the ISO from a local bootc image.