Harden daemon service installation

This commit is contained in:
Eric Wendland 2026-07-18 16:31:59 +02:00
commit 678865bfdc
6 changed files with 784 additions and 46 deletions

View file

@ -25,7 +25,8 @@ Keep the daemon running. In a second shell, reuse the home it printed:
Ctrl-C stops the daemon and removes its temporary state. For a persistent
background node, run `geth daemon install`; this initializes local state,
installs a service for the current user, and starts it immediately. Before
installs a service for the current user, starts it, and waits for the daemon to
answer on local control. Before
enrolling other machines, use `geth guide owner-setup`; it records an
OpenSSH admin public key as the trust anchor and signs the initial keychain
statements without copying the private key into geth state.
@ -92,6 +93,7 @@ The daemon can also install itself as a user service:
```sh
geth daemon install
geth daemon status
geth daemon logs
geth daemon uninstall
```
@ -100,6 +102,16 @@ agents on macOS, and per-user scheduled tasks on Windows. These are user-level
services, not system services. The longer `geth daemon service ...` family is
retained for compatibility and advanced options.
`daemon install` canonicalizes and validates the executable recorded in the
service definition. When invoked from a Cargo `target` directory or another
temporary location, it atomically copies the binary into
`<geth-home>/bin/geth` first so cleanup cannot leave a broken service. Use
`--allow-transient-binary` only for deliberate development setups. Installation
waits up to 30 seconds for local daemon readiness by default; use `--no-wait` or
`--timeout-ms` when automation needs different behavior. `geth daemon logs`
shows the systemd user journal or the selected home's launchd/Windows log files;
add `--follow` to stream new entries.
## Transport And SSH
All remote node-to-node geth communication is designed to happen over Iroh only.
@ -139,8 +151,9 @@ The bootstrap implementation provides:
- `geth init`
- `geth init --admin-key <public-key> --signing-key <private-key> --node-name <name>`
- `geth daemon run [--ephemeral]`
- `geth daemon install|start|stop|status|uninstall`
- `geth daemon install|start|stop|status|logs|uninstall`
- `geth daemon service install|uninstall|start|stop|status|print`
- `geth config path|show|validate|set`
- `geth status`
- `geth wait daemon|peer|sync --timeout-ms <ms>`
- `geth doctor`