LAB
Lab control plane — deploy, OTA contract, Device Agent
Recorded 14–15 September 2026 on 80.79.5.173 (Ubuntu 24.04, user sus).
Single-writer evaluation stack with production posture on this host
(non-demo Fleet, HTTPS). Not a multi-replica HA control plane.
What runs where¶
| Piece | systemd | URL / notes |
|---|---|---|
| Fleet control plane | zyvor-fleet.service |
https://80.79.5.173:18090/ — ZYVOR_FLEET_DEMO=0, no --demo |
| Fleet site agent | zyvor-fleet-agent.service |
enrolls against the control plane |
| Nodra CP (sibling) | nodra-server.service |
https://80.79.5.173:18447/ (TLS) |
| Device Agent (sibling) | zyvor-device-agent.service |
http://127.0.0.1:9188 — lab-surrogate only |
| Zyvor OTA demo (sibling) | zyvor-otad-demo.service |
Unix socket; simulator backend |
| relay-edge (sibling) | relay-edge.service |
https://80.79.5.173:18086/ui/ — EDGE_REQUIRE_AUTH=1 |
:8080 was already Kryton — pass --port 18090 to scripts/deploy-remote.sh.
Login: admin@zyvor.local / password from /etc/zyvor-fleet/fleet.env
(ZYVOR_FLEET_ADMIN_PASSWORD). Rotate before shared use.
Deploy¶
./scripts/deploy-remote.sh 80.79.5.173 sus --key --port 18090
# Health: GET /readyz
Ensure non-demo + direct TLS so Zyvor OTA can use fleet_url
(the OTA client rejects http://):
# Production-shaped lab unit (no --demo):
# ExecStart=/usr/local/bin/fleetd --listen :18090 --data /var/lib/zyvor-fleet/state.json \
# --tls-cert /etc/zyvor-fleet/tls/cert.pem --tls-key /etc/zyvor-fleet/tls/key.pem
# Environment: ZYVOR_FLEET_DEMO=0
Trust the same certificate from fleet-agent (host CA store or a custom
pool). Without that, enrollment fails with x509: certificate signed by
unknown authority.
OTA contract on this host¶
curl -sk -c cj -b cj -X POST https://127.0.0.1:18090/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d "{\"email\":\"admin@zyvor.local\",\"password\":\"$ZYVOR_FLEET_ADMIN_PASSWORD\"}"
curl -sk -b cj -H 'X-Zyvor-Request: 1' -H 'Content-Type: application/json' \
-d '{"deviceId":"NLDW4-4-16-36","name":"lab-host"}' \
https://127.0.0.1:18090/api/v1/ota/devices
Device (OTA agent): GET /v1/devices/{id}/assignment, POST …/events.
Full contract: OTA_CONTRACT.md. ACKs are contiguous.
Lab result: signed job committed on the OTA simulator; after aligning
ackedSequence, Fleet drained the outbox (pending_events=0).
Device Agent inventory merge¶
fleet-agent \
--server https://127.0.0.1:18090 \
--name lab-nldw4 \
--enrollment-token … \
--device-agent-url http://127.0.0.1:9188
Site lab-nldw4 came online with zyvor.device_agent.reachable=true.
Device Agent on this host is x86 lab-surrogate — not Minewing HIL.
Ops evidence on this host¶
| Drill | Evidence |
|---|---|
| Backup / restore / TLS / non-demo | ops-checklist.md |
| Abbreviated WAN cut | evidence/qualification/lab/20260914T162245Z/fleet-wan-loss.log |
| Sibling Nodra TLS + WAN/disk | Nodra ops-checklist.md |
| Sibling relay-edge auth+TLS | relay-edge ops-checklist.md |
Qualify vs this lab¶
make qualify is the software matrix. This host also carries signed
ops rows (see QUALIFICATION.md). It does not claim
Fleet HA or multi-day multi-site soak.