Wheelhouse docs

Environment variables#

The agent reads six environment variables, and every one of them is only a default for a flag. Nothing is configured by environment alone: if the flag is given on the command line, the environment is ignored. Five of the six carry a secret, and each has a -file counterpart that is preferred, because the environment of a process is readable through /proc by anyone who can read the process, and a systemd unit that sets one is a world-readable file with a credential in it.

What the agent reads#

VariableSets the default forHolds
VYOS_API_KEY--api-keyThe router's own API key. Root-equivalent on that router.
WHEELHOUSE_ADMIN_TOKEN--admin-tokenThe break-glass Bearer token: admin role, no account behind it.
WHEELHOUSE_LICENSE--license-keyA licence key.
WHEELHOUSE_INITIAL_PASSWORD--initial-admin-passwordThe first-run admin password. Read only when the state file has no users.
WHEELHOUSE_OIDC_ISSUER--oidc-issuerThe identity provider's issuer URL. Not a secret, but it is the one that decides whether single sign-on is on at all.
WHEELHOUSE_OIDC_CLIENT_ID--oidc-client-idThe OIDC client id.
WHEELHOUSE_OIDC_SECRET--oidc-client-secretThe OIDC client secret.

That is seven rows for six secrets plus one identifier; the source is one line each in registerFlags():

bash
grep -o 'os.Getenv("[A-Z_]*")' agent/main.go | sort -u

What the file forms do instead#

Instead ofUseMissing file behaviour
VYOS_API_KEY--api-key-fileFatal. Exit 2.
WHEELHOUSE_ADMIN_TOKEN--admin-token-fileWarns and continues with no break-glass token.
WHEELHOUSE_LICENSE--license-key-fileWarns and continues unlicensed.
WHEELHOUSE_INITIAL_PASSWORD--initial-admin-password-fileWarns and continues; the agent generates a password.
WHEELHOUSE_OIDC_SECRET--oidc-client-secret-fileWarns and continues; startup then fails validation if an issuer is configured.

A file that exists but is group- or world-readable is always fatal, whichever flag named it:

api-key-file (/config/wheelhouse/api-key) is mode 644; it must not be readable by
group or other (chmod 600)

An empty or whitespace-only file leaves the flag's value alone rather than blanking it.

The build-time variable#

VariableRead byEffect
VITE_WHEELHOUSE_VERSIONThe UI's Vite buildStamps the version string the web UI displays. Falls back to the constant in ui/src/components/product.ts, which the release process keeps in step with version in agent/main.go.

The agent's own version is compiled in, not read from the environment. The release build sets it with a linker flag:

bash
go build -trimpath -ldflags="-s -w -X main.version=1.2.3" -o wheelhouse-agent .

The same technique overrides the licence public keys compiled into the binary (-X main.licensePublicKeys=<kid>:<base64>); see Licence keys and states.

Variables the other programs read#

These are not the agent. They belong to the build and lab scripts and never run on a customer's router.

VariableRead byMeaning
DEBpackaging/iso/build-iso.shRequired. The .deb to bake into the image.
VERSIONbuild-iso.shImage version; default dev.
BUILD_DIRbuild-iso.shWorking directory; default /srv/wheelhouse-build.
VYOS_BRANCHbuild-iso.shvyos-build branch and container tag; default rolling.
VYOS_BUILD_REPObuild-iso.shWhere vyos-build is cloned from; default the upstream GitHub repository.
VYOS_COMMITbuild-iso.shThe pinned vyos-build commit. head follows the branch instead and prints a warning that the result must not be shipped.
VYOS_BUILD_IMAGEbuild-iso.shThe build container; default vyos/vyos-build:$VYOS_BRANCH.
BUILD_BYbuild-iso.shThe --build-by string recorded in the image.
SOURCE_DATE_EPOCHpackaging/build-deb.pyTimestamp stamped into every archive member, for a reproducible .deb.
RELEASE_SIGNING_KEYinstall/sign.shThe GPG key to sign with. No key has been generated; without it, sign refuses rather than inventing one.
GPG_PASSPHRASEsign.shEnables batch signing on a runner.
WHEELHOUSE_PUBKEYsign.shArmoured public key to verify against, instead of the caller's keyring.
REQUIRE_SIGNATUREsign.shSet to 1 to make verify fail when nothing is signed.
API_URL, API_KEY, ADMIN_TOKEN, BIND_ADDR, LOCAL_BINinstall/install.shDefaults for the lab installer's flags.

See also#

Checked against#

agent/main.go (registerFlags, loadSecretFiles), ui/src/components/product.ts, packaging/iso/build-iso.sh, packaging/build-deb.py, install/sign.sh, install/install.sh, docs/deploy.md.

Updated 2026-09-02 cli environment secrets