2026-05-16 00:17:08 +02:00
|
|
|
# ADR 0015: User Service Installation
|
|
|
|
|
|
|
|
|
|
## Status
|
|
|
|
|
|
|
|
|
|
Accepted.
|
|
|
|
|
|
|
|
|
|
## Decision
|
|
|
|
|
|
2026-07-18 15:23:20 +02:00
|
|
|
Geth provides direct `geth daemon install|start|stop|status|uninstall` commands
|
|
|
|
|
for the common lifecycle. `daemon install` initializes the selected geth home,
|
|
|
|
|
installs and enables the user service, and starts it immediately. The existing
|
|
|
|
|
`geth daemon service ...` commands remain available for compatibility, explicit
|
|
|
|
|
manager selection, definition previews, and install-without-start behavior.
|
|
|
|
|
Status probes return a normalized state. An inactive or missing service is a
|
|
|
|
|
successful inspection result, while a service-manager access problem is
|
|
|
|
|
reported as `unknown` with the manager's diagnostic rather than mislabeled as a
|
|
|
|
|
stopped daemon.
|
2026-05-16 00:17:08 +02:00
|
|
|
|
|
|
|
|
The service is always installed as a user service:
|
|
|
|
|
|
|
|
|
|
- Linux: systemd user unit, `~/.config/systemd/user/geth.service`
|
|
|
|
|
- macOS: launchd user agent, `~/Library/LaunchAgents/local.geth.daemon.plist`
|
|
|
|
|
- Windows: per-user scheduled task named `geth-daemon`
|
|
|
|
|
|
|
|
|
|
The service runs the same single binary as `geth daemon run` and preserves
|
|
|
|
|
`GETH_HOME` in the service environment.
|
|
|
|
|
|
|
|
|
|
## Consequences
|
|
|
|
|
|
|
|
|
|
There are still no separate `gethd` or `gethctl` binaries. Installation does not
|
|
|
|
|
require privileged system service access. Linux users who need the daemon before
|
|
|
|
|
interactive login may still need platform-specific user-service setup such as
|
|
|
|
|
systemd lingering.
|
|
|
|
|
|
|
|
|
|
Future service managers can be added behind the same service-manager enum and
|
|
|
|
|
CLI shape.
|