From cde124882b1482cb7984f214161f951a916e66c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20M=C3=A9ndez?= Date: Thu, 1 Oct 2026 19:31:22 +0000 Subject: [PATCH 1/3] docs: decision note 0043, release formats (proposed) Which formats Keel publishes besides the Proxmox template, measured against what TurnKey ships today: TurnKey's own release metadata lists the OVA, VMDK, OpenStack and Xen builds up to 15.x only, and 18.x and 19.0 as ISO and Proxmox template; bt-vm cannot build trixie and needs ovftool. Proposed: the template, the ISO, one qcow2 and the OVA (then the VMDK zip), all wrapped around the template's own root filesystem on the build host; Xen, Docker, the AMI and the ARM images dropped. Names follow the template's, files are immutable per appliance release with SHA512SUMS signed in the attended release, per channel indexes on releases.keellinux.org, and GitHub Releases as a second copy uploaded from the attended step, never from the runner. A table of what each format's first boot makes for itself, the order of work starting with buildtasks#16 and tracker#23, and the attended step as it will be. --- docs/decisions/0043-release-formats.md | 354 +++++++++++++++++++++++++ docs/decisions/README.md | 1 + 2 files changed, 355 insertions(+) create mode 100644 docs/decisions/0043-release-formats.md diff --git a/docs/decisions/0043-release-formats.md b/docs/decisions/0043-release-formats.md new file mode 100644 index 0000000..65f3d29 --- /dev/null +++ b/docs/decisions/0043-release-formats.md @@ -0,0 +1,354 @@ +# 0043: Release formats + +Date: 2026-10-01 +Status: **proposed**, waiting on the maintainer. Nothing here is built +except the first fix it depends on (Keel-Linux/buildtasks#16, the machine-id +of the ISO and the images made from it, tracker#24). Decided parts of 0005, +0012, 0016 and 0039 are restated only where this note builds on them. + +The maintainer's requirements, 2026-10-01: + +- Keel releases are published in **every format TurnKey Linux shipped**, + not only the Proxmox `.tar.zst`: the ISO, the VMware formats and the + others; +- **Docker is out.** The project ships system containers only; +- images are also published as **GitHub Releases** on each appliance + repository. The first was published by hand on 2026-10-01: + [keel-core `testing-19.0-3-step4-20260930`](https://github.com/Keel-Linux/keel-core/releases/tag/testing-19.0-3-step4-20260930), + the `.tar.zst` and its `.sha512`, marked unsigned and not for production. + Uploads happen from the build host or an attended step, **never from the + CI runner**. + +## What TurnKey ships, measured on 2026-10-01 + +Read from `releases.turnkeylinux.org` and `mirror.turnkeylinux.org` (curl, +read only), the TurnKey page "Supported virtualization platforms and build +types" (`www.turnkeylinux.org/docs/builds`) and the `bt-*` scripts of +Keel-Linux/buildtasks, branch `19.x`. + +| Format | Script | Output | Last published by TurnKey | +| --- | --- | --- | --- | +| Hybrid ISO, BIOS and UEFI, live or installed with `tkl-installer` | `bt-iso` (fab's `product.iso`, `isohybrid`), `bin/iso-release` | `turnkey-core-19.0-trixie-amd64.iso` | 19.0, the only 19.0 format published so far | +| Proxmox VE and LXC template | `bt-container` (patches `headless`, `container`: kernel purged) | `debian-12-turnkey-core_18.1-1_amd64.tar.gz` | 18.x | +| OVA, VMware and VirtualBox | `bt-vm`, `bin/vm-bundle` (LVM disk, grub, `ovftool`) | `turnkey-core-15.0-stretch-amd64.ova` | 15.x | +| VMDK in a zip, with a `.vmx` | `bt-vm`, `bin/vm-bundle` | `turnkey-core-15.0-stretch-amd64-vmdk.zip` | 15.x | +| qcow2, OpenStack, headless | `bt-openstack`, `bin/openstack-bundle` (patches `headless`, `cloud`, `openstack`, extlinux) | `turnkey-core-15.0-stretch-amd64-openstack.qcow2` | 15.x | +| Xen domU tarball, headless | `bt-xen` (patches `headless`, `xen`) | `turnkey-core-15.0-stretch-amd64-xen.tar.bz2` | 15.x | +| Docker image | `bt-docker`, `bt-qemu-docker` (`docker push` to Docker Hub) | `turnkey/core` on the Docker index | not on the mirror | +| AWS AMI | `bt-ec2` (registers an AMI in AWS; no file) | an AMI id | through the TurnKey Hub | +| OpenStack AMI style tarball, Open Telekom Cloud qcow2 | `bt-openstack-ami`, `bt-otc` | `-openstack.tar.gz`, `-openstack.qcow2` | not on the mirror | +| Raw disk image (ARM boards) and its qcow2 | `bt-img`, `bt-prepqemu` | `.img.xz`, `.qcow2` | not on the mirror | +| Bootstrap | `bt-bootstrap` | `bootstrap-trixie-amd64.tar.gz` | bookworm (Keel publishes trixie, `docs/releases-host.md`) | + +Also in the tree: `bt-optimized` (runs `bt-vm` and `bt-container`; the +OpenStack, Xen and Docker lines are commented out), `bt-bugfix`, +`bt-bugfix-single` and `bt-iso-patched` (re-release a patched ISO), +`bt-iso-list`, and Keel's own `bt-layer`, `bt-layer-measure` and +`bt-aplinfo`. + +What this shows: **TurnKey itself stopped publishing the VM, OpenStack and +Xen builds after 15.x.** `releases.turnkeylinux.org/turnkey-core/` lists +`.ova`, `-vmdk.zip`, `-openstack.qcow2` and `-xen.tar.bz2` hashes for 14.2 +and 15.0, has no 16.x or 17.x entry, and lists only the ISO and the Proxmox +template for 18.0 and 18.1 (WordPress 18.2 the same); +the `ova/`, `vmdk/`, `xen/` and `openstack/` directories on the mirror are +empty. Their documentation still describes all of them. The code shows the +same age: `bt-vm` knows guest OS ids up to bullseye only and stops with +"vm_guestos could not be determined" on trixie, `bin/vm-bundle` reads the +kernel version with a pattern written for 4.19, and both OVA and VMDK need +`ovftool`, VMware's proprietary tool, which is not in Debian. + +## What Keel publishes today + +- **The Proxmox template** `debian-13-keel-_-_amd64.tar.zst`, + made by `keel assemble` from the layer chain `bt-layer` builds, staged by + `keel-release` (Keel-Linux/apt `lib/release.sh`) in + `/srv/keel-release//`, published by `keel-publish-mirror` (apt + `lib/mirror.sh`) to `mirror.keellinux.org/images/` with a `.sha512` and a + detached `.sha512.asc` (or a `.sha512.UNSIGNED` note). +- **The Proxmox index** `releases.keellinux.org/pve/aplinfo.dat{,.gz,.asc}`, + cumulative (tracker#11), and the release `MANIFEST` and its signature in + `releases.keellinux.org/meta//`. +- **The layers** in `mirror.keellinux.org/layers/` with the `stable` and + `testing` channel pointers of 0016. +- **No ISO and no VM image.** buildtasks has the scripts, but none is wired + into `keel-release`, and every one of them starts from an ISO + (`iso-download`, `tklpatch-extract-iso`) that Keel never built. + +Signing (0005): the release key's signing subkey is on the build host, +passphrase protected; a release is attended because the maintainer types +the passphrase and the agent forgets it after ten minutes. `keel-release` +does everything that needs no key first and signs last, and +`keel-release --sign-only ` signs what is staged without rebuilding. + +## Decision proposed + +### 1. The formats + +| TurnKey format | Keel | Why | +| --- | --- | --- | +| Proxmox / LXC `.tar.gz` | **kept**, as today's `.tar.zst` | the primary format; Proxmox VE reads zstd templates | +| Hybrid ISO | **kept** | bare metal, and any hypervisor that installs from an ISO (Hyper-V, XenServer, KVM) | +| OVA | **kept** | VMware and VirtualBox import by double click; built without `ovftool` | +| VMDK zip with `.vmx` | **kept, last** | the same disk as the OVA; for old VMware products and KVM users who want a ready disk | +| OpenStack qcow2 | **kept as one qcow2** | KVM, libvirt, Proxmox VM and OpenStack read the same file; see "headless" below | +| Xen `.tar.bz2` | **dropped** | Xen HVM boots the qcow2 or the ISO, and the template is already a root filesystem tarball for PV; TurnKey stopped in 15.x | +| Docker | **dropped** | system containers only (maintainer, 2026-10-01): the template is the container format | +| `bt-qemu-docker` | **dropped** | Docker | +| AWS AMI (`bt-ec2`) | **not now** | not a file: needs an AWS account and a key there; the qcow2 imports into EC2 with `vmimport` if someone asks | +| OpenStack AMI tarball, Open Telekom Cloud | **dropped** | the qcow2 covers both | +| ARM raw image (`bt-img`, `bt-prepqemu`) | **not now** | Keel is amd64 only today | + +So a release of one appliance is **four files**: `.tar.zst`, `.iso`, +`.qcow2`, `.ova`, and a fifth, `-vmdk.zip`, once the other four are proven. + +**Headless.** TurnKey's qcow2, Xen and container builds are headless: no +console at first boot, random passwords written to the log. Keel's qcow2 is +**not** headless: it boots to the same first boot screens as the ISO and +the template on Proxmox, because that is what Proxmox VE and libvirt users +see, and the headless path of Keel is still open (inithooks#31). An +OpenStack image with cloud metadata is a later variant, decided when +someone needs it. + +### 2. Which appliances + +- **Core and Web** first, in all four formats, because they are what Phases + 1 and 3 deliver (tracker#46) and what everything else is built on. +- **The others** (mariadb, postgresql, redis, wordpress, lamp, and the + appliances 0034 brings) keep the template only, and get the other formats + one by one, each after its boot test passes in that format. A format is + never published for an appliance whose first boot was not run in it. + +### 3. Names + +TurnKey's Proxmox naming, for every format, because it is the one Keel +already publishes and `bt-aplinfo` parses: + + debian-13-keel-_-_amd64.tar.zst + debian-13-keel-_-_amd64.iso + debian-13-keel-_-_amd64.qcow2 + debian-13-keel-_-_amd64.ova + debian-13-keel-_-_amd64-vmdk.zip + +`-` is the appliance version and revision from the product's +changelog, as `release_version` reads it today (for example `19.0-3`). A +testing build adds a `+