Three things version independently: the per-host agent, the server, and cloud-hypervisor. None of them touch running VMs.
The fleet overview shows each host's agent version. When the server knows a
newer release (it polls https://eitri.sh/dl/latest/manifest.json daily), an
↑ button appears next to hosts that are behind. Clicking it tells that one
agent to upgrade itself:
eitri-agent.prev—and re-execs. The process keeps its PID; running VMs
are untouched and stay under the agent's care throughout.If a download fails, nothing is swapped; click again to retry. To roll back by
hand, stop the agent, move eitri-agent.prev back over the binary, and start
it again.
Requirements. The button lights up only when the running agent reports a
release version (vX.Y.Z) or a pre-release of one (vX.Y.Z-pre.N, which orders
below the release it leads to)—agents built from an untagged or dirty tree
report a git hash instead and are never offered upgrades. The server needs
release_manifest_url reachable; set it to "" in the server config to
disable upgrade checks entirely.
The console banner links here when the published release differs from the running server's version. Server upgrades are manual and downtime is fine—agents keep reconciling and VMs keep running while it's away:
eitri-server.A newer server with older agents is safe: new fields in the sync protocol are ignored by agents that predate them.
Swap /usr/local/bin/cloud-hypervisor on the host. New and restarted VMs use
the new binary; running VMs keep their old process until they stop. There is
no live handover for running guests.
The agent runs under systemd (eitri-agent.service). The unit sets
KillMode=process—that line is load-bearing: the default would kill every
cloud-hypervisor guest in the unit's cgroup whenever the agent stops. Logs:
journalctl -u eitri-agent.