Building your own image¶
CasadoraOS is designed to be forked. The Containerfiles are short on purpose so your customizations stay maintainable alongside upstream changes.
Fork the repo¶
Understand the structure¶
Each image is a single Containerfile. Read one from top to bottom — you'll find the base image, package installs, user creation, systemd services, and quadlet definitions all in one place.
Create a new target¶
- Copy an existing Containerfile as a starting point:
-
Edit the Containerfile to match your hardware and role.
-
Build the image:
- Build a disk image with
bootc-image-builder:
Keep in sync with upstream¶
Add the original repo as a remote and rebase your changes:
git remote add upstream https://github.com/CasadoraTech/casadora-os.git
git fetch upstream
git rebase upstream/main
Since each target is its own Containerfile, merge conflicts are rare — your customizations live in separate files from upstream targets.
CI integration¶
The repo's GitHub Actions workflow can build and publish custom images. Add your target to the build matrix in .github/workflows/ and push — CI handles the rest.
Tips¶
- Start small. Copy the simplest existing Containerfile and add packages one at a time.
- Test locally.
podman buildcatches most issues before you flash hardware. - Use quadlets. If you're adding a service, ship it as a Podman quadlet rather than a systemd unit — it's the pattern all CasadoraOS images follow.
- Pin your base. Set a specific tag in your
FROMline so builds are reproducible.