Packer templates for building golden VM images with the tooling already installed.
Build a native Proxmox template ready to clone, or a portable qcow2/raw image for bare metal or another hypervisor. It's the same build either way, you pick the output format at build time. The images ship generic, with no baked-in hostname, IP, or SSH keys, so cloud-init handles per-machine setup on first boot wherever they run.
Provisioning is backed by PDS (Portable Deploy Suite), a single apt package of install and config functions, instead of copy-pasted scripts in every repo. Templates select and apply the pieces they want, so images stay consistent and easy to maintain.
- Batteries included: tooling installed via the PDS package (zsh + Powerlevel10k,
kubectl, SSH hardening, a custom MOTD, and more), instead of per-repo script sprawl. - One template, multiple outputs: a native Proxmox template or a portable qcow2/raw for bare metal and other hypervisors, chosen at invocation.
- Generic golden images: identity (hostname, IP, SSH keys) is applied on first boot via cloud-init, never baked in.
- Clean for cloning:
machine-idand cloud-init state are reset, so every machine boots fresh and unique. - Easy to extend: add a new distro or role without reinventing the provisioning.
| Path | What it builds |
|---|---|
packer/ubuntu/ |
Ubuntu cloud image + PDS tooling, output as a Proxmox template or qcow2/raw. |
armbian-build-framework/ |
ARM SBC images (Rock 5A, Raspberry Pi 4B). |
Prerequisites: Packer, plus either a Proxmox host (for the native template) or QEMU (for a local image).
cd packer/ubuntu
packer init .
# Build a clone-ready Proxmox template (cloud-init drive attached)
packer build -only='proxmox-clone.ubuntu' -var-file=variables.pkrvars.hcl .
# ...or build a portable qcow2/raw image
packer build -only='qemu.ubuntu' -var-file=variables.pkrvars.hcl .For the Proxmox output, set your connection + storage variables first (see
packer/ubuntu/readme.md). Never commit your Proxmox API token, pass it
via an environment variable or an untracked vars file.
From a build to a running machine:
- Packer builds a generic golden image with all your tooling already installed.
- Deploy it: clone the Proxmox template, or write the qcow2/raw image to a disk or another hypervisor.
- cloud-init applies per-machine identity on first boot (hostname, IP, SSH keys).
- (optional) Terraform (bpg/proxmox) automates the Proxmox clone path when you want it.
Ubuntu now, more distros to follow.
GPLv3, see LICENSE. Fork it, make it yours.
Design notes and rationale for contributors live in docs/.