On Proxmox VE or libvirt/KVM, use the qcow2 image instead: Deploy on KVM (qcow2).
Before you start
- vSphere 7.0 or later. The VM uses hardware version 17 and EFI firmware.
- Resources: 8 vCPU, 16 GB of RAM and a 120 GB disk, thin-provisioned.
- A static IPv4 address, with its gateway and your DNS servers. DHCP works, but Omni needs a fixed address: Talos nodes dial an endpoint that cannot follow a lease.
-
A domain for the appliance, for example
celum.example.com. The appliance serves the names below, and every one of them must resolve to its address. Create the records before the first boot; a wildcard record such as*.celum.example.comcovers them all.app·api·harbor·auth·omni·vault·pdns·pdns-api·home -
An SSH public key for root (
ssh-ed25519, orssh-rsaof at least 2048 bits). The appliance allows key login only. - Network access to the appliance on these ports:
Deploy
1
Download and check the OVA
The OVA comes as A good file prints
celum-appliance-VERSION.ova; see Where do I start? The email that brings it gives the release and the file’s SHA-256 checksum. Set both as variables, then check the file before you import it:OK, or True in PowerShell. Anything else means the file is damaged or is not the one the email describes: download it again, and do not import it.2
Import it into a Content Library
In the vSphere Client, open Content Libraries, choose a library and use Actions → Import Item with the
.ova file. A library item can be deployed again and again, each time with its own answers.You can also deploy the file once with Deploy OVF Template on a cluster or host. Do not just upload the .ova to a datastore: vCenter then shows no configuration form.3
Start the deploy wizard
Right-click the library item and choose New VM from This Template. Pick a name and folder, a compute resource, a datastore (thin provisioning is fine) and the port group the appliance serves on.
4
Fill in the configuration form
The Customize template page is the appliance’s own form.
On vCenter 8.0.1, the IP address and gateway fields can be missing from the form, a known vCenter issue. Set them as the hidden settings
guestinfo.celum.net_address and guestinfo.celum.net_gateway instead (next step).5
Set hidden settings, if you need any
The form shows only identity, networking and updates. Everything else takes its default:
- self-signed TLS;
- every component on: Harbor, Authentik, Omni, OpenBao and DNS;
- IAM enforced from the first boot;
- air-gap mode off.
guestinfo.celum.KEY with your value. A value set this way wins over the form.Give certificates and keys as base64 of the PEM file, on one line.
6
Power on and watch the first boot
The appliance configures itself in stages, as a systemd unit. Follow it on the console or over SSH:Each stage records when it is done. If one fails, fix the cause and run
celum-appliance bootstrap again: it resumes where it stopped.When it finishes, the generated credentials are printed on the console and written to /root/celum-appliance-credentials.txt.Configure it with a file instead
The field Full configuration (base64 YAML) takes a completeappliance.yaml, base64-encoded. When it is set, every other field is ignored, so put everything in the file, SSH keys included. The keys are the same as in the qcow2 guide, under content:, with the optional blocks in Optional settings. The appliance.yaml reference lists every key. In a file, iamEnabled defaults to false, and certificates and keys are PEM, not base64.
Use your own CA
Withtls.mode: selfsigned, the appliance creates a new CA on every deploy, so clients must trust a new one after a redeploy. To avoid that, give it a dedicated CA through tls_ca_cert and tls_ca_key. Its key is stored on the appliance, so do not use your root CA. Constrain it to the appliance’s domain, and give it pathlen:1:
Sign in
Every password is in
/root/celum-appliance-credentials.txt, and celum-appliance status prints them again.
- Trust the appliance CA. Copy
/etc/celum-appliance/tls/ca.crtand add it to your trust store. Until a client trusts it, it fails before HTTP:curlreportshttp=000, which looks like a network fault. - IAM is enforced from the first boot. The administrator is a member of
celum-admins, which Celum maps to itsAdministratorsgroup, so your first sign-in has full access. - Talos nodes managed by Omni must trust the appliance CA too, through a
TrustedRootsConfigdocument.
Change the configuration later
After the first boot,/etc/celum-appliance/appliance.yaml is the configuration, and the form is no longer read. Edit the file, check it with celum-appliance config, and apply it as described in Change the configuration later. A plain celum-appliance bootstrap skips every finished stage, so on its own it applies nothing.
To take changed vApp properties on purpose, run celum-appliance bootstrap --from-ovf --only 10 --force. It overwrites the stored appliance.yaml with the form’s answers. Then apply the file the same way.
To enlarge the disk, resize it in vSphere. The filesystem grows at the next boot.
Troubleshooting
Nothing resolves, or every page refuses
Nothing resolves, or every page refuses
Check DNS first: all the names under Before you start must resolve to the appliance. This is by far the most common cause.
The VM has no address, or SSH refuses
The VM has no address, or SSH refuses
Open the VM console and run
celum-appliance status. With a static address, both the IP address and the gateway must be set. SSH accepts only the keys from the form, or the root password if you set one.I am locked out of Celum
I am locked out of Celum
Set
iamEnabled: false under components.celum in /etc/celum-appliance/appliance.yaml, then run celum-appliance bootstrap --only 50 --force and celum-appliance bootstrap --only 80 --force.Talos nodes do not join Omni
Talos nodes do not join Omni
Omni needs a static address. With a self-signed certificate, the nodes must trust the appliance CA. Nodes behind NAT need
omni_wireguard set to an address they can reach. Omni also refuses every call until its EULA is accepted: set omni_eula_name, or accept it in the Omni interface.Both SSH fields were left blank
Both SSH fields were left blank
There is no account to log in with, so redeploying with a key is usually quickest. To recover the running VM instead:
- Reboot it and hold
Shiftto reach GRUB. - Press
e, appendinit=/bin/bashto thelinuxline, and pressCtrl-X. - Run
mount -o remount,rw /, then write your key to/root/.ssh/authorized_keys: mode0600, in a directory with mode0700. sshd ignores looser permissions.