Wheelhouse docs

Identifying the system#

A monitoring agent, an Ansible fact-gather or a hostnamectl on a Wheelhouse box should see Wheelhouse — and should still be able to find out what it is built on. Both, in one file.

/etc/os-release
PRETTY_NAME="Wheelhouse OS 0.5.1"
NAME="Wheelhouse"
ID=wheelhouse
ID_LIKE="vyos debian"
VERSION="0.5.1"
VERSION_ID="0.5.1"
HOME_URL="https://releases.rhymelikedi.me/"
SUPPORT_URL="<TODO: owner>"
DOCUMENTATION_URL="<TODO: owner>"
BUG_REPORT_URL="<TODO: owner>"
VYOS_VERSION="rolling@a1b2c3d4e5f6"
KeyValueNotes
IDwheelhouseWhat a script should branch on.
ID_LIKEvyos debianSo a tool that knows either still does the right thing.
VERSION, VERSION_IDthe image versionSubstituted from @VERSION@ at build time.
VYOS_VERSION<branch>@<commit>The base, kept on purpose: support, monitoring and Ansible facts should be able to see it.
HOME_URLthe release host
SUPPORT_URL, DOCUMENTATION_URL, BUG_REPORT_URL<TODO: owner>No customer-reachable support address or public documentation host is established yet, and a URL that resolves to nothing would be worse than an obvious blank.

The fuller credit — the base commit, the container, and every installed package with its version — is in /usr/share/doc/wheelhouse/SOURCES.txt.

Why the flavor owns this file#

The upstream image builder writes its own hardcoded os-release into the chroot, and then runs the flavor's [[includes_chroot]] loop afterwards in the same function — so the flavor's entry is the last writer and wins. Nothing else competes for the path.

Setting the flavor's website_url / support_url keys would not work: the builder reads its own defaults there, not the merged build configuration.

Because that ordering is upstream's and could change, the branding hook asserts it:

sh
grep -q '^ID=wheelhouse$' /etc/os-release ||
    fail "/etc/os-release was not overridden by the flavor (see wheelhouse.toml)"

If upstream ever moves the write, the build fails instead of shipping an image that calls itself something else. The hook also copies /etc/os-release over /usr/lib/os-release, because Debian normally makes the first a symlink to the second and an include can leave the two disagreeing.

Where every version string comes from#

There are four, and they are not the same number.

StringSourceSeen at
The agent versionCompiled in: version in agent/main.go, set at build time with -ldflags "-X main.version=…"wheelhouse-agent version, and the wheelhouse_build_info{version} metric
The image versionVERSION / VERSION_ID in /etc/os-release, substituted at image buildhostnamectl, and anything reading os-release
The package versionThe .deb control filedpkg-query -W wheelhouse-agent, and the console banner's header
The base versionVYOS_VERSION in /etc/os-release; on a plain base box carrying only the package, VERSION_IDThe console banner's credit line, and show version

The release process keeps the agent version and the UI's compiled-in constant in step; VITE_WHEELHOUSE_VERSION at UI build time overrides the constant.

What show version reports#

The operational CLI's show version is the base's own command and reports the base's own fields, with the image version it was built under. GET /api/version passes that data through unchanged, and GET /api/system parses it into key-value pairs for the Dashboard and the System page.

The web UI resolves the product's identity through one constant rather than by reassembling it out of that output three different ways — which is what it used to do, with three disagreeing answers. It prefers a product block from the agent the moment one appears there; today no endpoint returns one, so the constant is the source.

Reading it#

bash
cat /etc/os-release
hostnamectl                                   # Operating System: Wheelhouse OS 0.5.1
dpkg-query -W -f='${Version}\n' wheelhouse-agent
wheelhouse-agent version
cat /usr/share/doc/wheelhouse/SOURCES.txt     # image only

In Ansible, ansible_distribution is Wheelhouse and ansible_distribution_version is the image version; the base is ansible_facts['os_release']['VYOS_VERSION'] if your fact-gather keeps unknown keys.

See also#

Checked against#

packaging/iso/wheelhouse.toml, packaging/iso/branding/50-wheelhouse-brand.chroot, packaging/iso/build-iso.sh, packaging/firstboot.sh, packaging/console-banner.sh, ui/src/components/product.ts, agent/main.go (version, handleHealth, handleVersion), agent/opmode.go (handleSystem), agent/metrics.go, CHANGELOG.md.

Updated 2026-09-02 os-release versions identity