freesailarr: MediathekArr as the tenth container, off by default (3.1.0+up1.0.0)
MediathekArr fakes a Usenet indexer towards Prowlarr and a SABnzbd downloader towards Sonarr/Radarr and fetches from the ARD and ZDF media libraries. Both consumers already share gluetun's network namespace, so they reach it over 127.0.0.1 - no service, no DNS, no ingress detour. Purely additive: the flag defaults to false and a default render is byte-identical to 3.0.5 (verified against the previous chart for both the default values and the CI values). The four things that fail silently without them: - A START GATE on gluetun. MediathekArr fetches its ruleset once at start and never retries; started before the tunnel it answers every Newznab search with 0 results while the container is up, Ready and quiet. Kubernetes cannot order two regular containers and an initContainer would deadlock, so the wait sits in front of the image entrypoint: poll gluetun's health server on 127.0.0.1:9999 and exec the entrypoint afterwards; on timeout the container exits rather than starting blind, because a crash loop is visible and an empty indexer is not. The startup probe budget (300s) deliberately outlasts the gate (180s). - incomplete/ AND complete/ ON THE SHARED DOWNLOADS CLAIM, not in an emptyDir. An emptyDir counts against the container's ephemeral-storage limit, and one large download would have the kubelet evict the whole pod with all ten containers - the trap ytdlp-web-player documents. - THE COMPLETE PATH SONARR SEES. The claim is mounted at /downloads exactly as sonarr/radarr mount it, and the chart sets DOWNLOAD_COMPLETE_PATH itself, so the SABnzbd complete_dir it reports is the same absolute path on both sides. - TWO PORTS: 5007 (SABnzbd role and UI, primary) and 5008 (Newznab role for Prowlarr), both declared to gluetun's firewall and both on one Service. The SABnzbd API is at /download/api - /api on 5007 answers with a misleading Newznab validation error. Further details: - Image pinned by digest (tag + digest): "latest" is a 2024 build, "beta" moves. Single-arch linux/amd64. The built-in helm-values manager cannot follow that pair, so renovate.json5 gets the chart's first customManagers block; verified by dry-run with two fixtures, since a matching and a broken rule look identical while the pin is current. - Hardened as measured: non-root, uid/gid from puid/pgid, readOnlyRootFilesystem: true, all capabilities dropped, no PUID/PGID. - Probes on measured 200 endpoints (there is no health endpoint): readiness and startup on /download/, liveness as an exec covering BOTH ports, because one container runs two processes and a wedged Newznab half is exactly what makes searches come back empty. - No ingress by default: the UI links its assets with root-absolute paths, so it can only be served at the root of a host; on the shared domain that root belongs to seerr. A sub-path fails the render instead of producing a broken UI. - values.yaml and NOTES.txt document the geo MARKER PROCEDURE (not a table of series), the escape route of a German exit and its price for the whole stack, the fail_message: null trap, and the HLS question as an open question. - CI: mediathekarr enabled in ci/freesailarr/test-values.yaml, install timeout raised to 1200s for the extra image and the gate. Fixes #245
This commit is contained in:
11 files changed
+717
-49
No files matched your search
+40
-6
@@ -201,14 +201,48 @@
|
||||
//
|
||||
// When adding a chart, add a block here — see README "Creating a new chart".
|
||||
//
|
||||
// Exception, deliberately no block: `freesailarr`. It bundles nine
|
||||
// independently versioned upstreams, so none of them is "the" app version
|
||||
// and no image tag comes from appVersion — all nine are pinned as
|
||||
// Exception, deliberately no APP-VERSION block: `freesailarr`. It bundles
|
||||
// ten independently versioned upstreams, so none of them is "the" app
|
||||
// version and no image tag comes from appVersion — they are pinned as
|
||||
// image.repository/image.tag in its values.yaml, where the built-in
|
||||
// helm-values manager already finds them and proposes one update per
|
||||
// image. Adding a block here would either duplicate those updates or
|
||||
// rewrite an appVersion that selects nothing. Its appVersion is a
|
||||
// hand-maintained marker; see freesailarr/Chart.yaml.
|
||||
// image. Adding an appVersion block here would either duplicate those
|
||||
// updates or rewrite an appVersion that selects nothing. Its appVersion is
|
||||
// a hand-maintained marker; see freesailarr/Chart.yaml. The one image the
|
||||
// built-in manager cannot follow — mediathekarr, pinned by digest — has its
|
||||
// own block directly below.
|
||||
|
||||
{
|
||||
description: [
|
||||
"freesailarr / mediathekarr: the only image in this repo pinned by DIGEST, because its",
|
||||
"tags carry no version at all — 'latest' is a 2024 build (v0.2.5) and the upstream README",
|
||||
"points at the moving 'beta'. The built-in helm-values manager reads repository/tag and",
|
||||
"would have nothing to compare, so this manager captures all three keys and lets Renovate",
|
||||
"propose digest updates for the beta tag (currentDigest + currentValue = a digest-only",
|
||||
"lookup; automerged under the 'digest' update type in the rule above).",
|
||||
"",
|
||||
"The pattern is anchored on the three keys in their values.yaml order: repository, tag,",
|
||||
"digest. Reordering or renaming them does not fail anything — it silently stops matching,",
|
||||
"and the image then never gets an update again (#158: a valid rule is not a matching rule).",
|
||||
"",
|
||||
"Verified by dry-run (renovate 44.69.11, --platform=local --dry-run=lookup, real registry),",
|
||||
"two fixtures, because 'no update' is what BOTH a working and a broken rule look like while",
|
||||
"the pin is current:",
|
||||
" currentDigest = the pinned one -> extracted with currentValue 'beta', updates [] (the",
|
||||
" beta tag really does still point at it).",
|
||||
" currentDigest = sha256:0000... -> updates [{updateType: digest, newValue: beta,",
|
||||
" newDigest: sha256:3ed7e14...}] on branch renovate/docker.io-pcjones-mediathekarr-beta.",
|
||||
"The same run also shows the built-in helm-values manager finding this image and skipping it",
|
||||
"(skipReason invalid-value, 'no currentDigest or pinDigests' — it does not read the digest",
|
||||
"key), so the two managers cannot produce competing PRs.",
|
||||
],
|
||||
customType: "regex",
|
||||
managerFilePatterns: ["freesailarr/values.yaml"],
|
||||
matchStrings: [
|
||||
"repository: (?<depName>docker\\.io/pcjones/mediathekarr)\\s+tag: (?<currentValue>[^\\s]+)\\s+digest: (?<currentDigest>sha256:[0-9a-f]{64})",
|
||||
],
|
||||
datasourceTemplate: "docker",
|
||||
},
|
||||
|
||||
{
|
||||
description: "apache-tika: four-part version plus flavour suffix (3.3.1.0-full); the compatibility group keeps the chart on -full.",
|
||||
|
||||
Reference in new issue
Block a user