Skip to main content

ouroboros-runner hello

hello prints the message this machine sends the deployment when it connects. That message says what the machine is and which jobs it can run. hello builds it exactly as run does, from the same checks of the machine, and checks it against the protocol before printing it. It needs no network and no enrollment.

Use it when a runner is refused, declines jobs you expect it to take, or shows the wrong cores or memory on the Build Farm page. It shows exactly what the machine claims about itself.

Synopsis​

ouroboros-runner hello [--no-shell] [--state-dir DIR]

Flags​

FlagVariableWhat it does
--no-shellOURO_RUNNER_NO_SHELLDescribes the machine as run --no-shell would: "shell": false. Pass it, or set the variable, to match how the service runs.
--state-dir DIROURO_RUNNER_STATE_DIRWhere to read the pool and the security mode from once enrolled. Defaults to /var/lib/ouroboros-runner. It is read without locking, so you can run hello while the agent runs.

Example​

On a machine that is not enrolled yet:

$ ouroboros-runner hello
{
"v": 1,
"type": "hello",
"id": "00000000000000000000000000",
"payload": {
"agent": {
"version": "0.8.0",
"protocol_min": 1,
"protocol_max": 1
},
"arch": "linux/x86_64",
"hostname": "shed-pi-01",
"capabilities": {
"docker": false,
"shell": true,
"ccache": false,
"cpus": 16,
"memory_mb": 29853
}
}
}

Once the machine is enrolled, the payload also names its pool and its security_mode, which is mtls or bearer_fallback.

FieldWhat it means
agentThe agent's version and the protocol range it speaks.
arch, hostnameThe platform and the machine's name.
capabilities.dockerWhether a Docker or Podman daemon answered. Without one, container jobs are declined.
capabilities.shellWhether shell jobs may run directly on this machine: false under --no-shell.
capabilities.ccacheWhether ccache is on the PATH.
capabilities.cpus, capabilities.memory_mbThe cores and installed memory.

The id is all zeros on purpose. The real connection gives every message a fresh id, so a printed one cannot be replayed.

What can go wrong​

  • "docker": false on a machine with Docker — the daemon did not answer this account. Check that the daemon is running and that the account can reach its socket. Run hello as the service's account to see what the agent sees.
  • this machine cannot describe itself legally: … — something the machine reports would break the protocol, and the error names the field. The deployment would refuse this hello too, so report the line with the output of version.