Part of #9.
Problem
The DGX Spark gateway is commonly installed as a systemd user service. Without user lingering, the user manager stops at logout and takes LLooM down even though managed Docker inference runtimes may remain alive.
Persistence is currently an operational assumption rather than a verified installation invariant.
Proposed solution
- Add a supported service installation and diagnostic workflow for DGX Spark.
- Ensure or explicitly verify the selected persistence mechanism, including user lingering when a user service is used.
- Install an appropriate restart policy and verify the gateway after the login session ends.
- Validate required private interfaces and Docker availability before declaring the service ready.
- Report actionable failures when persistence cannot be configured automatically.
- Detect stale node identity or SSH alias metadata during cluster service checks.
Acceptance criteria
- Fresh installation enables and verifies gateway persistence without relying on an undocumented manual step.
lloom service doctor or the equivalent reports service enablement, active state, persistence, restart policy, listener, and configured node identity.
- Logout and reboot integration tests preserve gateway availability.
- An absent private interface causes retry/degraded startup rather than a silent permanent outage.
- Uninstall and explicit administrative stop remain supported.
Non-goals
- Requiring the public internet for local service startup.
- Restarting model containers merely because the gateway service restarts.
Part of #9.
Problem
The DGX Spark gateway is commonly installed as a systemd user service. Without user lingering, the user manager stops at logout and takes LLooM down even though managed Docker inference runtimes may remain alive.
Persistence is currently an operational assumption rather than a verified installation invariant.
Proposed solution
Acceptance criteria
lloom service doctoror the equivalent reports service enablement, active state, persistence, restart policy, listener, and configured node identity.Non-goals