Packer build for the zCore Appliance — a Debian-based OVA that provides the shared infrastructure services for a zPod environment.
- OS: Debian 13.7 "Trixie"
- Format: OVF/OVA (built on a remote ESXi host via
vmware-iso) - First-boot config: driven by VMware OVF properties
- System disk: LVM (
/bootpartition,vg/swap8 GB,vg/rooton the rest); first boot growsrootto the disk,zcore-init.sh --extend-diskdoes it again after a vSphere resize
Latest builds are available here:
What changed in each version: GitHub releases
(one per Debian point release, v13.7 is the zCore built on Debian 13.7) or CHANGELOG.md.
The appliance bundles the core services a zPod relies on:
| Service | Role |
|---|---|
| dnsmasq | DNS resolver + DHCP for the zPod management subnet |
| chrony | NTP server (serves time to all zPod subnets / VLANs) |
| NFS | nfs-kernel-server — exports /FILER/STORAGE01/* from a data disk |
| Traefik | TLS reverse proxy for the dashboard and zBoxAPI |
| zBoxAPI | API to manage zPod VLANs (/zboxapi) |
| FRR | Routing daemon (installed, disabled — enabled on demand) |
IP forwarding is enabled, so the appliance also routes between the zPod VLANs.
zBoxTUI is baked into the image at build
time but not wired to any console by default: every VT boots on the stock
Debian getty. The guestinfo.zboxtui OVF property (boolean, default false)
decides at first boot:
True→/sbin/zcore-zboxtui-setup.sh --enablewires tty1 to the zBoxTUI dashboard (kmscon) and tty2 to a truecolor kmscon login shell, then switches the active VT to tty1.- anything else →
--disablepurges kmscon and the zBoxTUI venv to reclaim the space the build baked in. tty1–tty6 stay on stock getty.
Toggle later on a running appliance with --enable / --disable. See the
zBoxTUI INSTALL.md
for operator and security notes.
- eth0 — management interface (static from OVF properties, or DHCP fallback)
- eth1 — zPod VLAN trunk (MTU 1700 for VXLAN/Geneve):
- internal non-routed VLANs
10 / 20 / 30→172.16.10/20/30.1/24 - routed
/26public subnets on VLANs64 / 128 / 192
- internal non-routed VLANs
Requirements: packer, VMware ovftool, and a reachable ESXi build host.
-
Copy
zcore-builder.json.sampletozcore-builder.jsonand fill in your ESXi build host details. (The realzcore-builder.jsonis.gitignored so credentials are never committed.) -
Run the build:
./build-zcore.sh
This runs packer build against zcore.json with the zcore-13.7.json version
file, then exports the OVA. The OVA is named after APPLIANCE_VERSION in build-zcore.sh,
not after the var file: 13.7 lands in output-zcore-13.7/zcore-13.7.ova (mode 644), and a
respin 13.7.1 of the same Debian release in output-zcore-13.7.1/zcore-13.7.1.ova.
python3 tools/release.py 13.8 --pushCreate zcore-13.8.json and build the OVA first. The cut moves [Unreleased] in
CHANGELOG.md under a [13.8] heading, points build-zcore.sh at the new var file,
commits, tags v13.8 and pushes; the tag publishes the section as the GitHub release.
python3 tools/release.py --check is what CI runs on every push. See
tools/README.md.
This should only be used through zPodFactory.