diff --git a/family/how-to/arr-stack-kraken.md b/family/how-to/arr-stack-kraken.md index 8af65e39..da77b8aa 100644 --- a/family/how-to/arr-stack-kraken.md +++ b/family/how-to/arr-stack-kraken.md @@ -1,7 +1,7 @@ --- title: Arr Stack — Kraken created: '2026-05-23' -updated: '2026-09-04' +updated: '2026-09-20' type: tech namespace: family tags: [arr, radarr, sonarr, prowlarr, transmission, jellyfin, infra, kraken] @@ -137,8 +137,110 @@ All services accessible at `kraken:`: > `movies-radarr` и `series-sonarr` НЕ добавлены в Jellyfin — router.py создаёт symlink'и из них в перечисленные пути. +## 🔴 Диагностика индексеров — «красные трекеры» (2026-09-20) + +Полная диагностика запрошена Alex: «что с torrent трекерами в arr, красные». Диагноз снят по логам Prowlarr, не по теории. + +### Фактическое состояние индексеров Prowlarr (id / name / enable / privacy) + +| id | Индексер | enable | privacy | Реально работает? | +|----|----------|--------|---------|-------------------| +| 1 | RuTracker | true | semiPrivate | ❌ **красный** — Cloudflare | +| 5 | Kinozal | true | semiPrivate | ❌ **красный** — Cloudflare | +| 6 | Kinozal (M) | true | semiPrivate | ❌ **красный** — Cloudflare | +| 2 | RuTor | true | public | ✅ 100 результатов на «matrix» | +| 4 | NoNaMe Club | true | public | ✅ 50 результатов | +| 3 | Byrutor | true | public | ✅ 6 результатов | + +`indexerstatus` пуст, и `health` показывает только warning про апдейт — то есть Prowlarr **сам себя маскирует**: он не пишет в health, а вместо этого помечает индексер «temporarily ignoring till <+24h>». Диагноз надо снимать из **debug-лога**, не из health API. + +### Root cause #1 — Cloudflare (RuTracker + Kinozal + Kinozal (M)) + +Из `/srv/.../docker/prowlarr/config/logs/prowlarr.debug.txt`: + +``` +Warn|IndexerHttpClient|HTTP Error - Res: HTTP/2.0 [POST] https://rutracker.org/forum/login.php: 403.Forbidden (5620 bytes) +Just a moment... ... challenges.cloudflare.com ... cType: 'managed' +Warn|RuTracker|RuTracker HTTP request failed: [403:Forbidden] [POST] at [https://rutracker.org/forum/login.php] + at NzbDrone.Core.Indexers.Definitions.RuTracker.DoLogin() in ./NzbDrone.Core/Indexers/Definitions/RuTracker.cs:line 103 +Error|Cardigann|Cloudflare protection detected for [Kinozal], Flaresolverr may be required. +Error|Cardigann|Cloudflare protection detected for [Kinozal (M)], Flaresolverr may be required. +Debug|IndexerFactory|Temporarily ignoring indexer RuTracker till 09/21/2026 17:30:42 due to recent failures. +``` + +- RuTracker: CF **managed Turnstile** на `/forum/login.php` → Prowlarr не может залогиниться (нужен JS-челлендж). Аккаунт при этом может быть жив — падает именно логин. +- Kinozal / Kinozal (M): kinozal.me тоже за Cloudflare, Prowlarr сам пишет «Flaresolverr may be required». +- Версия Prowlarr на момент диагностики: **v2.5.2.5491**, доступен апдейт **v2.6.5.5623**. + +### Root cause #2 — Docker network split (Radarr полностью без индексеров) + +``` +radarr: docker_default 172.22.0.3 ← НЕ видит prowlarr +sonarr: media_net 172.23.0.2 +prowlarr: media_net 172.23.0.3 +transmission: docker_default 172.22.0.2 ← НЕ виден сонаром +``` + +Radarr `POST /api/v3/indexer/testall` → **все 4 индексера** `false`: +`Unable to connect to indexer... Name does not resolve (prowlarr:9696)` + +Sonarr `testall` (он в `media_net`, DNS резолвится) → доходит до Prowlarr и получает осмысленные ошибки: + +| Sonarr indexer id | Имя | Результат testall | +|---|---|---| +| 1 | RuTracker | ❌ `[429:TooManyRequests]` через Prowlarr (это самоисключение Prowlarr отдаёт как 429) | +| 2 | NoNaMe Club | ✅ `true` | +| 6 | Kinozal (M) | ❌ 429 (тот же эффект) | +| 8 | RuTor | ⚠️ `Query successful, but no results in the configured categories` — **не баг коннекта**: у Sonarr id=8 категории `[5000]`, а caps RuTor отдаёт `2000 5000 8000 100001 100002 100003`. tvsearch в Prowlarr живой: `t=tvsearch&q=lost` на `/prowlarr/2/api` → 100 ``. Лечится расширением категорий на стороне Sonarr. | +| 9 | Kinozal | ❌ 429 (тот же эффект) | + +**Analog:** Sonarr `health` → `error DownloadClientCheck: Unable to communicate with Transmission. Name does not resolve (transmission:9091)`. Тот же network-split, отдельный симптом. + +Вывод: **Radarr красный не из-за трекеров, а из-за сети.** У Sonarr красные = реальные трекеры (CF). + +### ⚠️ Питфолл: `POST /api/v3/indexer/test` по одному id НЕ работает + +`{"indexerId": N}` на Radarr/Sonarr/Prowlarr возвращает **HTTP 400** со списком `validationFailures`: `'Name' must not be empty`, `'Implementation' must not be empty`, `'ConfigContract' must not be empty`, `'App Profile Id' must be greater than '0'`, `'Priority' must be between 1 and 50`. То есть эндпоинт валидирует тело как новый индексер, а не берёт существующий по id. + +**Рабочий способ тестирования — `testall`:** + +```bash +# Radarr +curl -s -X POST -H "X-Api-Key: $RKEY" \ + "http://localhost:7878/radarr/api/v3/indexer/testall" \ + | jq -r '.[] | "\(.id)\t\(.isValid)\t\(.validationFailures[0].errorMessage // "")"' + +# Sonarr (UrlBase /sonarr) +curl -s -X POST -H "X-Api-Key: $SKEY" \ + "http://localhost:8989/sonarr/api/v3/indexer/testall" \ + | jq -r '.[] | "\(.id)\t\(.isValid)\t\(.validationFailures[0].errorMessage // "")"' + +# Prowlarr: тест одного индексера требует полного объекта из GET, не {indexerId} +# Быстрая проверка «кто живой» — сразу поиском: +curl -s -H "X-Api-Key: $PKEY" "http://localhost:9696/prowlarr/api/v1/search?query=matrix&type=search" \ + | jq -r 'group_by(.indexer)[] | "\(.[0].indexer): \(length)"' +``` + +(`Prowlarr /api/v1/indexer/test` тоже возвращает 400 на `{indexerId}` — см. § Питфоллы скилла `torrent-agent-pipeline`.) + +Поиск через Prowlarr полезнее теста индексеров: `?query=X&type=search` по умолчанию возвращает **до 100 результатов на индексер** (был соблазн прочитать «156 всего» как «по 26 на каждый» — неверно; смотреть `group_by(.indexer)`). + +### План лечения (составлен 2026-09-20, ждёт подтверждения Alex) + +1. **FlareSolverr** — развернуть контейнер на Kraken (порт 8191), прописать его как прокси в Prowlarr Settings → Indexers. Без FlareSolverr CF-челлендж RuTracker/Kinozal не проходится. +2. **Обновить Prowlarr** v2.5.2.5491 → v2.6.5.5623 (свежая интеграция FlareSolverr). +3. **Починить сеть** — подключить Radarr и Transmission в `media_net` (обратимо, без пересоздания контейнеров): + `sudo docker network connect media_net radarr` / `sudo docker network connect media_net transmission` +4. **Раскрыть категории** Sonarr indexer id=8 (RuTor) — сейчас `[5000]`, добавить 2000/8000. +5. **Проверка приёмки:** `testall` в Radarr и Sonarr → все `isValid=true`; поиск RuTracker с ненулевым результатом. + +**Честные границы:** FlareSolverr против CF Turnstile даёт ~70-80% на RuTracker (при жёстком managed-challenge может понадобиться cookie из браузера, вручную). Пароли трекеров у агента отсутствуют — если сессия RuTracker инвалидировалась, логин/пароль вводит Alex в UI Prowlarr. Гарантий на CF нет ни у кого: трекеры обновляют защиту. + +**Статус:** диагностика завершена, план не начат (ждёт апрува). Безопасный первый шаг — п.3 (сети), не требует паролей и полностью обратим. + ## Известные проблемы +- **⚠️ 2026-09-20: `jellyfin_default` в compose Radarr** — реально Radarr живёт в `docker_default`; при разборе сетей проверять фактическое `docker inspect`, а не docker-compose.yml. - **17 фильмов в Radarr `hasFile=False`** — ждут подходящего релиза в Prowlarr. Scream (1996) в процессе загрузки. - **Prowlarr** — если долго не находит релизы, проверить статус индексеров (`/api/v1/health`). - **🔴 2026-09-04: 4K UHD Remux при Direct Play подтормаживает на ТВ (webOS).** Симптом у `Неистовый (Unhinged 2020)` — 60.9GB `...Remux.2160p.mkv` avg ~99 Мбит/с. После фикса eth0 Kraken → 1G (был 100M, см. [[kraken-network]]) торможение **сохранилось**. Подтверждено по логу Jellyfin `log_20260904.log`: сессия 10:18→10:28 «Jellyfin for WebOS 1.2.2», Stop at 400916ms (~6:40), **ни одной строки transcode → это Direct Play**, не CPU-рендер субтитров.