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.
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"| Key | Value | Notes |
|---|---|---|
ID | wheelhouse | What a script should branch on. |
ID_LIKE | vyos debian | So a tool that knows either still does the right thing. |
VERSION, VERSION_ID | the image version | Substituted 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_URL | the 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:
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.
| String | Source | Seen at |
|---|---|---|
| The agent version | Compiled 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 version | VERSION / VERSION_ID in /etc/os-release, substituted at image build | hostnamectl, and anything reading os-release |
| The package version | The .deb control file | dpkg-query -W wheelhouse-agent, and the console banner's header |
| The base version | VYOS_VERSION in /etc/os-release; on a plain base box carrying only the package, VERSION_ID | The 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#
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 onlyIn 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#
- The ISO — how the file is written and asserted.
- The console banner — the two version strings it prints.
- What first boot does — where the banner's base credit comes from.
- Channel index format — what version is available.
- Endpoint index —
/health,/api/version,/api/system. - Built on VyOS
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.