On every install.sh deployment observed so far, the runtime logs at startup:
[WARN] [Runtime] Run registry unavailable: failed to create run data dir anolis-data/runs: Permission denied
and the run journal (GET /v0/runs, run-scoped telemetry) is silently unavailable for the life of the process. Seen on both a 0.1.40 and a 0.1.41 boot of the same machine, so it is not version-specific.
Cause
The installed anolis-runtime.service sets User=anolis and no WorkingDirectory, so the process starts in /. The default run data dir in the config is the relative path anolis-data/runs, which resolves to /anolis-data/runs — not creatable by an unprivileged service user.
systemctl show anolis-runtime -p WorkingDirectory -p User
WorkingDirectory=
User=anolis
Why it matters
It fails soft: one WARN at boot, then nothing. An operator who never reads the journal has no idea runs are not being recorded, and phase_health in install.sh reports success. That is the same shape as #172 (a mis-provisioned service that the install reports as fine).
Fix direction
Either, in install.sh's systemd emitter: set WorkingDirectory=${PREFIX} and create ${PREFIX}/anolis-data/runs owned by ${ANOLIS_USER} — or render an absolute runs.data_dir under ${PREFIX} into the installed runtime.yaml. The second is more explicit and survives an operator editing the unit. Either way, phase_health should check that the run registry came up, not only that HTTP answers.
On every
install.shdeployment observed so far, the runtime logs at startup:and the run journal (
GET /v0/runs, run-scoped telemetry) is silently unavailable for the life of the process. Seen on both a 0.1.40 and a 0.1.41 boot of the same machine, so it is not version-specific.Cause
The installed
anolis-runtime.servicesetsUser=anolisand noWorkingDirectory, so the process starts in/. The default run data dir in the config is the relative pathanolis-data/runs, which resolves to/anolis-data/runs— not creatable by an unprivileged service user.Why it matters
It fails soft: one WARN at boot, then nothing. An operator who never reads the journal has no idea runs are not being recorded, and
phase_healthininstall.shreports success. That is the same shape as #172 (a mis-provisioned service that the install reports as fine).Fix direction
Either, in
install.sh's systemd emitter: setWorkingDirectory=${PREFIX}and create${PREFIX}/anolis-data/runsowned by${ANOLIS_USER}— or render an absoluteruns.data_dirunder${PREFIX}into the installedruntime.yaml. The second is more explicit and survives an operator editing the unit. Either way,phase_healthshould check that the run registry came up, not only that HTTP answers.