signalk-container 1.11.1 → 1.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.coderabbit.yaml +234 -115
- package/AGENTS.md +13 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +99 -27
- package/dist/runtime.js.map +1 -1
- package/eslint.config.ts +27 -0
- package/package.json +2 -1
package/.coderabbit.yaml
CHANGED
|
@@ -2,160 +2,279 @@ language: en-US
|
|
|
2
2
|
|
|
3
3
|
reviews:
|
|
4
4
|
profile: assertive
|
|
5
|
-
# dist/ is the TS+webpack build output; checked in for the App Store
|
|
6
|
-
# install path, but never authored. Exclude here so the review engine
|
|
7
|
-
# never opens it.
|
|
8
|
-
path_filters:
|
|
9
|
-
- "!dist/**"
|
|
10
5
|
auto_review:
|
|
11
6
|
enabled: true
|
|
7
|
+
auto_incremental_review: true
|
|
12
8
|
drafts: false
|
|
9
|
+
# Skip mechanical PRs that don't benefit from review.
|
|
10
|
+
# `chore(release):` PRs are version-bump-only; the substantive
|
|
11
|
+
# change was already reviewed on its own PR. Dep-bump PRs come from
|
|
12
|
+
# automation that has its own contract with the registry. WIP and
|
|
13
|
+
# explicit skip markers are author opt-outs.
|
|
14
|
+
ignore_title_keywords:
|
|
15
|
+
- "chore(release):"
|
|
16
|
+
- "chore(deps):"
|
|
17
|
+
- "chore(deps-dev):"
|
|
18
|
+
- "[skip review]"
|
|
19
|
+
- "WIP"
|
|
20
|
+
ignore_usernames:
|
|
21
|
+
- "release-please[bot]"
|
|
22
|
+
- "renovate[bot]"
|
|
23
|
+
- "dependabot[bot]"
|
|
24
|
+
- "github-actions[bot]"
|
|
25
|
+
|
|
26
|
+
# dist/ is the TS + Vite build output; checked in for the App Store
|
|
27
|
+
# install path, but never authored. Everything under node_modules and
|
|
28
|
+
# generated lockfiles are also off-limits to review.
|
|
29
|
+
path_filters:
|
|
30
|
+
- "!dist/**"
|
|
31
|
+
- "!**/node_modules/**"
|
|
32
|
+
- "!**/package-lock.json"
|
|
33
|
+
- "!**/yarn.lock"
|
|
34
|
+
- "!**/pnpm-lock.yaml"
|
|
35
|
+
- "!**/*.min.js"
|
|
36
|
+
- "!**/*.min.css"
|
|
37
|
+
|
|
13
38
|
high_level_summary_instructions: |
|
|
14
|
-
Write
|
|
15
|
-
|
|
16
|
-
Example: "This PR adds feature X" instead of "This PR added feature X"
|
|
39
|
+
Write summaries in present tense. Describe what the code does, not
|
|
40
|
+
what it did. Skip filler like "This PR" — go straight to the change.
|
|
17
41
|
|
|
18
42
|
path_instructions:
|
|
19
43
|
- path: "**/*"
|
|
20
44
|
instructions: |
|
|
21
|
-
##
|
|
22
|
-
|
|
23
|
-
signalk-container ships as an npm package consumed by Signal K
|
|
24
|
-
plugins. The maintainer owns the release process — version bumps
|
|
25
|
-
happen in their own `chore(release): X.Y.Z` PR, separate from
|
|
26
|
-
feature/fix work. **Do not include `package.json` version changes
|
|
27
|
-
in feature or fix PRs.** Flag any PR that mixes a `"version"` bump
|
|
28
|
-
with non-release changes.
|
|
29
|
-
|
|
30
|
-
Other workflow rules to enforce:
|
|
31
|
-
- Branch names use hyphens, not slashes (`fix-something`, not
|
|
32
|
-
`fix/something`). The Signal K server convention applies here.
|
|
33
|
-
- Angular conventional commits: `<type>(<scope>): <subject>`.
|
|
34
|
-
Subject ≤ 50 chars, imperative mood, no period.
|
|
35
|
-
- No `Co-Authored-By` lines and no "Generated with Claude Code"
|
|
36
|
-
attribution in commit messages or PR bodies.
|
|
45
|
+
## Scope
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
Focus on files changed since `master`. Think carefully about how
|
|
48
|
+
changes interact with existing code, tests, and documentation —
|
|
49
|
+
not just the diff in isolation.
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
replacement with a comment explaining *why*, not *what*.
|
|
51
|
+
signalk-container is a **Signal K server plugin** that runs
|
|
52
|
+
_inside_ signalk-server's process and exposes a cross-plugin API
|
|
53
|
+
on `globalThis.__signalk_containerManager`. Other plugins
|
|
54
|
+
(signalk-questdb, signalk-grafana, signalk-backup, mayara, …)
|
|
55
|
+
call it to spin up and lifecycle-manage their own containers
|
|
56
|
+
without each implementing their own dockerode integration. The
|
|
57
|
+
plugin also ships a React config panel via Module Federation.
|
|
48
58
|
|
|
49
|
-
|
|
59
|
+
Reviews must respect that this is **public infrastructure** for
|
|
60
|
+
a plugin ecosystem — every change to `ContainerManagerApi` in
|
|
61
|
+
`src/types.ts` is a semver-significant contract change and must
|
|
62
|
+
carry JSDoc that consumer plugins can see via TypeScript
|
|
63
|
+
intellisense (the consumer side accesses the API through
|
|
64
|
+
`(globalThis as any).__signalk_containerManager` so JSDoc is
|
|
65
|
+
the only documentation surface they get).
|
|
50
66
|
|
|
51
|
-
|
|
52
|
-
this PR but are no longer present — removed variables, old function
|
|
53
|
-
names, deleted files, superseded approaches. These are confusing
|
|
54
|
-
to future readers. Flag any comments, docs, or code that refer to
|
|
55
|
-
something not present in the current state of the branch.
|
|
67
|
+
## ESM / TypeScript strict / Node 22+
|
|
56
68
|
|
|
57
|
-
|
|
69
|
+
- All new code in TypeScript. No new `.js` source files.
|
|
70
|
+
- tsconfig is strict. Avoid `any`. The one allowed `any` is
|
|
71
|
+
`(globalThis as any).__signalk_containerManager` on the
|
|
72
|
+
consumer side — see above.
|
|
73
|
+
- Reuse types from `src/types.ts` rather than redefining.
|
|
74
|
+
`ContainerConfig`, `ContainerRuntimeInfo`,
|
|
75
|
+
`ContainerResourceLimits`, `LiveContainerConfig`,
|
|
76
|
+
`PortBinding`, etc. are the public vocabulary.
|
|
58
77
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
values that are likely to fall out of sync as the code evolves.
|
|
62
|
-
Documentation should describe architecture and how things work
|
|
63
|
-
conceptually — not step-by-step instructions that duplicate or
|
|
64
|
-
shadow the code itself.
|
|
78
|
+
## Runtime invariants (read these before suggesting changes to
|
|
79
|
+
## src/runtime.ts or src/containers.ts)
|
|
65
80
|
|
|
66
|
-
|
|
67
|
-
`
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
any doc method whose JSDoc-style signature has drifted from the
|
|
71
|
-
type.
|
|
81
|
+
signalk-container shells out to `podman`/`docker` via
|
|
82
|
+
`execRuntime` (`src/runtime.ts`). When reviewing changes there
|
|
83
|
+
or in `src/containers.ts`, `src/jobs.ts`, `src/resources.ts`,
|
|
84
|
+
or `src/updates/`:
|
|
72
85
|
|
|
73
|
-
|
|
86
|
+
- Every new external command should accept an injectable `exec`
|
|
87
|
+
parameter so tests can stub it (see the existing
|
|
88
|
+
`ExecFn = execRuntime` pattern). Flag new direct
|
|
89
|
+
`execRuntime` calls in exported helpers.
|
|
90
|
+
- Prefer Go-template format strings
|
|
91
|
+
(`inspect --format '{{...}}'`) for diff/state probes over
|
|
92
|
+
JSON parsing of full inspect output — they work uniformly
|
|
93
|
+
across podman and docker. See `getLiveResources` and
|
|
94
|
+
`getLiveContainerConfig` for the canonical pattern.
|
|
95
|
+
- Podman bind mounts get a `:Z` suffix for SELinux relabel.
|
|
96
|
+
Named volumes (sources without leading `/`) MUST NOT receive
|
|
97
|
+
`:Z` — podman rejects them. Use `volumeArg` in
|
|
98
|
+
`src/containers.ts`, never build `-v` strings inline.
|
|
99
|
+
- Docker reports `HostConfig.NetworkMode` as `"default"` or
|
|
100
|
+
`"bridge"`; podman rootless reports `"slirp4netns"` or
|
|
101
|
+
`"pasta"`. The diff path canonicalizes these. Do not
|
|
102
|
+
introduce new networkMode comparisons that don't go through
|
|
103
|
+
`canonicalNetworkMode`.
|
|
74
104
|
|
|
75
|
-
|
|
76
|
-
status, or build steps (e.g. "Step 3: implement X", "TODO: add Y",
|
|
77
|
-
"currently implemented as Z"). This belongs in PR descriptions or
|
|
78
|
-
commit messages, not in documentation. Documentation should
|
|
79
|
-
describe how things work, not how they were built or what stage
|
|
80
|
-
they are in.
|
|
105
|
+
## In-container signalk-server + host-side rootless Podman
|
|
81
106
|
|
|
82
|
-
|
|
83
|
-
|
|
107
|
+
signalk-server can be deployed _as a container itself_ (this is
|
|
108
|
+
the signalk-universal-installer's default), with the host's
|
|
109
|
+
rootless podman socket bind-mounted to `/var/run/docker.sock`
|
|
110
|
+
inside. In that topology the in-container `podman` binary
|
|
111
|
+
cannot reach a daemon at its own default socket path, so every
|
|
112
|
+
detection that worked on bare-metal had to be re-derived from
|
|
113
|
+
artefacts that survive the bind-mount-only shape — env vars
|
|
114
|
+
backfilled in `cleanEnv()`, mountinfo path parsing in
|
|
115
|
+
`parseSelfContainerIdsFromMountinfo()`, the `docker info`
|
|
116
|
+
compat-API probes in `tryRuntime()` and `probeRootless()`.
|
|
84
117
|
|
|
85
|
-
|
|
118
|
+
When reviewing changes in `runtime.ts` or `containers.ts`:
|
|
119
|
+
- The cascade in `findSelfContainerId` (env override → HOSTNAME
|
|
120
|
+
→ cgroup → mountinfo) exists because each previous step has
|
|
121
|
+
known failure modes in this deployment. Do not suggest
|
|
122
|
+
simplifying by removing fallback steps.
|
|
123
|
+
- `probeRootless` calls `podman info` first, then falls back
|
|
124
|
+
to `docker info --format {{.SecurityOptions}}` looking for
|
|
125
|
+
`name=rootless`. The fallback is gated on the binary name
|
|
126
|
+
(only fires when invoked as `docker`, not `podman`).
|
|
127
|
+
- `tryRuntime` reclassifies docker→podman when
|
|
128
|
+
`docker info --format {{.DefaultRuntime}}` returns `crun`.
|
|
129
|
+
This is the gate that flips the config panel from "D Docker"
|
|
130
|
+
to "P Podman (via docker shim)".
|
|
86
131
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
132
|
+
Each of these is load-bearing for the universal-installer
|
|
133
|
+
topology. The full story is in `AGENTS.md` under
|
|
134
|
+
"In-container signalk-server + host-side rootless Podman".
|
|
90
135
|
|
|
91
|
-
##
|
|
136
|
+
## Auto-recreate on config drift
|
|
92
137
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
`
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
138
|
+
`ensureRunning` compares the requested `ContainerConfig`
|
|
139
|
+
against the live container's effective config on every call
|
|
140
|
+
and removes-and-recreates on drift across `image+tag`,
|
|
141
|
+
`command`, `networkMode`, `env`, `volumes`, or `ports`. The
|
|
142
|
+
list is in `diffContainerConfig`. `resources` follows the
|
|
143
|
+
existing live-update path (`podman/docker update`). Consumer
|
|
144
|
+
plugins must not maintain their own `${dataDir}.container-hash`
|
|
145
|
+
files — that's centralized here. Flag any consumer-side hash
|
|
146
|
+
cache code that creeps back in.
|
|
147
|
+
|
|
148
|
+
Note: `restart` is intentionally _not_ in `diffContainerConfig`.
|
|
149
|
+
Flipping a restart policy doesn't justify the downtime of
|
|
150
|
+
recreate. New consumers get the `unless-stopped` default;
|
|
151
|
+
existing containers keep their old policy until a separate
|
|
152
|
+
drift reason forces recreate.
|
|
153
|
+
|
|
154
|
+
## Default restart policy
|
|
155
|
+
|
|
156
|
+
`ContainerConfig.restart` defaults to `"unless-stopped"` when
|
|
157
|
+
omitted. Consumer plugins should leave it unset for the
|
|
158
|
+
standard case (container survives host reboot). Pass `"no"`
|
|
159
|
+
explicitly only for genuinely one-shot containers.
|
|
115
160
|
|
|
116
161
|
## Tests
|
|
117
162
|
|
|
118
163
|
- The test runner is `node:test`. Tests live in `src/test/*.ts`,
|
|
119
|
-
compile to `dist/test/*.js`, run via
|
|
120
|
-
"dist/test/**/*.test.js"`. The glob must be
|
|
121
|
-
Windows actually expands it
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
on `hasContainerRuntime()` which returns `null` on Windows.
|
|
125
|
-
Do not add new integration tests that pull real Linux images
|
|
126
|
-
without the same guard.
|
|
127
|
-
- Unit-style tests inject `fakeExec` rather than touching the
|
|
128
|
-
real runtime. New tests should follow that pattern — see
|
|
164
|
+
compile to `dist/test/*.js`, run via
|
|
165
|
+
`node --test "dist/test/**/*.test.js"`. The glob must be
|
|
166
|
+
double-quoted so Windows cmd actually expands it.
|
|
167
|
+
- Unit tests inject `fakeExec` instead of touching the real
|
|
168
|
+
runtime. New tests should follow that pattern — see
|
|
129
169
|
`src/test/getLiveResources.test.ts` and
|
|
130
170
|
`src/test/diffContainerConfig.test.ts` for the canonical
|
|
131
171
|
shape.
|
|
172
|
+
- Integration tests that pull real Linux images live under
|
|
173
|
+
`src/test/integration/` and gate on `hasContainerRuntime()`
|
|
174
|
+
(returns `null` on Windows). Do not add new tests that pull
|
|
175
|
+
real images without that guard, and do not add new
|
|
176
|
+
integration tests outside `integration/`.
|
|
177
|
+
- All new code requires tests. Test behavior at the function
|
|
178
|
+
boundary, not internal control flow.
|
|
132
179
|
|
|
133
180
|
## Cross-plugin API surface
|
|
134
181
|
|
|
135
182
|
Consumer plugins access signalk-container via
|
|
136
|
-
`(globalThis as any).__signalk_containerManager
|
|
183
|
+
`(globalThis as any).__signalk_containerManager`, then call
|
|
137
184
|
`await containers.whenReady()` before any other API call. Any
|
|
138
185
|
change to `ContainerManagerApi` in `src/types.ts` is a public
|
|
139
|
-
contract change
|
|
140
|
-
methods, or signature-breaking changes
|
|
141
|
-
|
|
186
|
+
contract change. Flag missing JSDoc on new methods, removed
|
|
187
|
+
methods, or signature-breaking changes not called out in the
|
|
188
|
+
PR description.
|
|
189
|
+
|
|
190
|
+
## Echo comments
|
|
191
|
+
|
|
192
|
+
Flag any comment that merely restates what the code already
|
|
193
|
+
says. Examples to flag:
|
|
194
|
+
- `// Sets the age` above a function named `setAge()`
|
|
195
|
+
- `// Loop through items` above a `for` loop
|
|
196
|
+
- `// returns null on failure` next to `return null` in an
|
|
197
|
+
error branch
|
|
198
|
+
|
|
199
|
+
Replace with comments explaining _why_, not _what_. Or delete.
|
|
200
|
+
|
|
201
|
+
## Documentation drift risk
|
|
202
|
+
|
|
203
|
+
Flag any `.md` file that contains detailed implementation
|
|
204
|
+
steps, specific API call sequences, code snippets, or
|
|
205
|
+
configuration values likely to fall out of sync as the code
|
|
206
|
+
evolves. Documentation describes architecture and how things
|
|
207
|
+
work conceptually — not step-by-step instructions that
|
|
208
|
+
duplicate or shadow the code itself.
|
|
209
|
+
|
|
210
|
+
Specifically for this repo: the API reference in
|
|
211
|
+
`doc/plugin-developer-guide.md` and `README.md`'s API table
|
|
212
|
+
must stay aligned with `ContainerManagerApi` in
|
|
213
|
+
`src/types.ts`. Flag new methods on the type that are missing
|
|
214
|
+
from either doc, or doc methods whose JSDoc-style signature
|
|
215
|
+
has drifted from the type.
|
|
216
|
+
|
|
217
|
+
## Implementation status / development history
|
|
218
|
+
|
|
219
|
+
Flag any `.md` file that describes development history,
|
|
220
|
+
implementation progress, or build narrative (e.g. "Step 3:
|
|
221
|
+
implement X", "TODO: add Y", "previously implemented as Z",
|
|
222
|
+
"added in PR #N"). That belongs in PR descriptions and git
|
|
223
|
+
history, not in repo docs. Documentation should describe
|
|
224
|
+
current state and design rationale — not how the code got to
|
|
225
|
+
where it is.
|
|
226
|
+
|
|
227
|
+
Same rule applies to source comments.
|
|
228
|
+
|
|
229
|
+
## Leftover crumbs from intermediate commits
|
|
230
|
+
|
|
231
|
+
Flag references in the current diff to symbols, files, or
|
|
232
|
+
approaches that no longer exist on this branch — old function
|
|
233
|
+
names in comments, stale TODOs from a superseded approach,
|
|
234
|
+
renamed variables still mentioned in docs.
|
|
235
|
+
|
|
236
|
+
## Unchecked items in test plans / checklists
|
|
237
|
+
|
|
238
|
+
If a PR description or any `.md` file contains a checklist
|
|
239
|
+
with unchecked items, flag it. Either the work isn't done, or
|
|
240
|
+
the checklist should be removed before merge.
|
|
241
|
+
|
|
242
|
+
## Commit / PR conventions
|
|
243
|
+
|
|
244
|
+
- Branch names use **hyphens**, not slashes (`fix-something`,
|
|
245
|
+
not `fix/something`). Signal K maintainer convention.
|
|
246
|
+
- Angular conventional commits:
|
|
247
|
+
`<type>(<scope>): <subject>`. Subject ≤ 50 chars, imperative
|
|
248
|
+
mood, no period.
|
|
249
|
+
- No `Co-Authored-By` lines. No "Generated with Claude Code"
|
|
250
|
+
attribution.
|
|
251
|
+
- **No version bumps in feature/fix PRs.** Versions live in
|
|
252
|
+
their own `chore(release): X.Y.Z` PR. (Title-based skip
|
|
253
|
+
above means we won't review those, but flag a `"version"`
|
|
254
|
+
bump that sneaks into a feat/fix PR.)
|
|
255
|
+
- One logical change per commit, one logical change per PR.
|
|
142
256
|
|
|
143
257
|
## What NOT to flag
|
|
144
258
|
|
|
145
|
-
|
|
259
|
+
These are intentional:
|
|
260
|
+
|
|
146
261
|
- Single-character variable names inside Go-template format
|
|
147
|
-
strings (e.g. `{{.Config.Image}}`).
|
|
262
|
+
strings (e.g. `{{.Config.Image}}`). That's runtime syntax,
|
|
148
263
|
not JS code.
|
|
149
264
|
- The `_postRecreate` recursion-guard parameter on
|
|
150
|
-
`ensureRunning` — the underscore prefix
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
|
|
265
|
+
`ensureRunning` — the underscore prefix marks it as
|
|
266
|
+
internal-use-only and shouldn't be promoted in the API.
|
|
267
|
+
- The dual-cascade in `findSelfContainerId` (4 steps) —
|
|
268
|
+
every step exists because the previous one has a known
|
|
269
|
+
failure mode in the in-container deployment topology.
|
|
270
|
+
- The compat-API fallback in `probeRootless` and the docker→
|
|
271
|
+
podman reclassification in `tryRuntime` — they look
|
|
272
|
+
redundant alongside the native podman probes but are the
|
|
273
|
+
only working detection in the in-container topology.
|
|
274
|
+
- Integration tests skipping on `process.platform === "win32"`
|
|
275
|
+
for pulls of Linux images. GitHub's Windows runners only
|
|
276
|
+
have Docker Desktop in Windows-container mode; there's no
|
|
155
277
|
easy way around it.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
Focus on files changed since master. Think carefully about how
|
|
160
|
-
changes interact with existing code and documentation — not just
|
|
161
|
-
the diff in isolation.
|
|
278
|
+
- The `restart` field's absence from `diffContainerConfig` —
|
|
279
|
+
flipping it doesn't justify recreate; consumers get the
|
|
280
|
+
new default on next recreate-for-other-reasons.
|
package/AGENTS.md
CHANGED
|
@@ -146,6 +146,19 @@ The contract for consumer plugins:
|
|
|
146
146
|
|
|
147
147
|
When a consumer plugin sets a restart policy explicitly, it overrides the default. Existing containers are not recreated just to flip the policy — drift detection skips `restart` because flipping it doesn't justify the downtime; the new default kicks in on the next image/env/volumes recreate or on a clean install.
|
|
148
148
|
|
|
149
|
+
### In-container signalk-server + host-side rootless Podman
|
|
150
|
+
|
|
151
|
+
The signalk-universal-installer's deployment runs signalk-server itself as a Podman container, with the host's rootless podman socket bind-mounted to `/var/run/docker.sock` inside. The in-container side ships both `podman` and `docker` CLIs (the latter is what consumer plugins effectively reach, since the bind socket is on the docker path). This topology has four sharp edges the runtime detection layer must handle. Future contributors maintaining the runtime layer should know about them as one story:
|
|
152
|
+
|
|
153
|
+
| Concern | Code |
|
|
154
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
155
|
+
| Rootless Podman daemon discovery under system-scoped systemd units (no `XDG_RUNTIME_DIR` in the inherited env) | `cleanEnv()` in `runtime.ts` backfills `XDG_RUNTIME_DIR=/run/user/<uid>` |
|
|
156
|
+
| Detecting that the in-container `docker` CLI is actually talking to a host-side podman daemon (default `docker --version` doesn't reveal it) | `tryRuntime()` probes `docker info --format {{.DefaultRuntime}}` — `crun` → reclassify to podman |
|
|
157
|
+
| Finding our own container id when HOSTNAME is empty, cgroup is `0::/`, and `Network=host` makes `/etc/hostname` return the host machine name | `parseSelfContainerIdsFromMountinfo()` matches the 64-hex id the runtime stamps into bindfs source paths (`/etc/hostname`, `/etc/resolv.conf`, `/run/.containerenv`) |
|
|
158
|
+
| Detecting rootless mode when `podman info --format {{.Host.Security.Rootless}}` fails (in-container podman can't reach a daemon at its default socket) | `probeRootless()` falls back to `docker info --format {{.SecurityOptions}}` and looks for the `name=rootless` token |
|
|
159
|
+
|
|
160
|
+
The thread that runs through all four: **the in-container signalk-server has no native podman channel back to the host daemon**. Every detection that worked on bare-metal has to be re-derived from artefacts that survive the bind-mount-only topology — env vars set by the runtime, mountinfo paths, the docker compat API. When debugging future "signalk-container thinks we're not rootless" / "thinks we're not in a container" / "can't find our own id" reports, check whether you're in this deployment shape first.
|
|
161
|
+
|
|
149
162
|
## Workflow Conventions
|
|
150
163
|
|
|
151
164
|
This repo is maintained by Dirk Wahrheit. Workflow is deliberate; AI tools should follow it strictly.
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAEpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAAC,UAAU,CAwB5C;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,CACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KACpB,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -127,22 +127,55 @@ async function tryRuntime(name, env, exec = defaultExec) {
|
|
|
127
127
|
// <socket>` so commands route to the host daemon — the actual
|
|
128
128
|
// runtime stays podman, the in-container binary just acts as a
|
|
129
129
|
// client.
|
|
130
|
+
//
|
|
131
|
+
// The docker-shim case (`isPodmanDockerShim === true`) needs the
|
|
132
|
+
// SAME remote-socket switch even though `docker info` succeeded —
|
|
133
|
+
// the docker CLI client-validates podman-specific flags like
|
|
134
|
+
// `--userns=keep-id:uid=X,gid=Y` and rejects them before forwarding
|
|
135
|
+
// to the daemon (`docker: --userns: invalid USER mode`), which
|
|
136
|
+
// breaks every rootless-podman bind-mounted consumer plugin
|
|
137
|
+
// (questdb, grafana, etc.). When the in-container podman binary
|
|
138
|
+
// can reach the same socket via `podman --remote`, use that path
|
|
139
|
+
// so we keep podman flag semantics while still talking to the
|
|
140
|
+
// host daemon.
|
|
130
141
|
let remoteSocketUrl;
|
|
131
142
|
if (realRuntime === "podman") {
|
|
132
|
-
|
|
133
|
-
if (directInfo.exitCode !== 0) {
|
|
143
|
+
if (isPodmanDockerShim) {
|
|
134
144
|
const socket = isContainerized() ? findRemoteSocket() : null;
|
|
135
|
-
if (socket
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
145
|
+
if (socket !== null) {
|
|
146
|
+
const remoteInfo = await exec("podman", ["--remote", "--url", socket, "info"], env);
|
|
147
|
+
if (remoteInfo.exitCode === 0) {
|
|
148
|
+
remoteSocketUrl = socket;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// If we couldn't probe podman-remote, stay on the docker
|
|
152
|
+
// binary. The detection result is still useful (the config
|
|
153
|
+
// panel reports `Podman (via docker shim)`), but consumer
|
|
154
|
+
// plugins using podman-specific flags will hit the same
|
|
155
|
+
// CLI-validation error the docker-shim path always had.
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const directInfo = await exec(name, ["info"], env);
|
|
159
|
+
if (directInfo.exitCode !== 0) {
|
|
160
|
+
const socket = isContainerized() ? findRemoteSocket() : null;
|
|
161
|
+
if (socket === null)
|
|
162
|
+
return null;
|
|
163
|
+
const remoteInfo = await exec(name, ["--remote", "--url", socket, "info"], env);
|
|
164
|
+
if (remoteInfo.exitCode !== 0)
|
|
165
|
+
return null;
|
|
166
|
+
remoteSocketUrl = socket;
|
|
167
|
+
}
|
|
141
168
|
}
|
|
142
169
|
}
|
|
143
170
|
const prefixArgs = remoteArgs(remoteSocketUrl);
|
|
144
171
|
const cgroupControllers = await probeCgroupControllers(realRuntime, env, prefixArgs, exec);
|
|
145
|
-
|
|
172
|
+
// probeRootless's compat-API fallback runs against `binaryName`.
|
|
173
|
+
// When we promoted the shim to podman-remote, `binaryName` must
|
|
174
|
+
// also flip to "podman" — otherwise the fallback would call
|
|
175
|
+
// `docker --remote --url <socket> info --format {{.SecurityOptions}}`,
|
|
176
|
+
// and the docker CLI doesn't know `--remote`/`--url`.
|
|
177
|
+
const effectiveBinary = remoteSocketUrl ? "podman" : name;
|
|
178
|
+
const isRootless = await probeRootless(realRuntime, env, prefixArgs, exec, effectiveBinary);
|
|
146
179
|
const hostUser = probeHostUser();
|
|
147
180
|
return {
|
|
148
181
|
runtime: realRuntime,
|
|
@@ -300,28 +333,59 @@ function assertNonNegativeInt(field, value) {
|
|
|
300
333
|
* accepts the same `--user` flag form as rootful, so the distinction
|
|
301
334
|
* doesn't change our flag-emission logic.
|
|
302
335
|
*/
|
|
303
|
-
async function probeRootless(runtime, env, prefixArgs = [], exec = defaultExec) {
|
|
336
|
+
async function probeRootless(runtime, env, prefixArgs = [], exec = defaultExec, binaryName = runtime) {
|
|
304
337
|
if (runtime !== "podman") {
|
|
305
338
|
return false;
|
|
306
339
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
340
|
+
// Primary path: ask podman directly via its native template.
|
|
341
|
+
// Works for native rootless / rootful podman invocations, and also
|
|
342
|
+
// when the in-container podman binary is talking to the host via
|
|
343
|
+
// --remote --url <socket> (prefixArgs handles that).
|
|
344
|
+
const podmanResult = await exec("podman", [...prefixArgs, "info", "--format", "{{.Host.Security.Rootless}}"], env);
|
|
345
|
+
if (podmanResult.exitCode === 0) {
|
|
346
|
+
// Some podman setups print a warning to stdout above the template
|
|
347
|
+
// value (e.g. `WARN[0000] ...\ntrue`) when rootless state can't be
|
|
348
|
+
// cached. Take the last non-empty line and require it to be exactly
|
|
349
|
+
// `true` or `false`. Anything else (warning-only output, prose
|
|
350
|
+
// ending in the word "true", JSON, older podman that doesn't expose
|
|
351
|
+
// Host.Security.Rootless) falls through to the compat-API fallback.
|
|
352
|
+
const lastLine = podmanResult.stdout
|
|
353
|
+
.trim()
|
|
354
|
+
.split(/\r?\n/)
|
|
355
|
+
.map((line) => line.trim())
|
|
356
|
+
.filter(Boolean)
|
|
357
|
+
.at(-1);
|
|
358
|
+
if (lastLine === "true" || lastLine === "false") {
|
|
359
|
+
return lastLine === "true";
|
|
360
|
+
}
|
|
310
361
|
}
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
//
|
|
314
|
-
//
|
|
315
|
-
//
|
|
316
|
-
//
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
362
|
+
// Fallback for podman-docker-shim deployments: the in-container
|
|
363
|
+
// signalk-server has access only to a Docker-compat socket pointed
|
|
364
|
+
// at a rootless podman daemon. Running the podman CLI from inside
|
|
365
|
+
// can't reach that daemon directly (different default socket
|
|
366
|
+
// path), so the primary probe above fails or returns unparseable
|
|
367
|
+
// output. The compat API doesn't expose `Host.Security.Rootless`,
|
|
368
|
+
// but it DOES expose `SecurityOptions` (an array containing
|
|
369
|
+
// `name=rootless` on a rootless backend) — which is enough to
|
|
370
|
+
// decide whether to emit `--userns=keep-id` at container-create
|
|
371
|
+
// time. Without this fallback, isRootless stays null,
|
|
372
|
+
// userMappingFlags falls through to plain `--user 1000:1000`, and
|
|
373
|
+
// bind-mounted consumer-plugin data dirs (e.g. signalk-questdb's
|
|
374
|
+
// /var/lib/questdb) get the wrong ownership in the container's
|
|
375
|
+
// user namespace.
|
|
376
|
+
if (binaryName !== "podman") {
|
|
377
|
+
const compatResult = await exec(binaryName, [...prefixArgs, "info", "--format", "{{.SecurityOptions}}"], env);
|
|
378
|
+
if (compatResult.exitCode === 0) {
|
|
379
|
+
// `docker info --format` returns the SecurityOptions array
|
|
380
|
+
// as a Go-style `[name=apparmor name=seccomp,profile=default
|
|
381
|
+
// name=rootless]` string. We just look for the rootless token.
|
|
382
|
+
if (/\bname=rootless\b/.test(compatResult.stdout)) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
// The probe succeeded and didn't mention rootless — that's a
|
|
386
|
+
// definitive "not rootless," not "unknown."
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
325
389
|
}
|
|
326
390
|
return null;
|
|
327
391
|
}
|
|
@@ -376,6 +440,14 @@ export async function detectRuntime(preference, exec = defaultExec) {
|
|
|
376
440
|
return null;
|
|
377
441
|
}
|
|
378
442
|
export function runtimeCmd(info) {
|
|
443
|
+
// When we successfully probed `podman --remote --url <socket>`,
|
|
444
|
+
// we're talking the podman binary on this end — even though the
|
|
445
|
+
// CLI surface that originally got detected was `docker`. Using
|
|
446
|
+
// podman here is the only way to make podman-specific flags like
|
|
447
|
+
// `--userns=keep-id` reach the daemon, since the docker CLI
|
|
448
|
+
// rejects them at the client.
|
|
449
|
+
if (info.remoteSocketUrl)
|
|
450
|
+
return "podman";
|
|
379
451
|
return info.isPodmanDockerShim ? "docker" : info.runtime;
|
|
380
452
|
}
|
|
381
453
|
/**
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/eslint.config.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from "eslint/config";
|
|
2
|
+
import js from "@eslint/js";
|
|
3
|
+
import tseslint from "typescript-eslint";
|
|
4
|
+
import prettier from "eslint-config-prettier/flat";
|
|
5
|
+
import globals from "globals";
|
|
6
|
+
|
|
7
|
+
// ESLint v9.10+ loads this TS config via the `jiti` peer dep at lint
|
|
8
|
+
// time — there is no separate compile step. We keep the file at the
|
|
9
|
+
// project root (outside `tsconfig.json`'s `include: ["src"]`) so
|
|
10
|
+
// `tsc -p tsconfig.json` doesn't emit it into `dist/`.
|
|
11
|
+
|
|
12
|
+
export default defineConfig([
|
|
13
|
+
globalIgnores(["dist", "public", "node_modules", "src/configpanel"]),
|
|
14
|
+
|
|
15
|
+
{
|
|
16
|
+
files: ["**/*.ts"],
|
|
17
|
+
extends: [js.configs.recommended, tseslint.configs.recommended, prettier],
|
|
18
|
+
languageOptions: {
|
|
19
|
+
parser: tseslint.parser,
|
|
20
|
+
globals: globals.node,
|
|
21
|
+
},
|
|
22
|
+
rules: {
|
|
23
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
24
|
+
"@typescript-eslint/no-unused-vars": "error",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalk-container",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.3",
|
|
4
4
|
"description": "Shared container runtime management (Podman/Docker) for Signal K plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"signalk-node-server-plugin",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"eslint": "^10.2.0",
|
|
57
57
|
"eslint-config-prettier": "^10.1.8",
|
|
58
58
|
"globals": "^17.4.0",
|
|
59
|
+
"jiti": "^2.7.0",
|
|
59
60
|
"prettier": "^3.8.1",
|
|
60
61
|
"react": "^19.2.4",
|
|
61
62
|
"react-dom": "^19.2.4",
|