-
Notifications
You must be signed in to change notification settings - Fork 0
glkvm onboarding
Operator runbook for the GL.iNet GLKVM fork (GL-RM1 "Comet", GL-RM1PE "Comet PE"). The build/protocol reference is
driver-features.md; this is what to expect and the ordered steps to get working, seeded from the real failures three of these units produced during live bring-up.
GLKVM is kvm-pilot's primary live-tested target — most of the honesty rules in this project exist because a GL unit reported something untrue.
Four things surprise every newcomer, and all four are the device, not the tool:
-
The REST API ships disabled. Out of the box every
/api/*returns 404. Nothing works until you enable it, and a firmware upgrade can silently revert it. -
The video encoder is on-demand. It runs only while a video client is
connected. On an idle unit
snapshotwould 503 forever — kvm-pilot works around this by connecting a WebSocket stream client first (~1.5 s), but it is why the first snapshot is slower than the rest. -
Power readings are not trustworthy. ATX reports
enabled=falseand "off" while the host is plainly running. This is the project's canonical false-report case: never confirm a power action from the ATX read — look at the screen. -
It is blind below the OS on a laptop. HDMI capture only sees what the
host routes to that output; a laptop routes firmware video to its internal
panel. BIOS, POST and GRUB will not appear. See
pre-boot video
— on a laptop you want
amt, not this.
- The appliance's IP (the KVM's address — not the managed host's).
- Web-console credentials (
adminby default — change it). -
pip install --pre kvm-pilot. - Optional: appliance-SSH (
root@<kvm-ip>, key-based) for the diagnostics REST cannot see — see Hazards below.
SSH to the appliance (or use the web console's terminal) and uncomment the kvmd block in:
/etc/kvmd/nginx-kvmd.conf
then restart kvmd. Until you do, kvm-pilot reports ApiDisabledError and names
this file — that error is the tool telling you it got a 404 on every endpoint,
not that the device is unreachable.
[hosts.mykvm]
host = "10.0.0.11"
driver = "glkvm"
user = "admin"
# passwd via KVM_PILOT_PASSWD, not here
verify_ssl = false # GL ships a self-signed certificatedriver is optional — leaving it out makes kvm-pilot probe the device and
identify the GL fork from its proprietary /api/upgrade/version endpoint
(#235). Pinning it skips the probe.
kvm-pilot healthcheck --profile mykvmThis is the gate, not a formality. Expect on a healthy GL-RM1PE:
| Result | Meaning |
|---|---|
api-reachable OK |
step 1 worked |
recovery-path CRITICAL
|
normal unless ATX is physically wired — see below |
preboot-video OK (capture) |
expected; the laptop caveat above |
video-signal INFO "streamer idle" |
expected on an idle unit, not a fault |
firmware-quirks WARNING |
the four quirks below apply |
The recovery-path CRITICAL is the one to take seriously: it means no
out-of-band reset exists. If the target hangs, you have no remote way to
power-cycle it. Wire the ATX cable to the host's front-panel header, or accept
that recovery needs hands.
kvm-pilot snapshot --profile mykvm screen.jpg # first one is slow (encoder wake)
kvm-pilot capabilities --profile mykvm # also prints the video scopePower (if ATX is wired), HID keyboard/mouse, snapshots + vision classification, virtual media (ISO mount), GPIO, event streaming, device logs, and — via appliance-SSH — encoder diagnostics and a gated appliance reboot.
| Symptom | Cause | Fix |
|---|---|---|
Every /api/* returns 404 |
REST API disabled (ships that way; upgrades revert it) | Step 1. Re-check after any firmware upgrade |
snapshot 503s forever on an idle unit |
On-demand encoder, no video client | kvm-pilot wakes it automatically; if it persists the encoder is wedged — see below |
| Snapshot returns an undecodable frame | H.264 at native resolution — a lone NAL mislabeled image/jpeg
|
Lower the capture resolution (EDID) to 1024×768, or upgrade to V1.9.1 where JPEG works |
| Power says "off" while the host is running | ATX false-report — the canonical one | Never trust it. Confirm power visually via snapshot
|
power returns HTTP 500 |
ATX not wired to the host header | Wire it, or use Wake-on-LAN / a BMC path |
| Load average ~10 on an idle appliance | RV1126 video threads park in D-state |
Not a health signal. kvm-pilot appliance loadavg says so in its own output |
| Encoder wedged (503 + D-state threads) | RV1126 hardware pipeline stuck above 1080p (#107) |
kvm-pilot appliance reboot — the only fix; REST cannot see or clear it |
| HID stops reaching the target | USB gadget de-enumerated |
kvm-pilot recover-hid; if it fails the cable is charge-only or in a non-host port |
| Remote firmware flash reports success, nothing happens | GL's /api/upgrade/start is a no-op on real RM1PE (#94/#95) |
Flash from the GL web console. kvm-pilot detects the no-op and says so |
| Target went dark mid-session | Guest idle-suspend | Wake-on-LAN first (kvm-pilot wake), then disable idle-suspend on the host |
-
TLS is self-signed, so
verify_ssldefaults false — credentials cross an unauthenticated channel. Pin the device certificate withssl_ca_fileon any network you do not fully control, and never expose the unit to the internet. -
Change the default password.
healthcheck'sdefault-credscheck fails loudly if you have not; repeated default-credential logins can lock the account. -
Appliance-SSH is a second trust domain —
rooton the KVM itself, distinct from the kvmd REST credentials. It is opt-in and key-only on purpose. - Keep the config file
chmod 600if it holds a password; kvm-pilot warns when it is group/other-readable.
-
driver-features.md— per-capability reliability and testing level -
troubleshooting.md·configuration.md -
test-plan.md— the fleet-sweep procedure these hazards came from
- Intel AMT onboarding runbook
- GLKVM onboarding runbook
- IPMI onboarding runbook
- Unattended Linux installs
- Remote firmware update
- Troubleshooting & FAQ
- CLI reference
- Configuration
- Driver features
- Architecture
- Redfish reference
- Intel AMT vPro reference
- Firmware registry
- Claude skill
- Skill playbook: interfaces
- Skill playbook: recovery
- Skill playbook: setup & gates
- Skill playbook: Linux installs
- Skill playbook: target context
- Skill playbook: Python library
- MCP server
- Hardware compatibility