feat(images): pin pihole, jackett and plex to the digests already running; Renovate follows them
pihole/pihole (no tag) -> 2026.10.0 sha256:d3413471... lscr.io/linuxserver/jackett:latest -> v0.24.2865-ls7 sha256:4fcf3cc2... plexinc/pms-docker:latest -> 1.43.4.10903-e5521bd8c sha256:e0ab2739... Each tag was resolved against its registry and matched the pods' imageID, so the image is unchanged (the pod template string does change, so Flux rolls the three workloads). renovate.json5: regex versioning for jackett (-lsN) and plex (build-hex); jackett is looked up on ghcr.io via overridePackageName, because lscr.io is capped at dockerMaxPages=20 pages and jackett's 32k tags put the running one at #31,980 (dry run proposed nothing without it); jackett weekly (13 builds in 12 days); pihole deliberately unheld, year rollover = major. Stale "publishes only latest" prose fixed in renovate.json5 and three runbooks. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
ce849032d5
commit
183bca6897
11 files changed
+160
-20
No files matched your search
@@ -112,10 +112,12 @@ A private repository with no `secretRef`, or an expired token. The message names
|
||||
### 4. The policy's range matches nothing
|
||||
`ImagePolicy` semver ranges come from each ServiceDefinition's `update.range` (for example
|
||||
`">=2024.0.0"` for pihole, `">=24.0.0"` for keycloak). A range that no published tag satisfies — or a
|
||||
repository that publishes only `latest` (this platform has `lscr.io/linuxserver/jackett:latest` and
|
||||
`plexinc/pms-docker:latest`) — leaves the policy with nothing to select. Remediation: fix the range in
|
||||
`catalog/<service>.yaml` and re-render; a `latest`-only image cannot participate in automation at all
|
||||
and should not carry a policy.
|
||||
repository that publishes only `latest` — leaves the policy with nothing to select. Remediation: fix
|
||||
the range in `catalog/<service>.yaml` and re-render; a `latest`-only image cannot participate in
|
||||
automation at all and should not carry a policy. (CORRECTED 2026-10-30: this page used to name
|
||||
`lscr.io/linuxserver/jackett` and `plexinc/pms-docker` as `latest`-only. Neither is — both publish
|
||||
immutable version tags (`v0.24.2865-ls7`, `1.43.4.10903-e5521bd8c`) — they were merely *deployed* as
|
||||
`:latest`. Both are now pinned to those tags and maintained by Renovate, not by an ImagePolicy.)
|
||||
|
||||
### 5. Egress is blocked for that namespace
|
||||
Default-deny everywhere (R-NET-01) means outbound registry access is an explicit allow. Cross-read
|
||||
|
||||
@@ -21,7 +21,8 @@ which is why this page exists: the loop is scripted and the reconcile is **force
|
||||
waited for. Measured end to end on 2026-09-29: **~2m45s**.
|
||||
|
||||
**An expired or wrong token does not break anything.** Verified against the image's own first-run
|
||||
script (and the copy inside `plexinc/pms-docker:latest`): a failed exchange gets a 403 with an empty
|
||||
script (and the copy inside the image then running as `plexinc/pms-docker:latest`; pinned to a version
|
||||
tag since 2026-10-30): a failed exchange gets a 403 with an empty
|
||||
body, `curl`'s status is never checked, the token `sed` yields empty, the `if` does not fire, there is
|
||||
no `else` and no `exit 1`, and the script (no `set -e`) exits 0. The pod comes up **unclaimed and
|
||||
serving**. So a burnt token costs you one more attempt, not an outage — and the repo deliberately
|
||||
@@ -186,4 +187,5 @@ When the claim does not take, in order of how often it is the answer here:
|
||||
Source of truth: `runbooks/plex-claim.md`. Index: `/runbooks/`
|
||||
Upstream behaviour cited here is from `plexinc/pms-docker` branch `master`,
|
||||
`root/etc/cont-init.d/40-plex-first-run` (s6-overlay v2), cross-checked against the same file inside
|
||||
the running `plexinc/pms-docker:latest` image.
|
||||
the image that was running at the time as `plexinc/pms-docker:latest` (the deployment has been pinned
|
||||
to a version tag, `catalog/plex.yaml` `source.image`, since 2026-10-30).
|
||||
@@ -371,8 +371,8 @@ verify".)
|
||||
2026-10-01, so this means a node changed — a rebuild, a BIOS reset, or a driver regression.
|
||||
**Fix the node.**
|
||||
|
||||
4. **The image changed under you.** See "The floating-image caveat". A `:latest` pull can remove the
|
||||
mechanism this feature leans on with no commit in this repo.
|
||||
4. **The image changed under you.** See "The image-version caveat". A pms-docker version bump (a
|
||||
Renovate PR, possibly auto-merged) can remove the mechanism this feature leans on.
|
||||
|
||||
5. **The session was never transcoding.** Direct Play / Direct Stream never reaches the transcoder,
|
||||
so no `hardware transcoding:` line is written for it at all. An *absent* line is this, not a
|
||||
@@ -446,17 +446,21 @@ revert you):
|
||||
Re-adding the field later is the same edit in reverse. Nothing about the Plex-side toggle or the
|
||||
`/config` PVC is affected either way — do **not** delete the PVC as part of this.
|
||||
|
||||
## The floating-image caveat
|
||||
## The image-version caveat
|
||||
|
||||
Everything this page states about the image's behaviour — the `cont-init.d` hook that adds the app
|
||||
user to the device's group, the absence of `PLEX_PREFERENCE*`, the six `setPref` keys, the
|
||||
`HardwareAcceleratedCodecs` string — was read from digest **`sha256:e0ab27395614…`**
|
||||
(`plexmediaserver 1.43.4.10903`).
|
||||
|
||||
The deployment runs **`plexinc/pms-docker:latest` with `imagePullPolicy: Always`**. A silent pull can
|
||||
therefore change the behaviour this feature depends on **with no commit in this repo**, while the
|
||||
manifest still looks identical. Symptom to watch for: hardware transcoding that worked and quietly
|
||||
stopped, with no git change to point at.
|
||||
**Since 2026-10-30 that digest is pinned:** `catalog/plex.yaml` names
|
||||
`plexinc/pms-docker:1.43.4.10903-e5521bd8c`, which resolved to exactly `sha256:e0ab27395614…` on
|
||||
Docker Hub. Before that the deployment ran the floating `:latest` (implicitly `imagePullPolicy:
|
||||
Always`), and a silent pull could change this behaviour with no commit in the repo. That is no longer
|
||||
the failure mode: the image now changes only through a **Renovate PR** bumping that tag (patch/minor
|
||||
ones auto-merge on a green gate, and the gate does not exercise QuickSync). So the symptom to watch
|
||||
for is hardware transcoding that quietly stopped **after a `chore(deps)` pms-docker bump** — check
|
||||
`git log -- catalog/plex.yaml` first.
|
||||
|
||||
```
|
||||
infra/devcontainer/dev.sh run bash -c \
|
||||
|
||||
Reference in new issue
Block a user