Targets¶
A target names what convert builds: the platform, and implicitly the
output format.
| Target | Canonical name | Output | Default support image |
|---|---|---|---|
qemu |
qemu-qcow2 |
qcow2, UEFI-bootable UKI | none |
incus |
incus-qcow2 |
qcow2, UEFI-bootable UKI, plus the Incus support image | ghcr.io/contemper-project/incus-support:v1 |
qemu is the reference target. It adds nothing to your image, and the
disk boots under any QEMU with UEFI firmware and nothing else. It is the
debugging baseline, and what deploy --to local-qemu is for.
incus builds the same disk format, since Incus runs VMs on QEMU with
OVMF firmware. It differs in the support image layered on top, by
default ghcr.io/contemper-project/incus-support:v1. It
adds the guest side of the Incus agent: the agent is copied from the
share Incus attaches to the VM and started at boot. The support image
declares systemd and OpenRC variants and picks the one that matches
your image's init system, so an image with neither fails the conversion
with a message naming the branch.
The tag v1 floats within the support image's major version, which is
the interface contract between contemper and its support images. The
bundle manifest records the digests it resolved to. To use a different
support image, or a pinned digest, pass --support <ref>; it replaces
the default (see below).
Default support images¶
Each target may declare a default support image: the reference used
when --target alone is given, with no --support. It's how incus
means "qcow2 plus the Incus agent" without you having to name the image
yourself.
qemu has no default support image. --support <ref> replaces the
target's default outright; it never stacks with it. There is no flag to
merge both an explicit support image and the target's default in one
build - a target's own support image is free to declare variants for the
things it needs to adapt to (see Support images),
which covers the common case of wanting the default plus something
conditional.
The bundle manifest and the progress output both record which one
applied: contemper.json's support.origin is "target" when the
default was used, "flag" when --support replaced it. See Bundle
manifest.
Names and aliases¶
Where a platform needs more than one format, it's a suffix on the target
name, incus-qcow2 vs. incus-raw, in the spirit of Packer's builder
naming. The unsuffixed name is an alias for that platform's default. One
flat namespace, rather than platform and format as independent axes,
avoids a large surface of mostly meaningless combinations.
Both spellings work. The suffixed one is canonical, and it's what the
progress output and the bundle manifest record: --target incus is
reported as incus-qcow2. A platform's default format won't change
under you, since that would silently alter what your pipeline produces,
so it's treated as a breaking change.
Targets and providers¶
A target is what convert builds: which support image went in, and
which format came out. A provider is where a bundle goes afterwards:
local-qemu, an Incus server. They are separate on purpose. An
incus-qcow2 bundle boots fine under local-qemu; the target records
what went into the disk, not where it may run.