Cloud-init-ready, signed Amazon Linux 2023 images for OpenStack and Proxmox
Report a bug
·
Request a feature
This repo builds Amazon Linux 2023 cloud images on top of the
upstream al2023-kvm-*-kernel-6.1-x86_64.xfs.gpt.qcow2 artifact
published at
cdn.amazonlinux.com/al2023/os-images/latest/kvm/ and
republishes it through the openimages.cloud signed-release pipeline.
The build pipeline is shared with the rest of open-img-cloud:
this repo only ships the VERSION, customize.sh, detect-upstream.sh,
and two thin caller workflows that delegate to the reusable workflows
in open-img-cloud/.github (@main).
Customisations applied to the upstream rootfs:
- qemu-guest-agent added (not in the upstream image) and enabled at boot via systemd
- Org-wide cloud-init policy drop-in (
99_oic-policy.cfg) injected by the reusable workflow into/etc/cloud/cloud.cfg.d/, pinningdatasource_list: [OpenStack, ConfigDrive, NoCloud, None]anddisable_root: true/ssh_pwauth: false virt-sysprepto clean transient state, thenvirt-sparsify --compress
The upstream AL2023 image already ships cloud-init, openssh-server,
GRUB2 with serial console wired (console=tty0 console=ttyS0,115200),
and the ec2-user default user — we don't override any of that.
Each release publishes:
al2023-<version>-x86_64.qcow2*.sha256,*.sha1,*.md5per-file*.bundlecosign sigstore-bundle (signature + cert + Rekor proof)MANIFEST.json(build metadata, including the builder image digest)index.htmldirectory listing
Public CDN, served via Cloudflare in front of an R2 bucket (mirror of the source-of-truth Garage):
| URL pattern | Cache policy |
|---|---|
https://images.openimages.cloud/amazon-linux-2023/<version>/<filename> |
max-age=31536000, immutable |
https://images.openimages.cloud/amazon-linux-2023/latest/<filename> |
max-age=300 |
Browse: images.openimages.cloud/amazon-linux-2023/latest/
cosign 3.x:
sha256sum -c <filename>.sha256 # integrity
cosign verify-blob \
--bundle <filename>.bundle \
--new-bundle-format \
--certificate-identity-regexp '^https://github.com/open-img-cloud/\.github/\.github/workflows/build-libguestfs-image\.yml@' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
<filename> # provenanceThe certificate identity points at the reusable build workflow in
open-img-cloud/.github — that's where GitHub's OIDC binds the SAN for
keyless signing, regardless of which caller repo invoked it. To tie the
artifact back to this repo's commit, also check MANIFEST.json: it
pins the caller commit SHA, the workflow run URL, and the builder
image digest.
# Pull the qcow2 (replace <V> with the desired version, e.g. 2023.11.20260509.0)
curl -fLO https://images.openimages.cloud/amazon-linux-2023/<V>/al2023-<V>-x86_64.qcow2
openstack image create \
--disk-format qcow2 --container-format bare \
--min-disk 25 \
--file al2023-<V>-x86_64.qcow2 \
'Amazon Linux 2023 <V>'scp al2023-<V>-x86_64.qcow2 root@proxmox:/var/lib/vz/template/iso/
qm create <VMID> --name al2023-template --memory 1024 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk <VMID> al2023-<V>-x86_64.qcow2 <STORAGE>
qm set <VMID> --scsihw virtio-scsi-pci --scsi0 <STORAGE>:vm-<VMID>-disk-0
qm set <VMID> --boot c --bootdisk scsi0
qm set <VMID> --ide2 <STORAGE>:cloudinit
qm set <VMID> --serial0 socket --vga serial0
qm set <VMID> --ciuser ec2-user --sshkeys ~/.ssh/authorized_keys --ipconfig0 ip=dhcpwatch.ymlruns daily 06:29 UTC, callsbuild/detect-upstream.shwhich follows thelatest/302 redirect to extract the version segment from the resolved CDN URL.- If the version differs from the current
VERSION, the workflow opens (or updates) a PRauto/upstream-bump. - Merging the PR + pushing a
v<VERSION>tag firesrelease.yml, which calls the sharedbuild-libguestfs-image.yml@mainreusable workflow. - Each build downloads the upstream qcow2, runs
customize.sh, sysprep, sparsify, signs, and uploads to Garage + R2 unders3://amazon-linux-2023/<version>/. Thelatest/alias is replaced and Cloudflare cache forlatest/is purged.
VERSION single line, e.g. "2023.11.20260509.0"
build/
customize.sh virt-customize hook (qcow2 path as $1)
detect-upstream.sh prints latest upstream version (follow latest/ 302)
.github/workflows/
release.yml calls build-libguestfs-image.yml on tag push
watch.yml daily cron, calls upstream-watch.yml
.gitignore repo-local override for global build/ exclusion
LICENSE GPL-2.0
Fork, branch, PR. Keep changes focused; the customize hook in particular is consumed by the shared pipeline so backward-compatible tweaks are preferred over rewrites.
Distributed under the GPL-2.0 License. See LICENSE.
Kevin Allioli — kevin@stackops.ch · @stackopshq
Project: open-img-cloud/amazon-linux-2023