[2026-09-26] eagle: family/how-to/jellyfin-config.md family/how-to/navidrome-truenas-android.md family/plans/lidarr-taiga-deploy.md family/projects/media-toolbox-taiga.md personal/plans/lidarr-taiga-and-indexer-unblock.md personal/tech/skill-arr-media-stack-setup-additions.md
This commit is contained in:
1 parent
9f300da7b6
commit
4ab53a2a63
6 files changed
+727
-5
No files matched your search
@@ -0,0 +1,95 @@
|
||||
---
|
||||
title: Skill — arr-media-stack-setup (дополнения 2026-09-26)
|
||||
created: '2026-09-26'
|
||||
updated: '2026-09-26'
|
||||
type: tech
|
||||
namespace: personal
|
||||
tags:
|
||||
- skill
|
||||
- arr
|
||||
- prowlarr
|
||||
- dns
|
||||
- truenas
|
||||
- blocked
|
||||
- pitfalls
|
||||
related:
|
||||
- '[[personal/plans/lidarr-taiga-and-indexer-unblock]]'
|
||||
- '[[family/projects/media-toolbox-taiga]]'
|
||||
---
|
||||
# Skill `arr-media-stack-setup` — дополнения 2026-09-26
|
||||
|
||||
> Зеркало патча скилла. Что добавлено после разведки на Тайге (задача «Lidarr + музыка + синк с Jellyfin»).
|
||||
> Полный скилл: `~/.hermes/hermes-whale/skills/devops/arr-media-stack-setup/SKILL.md`
|
||||
|
||||
## 1. Индексеры недоступны: DNS-фильтр провайдера (НЕ Cloudflare, НЕ Pi-hole)
|
||||
|
||||
**Новый класс проблемы**, ранее не описанный в скилле. Задокументированы были только
|
||||
«Cloudflare 403 на `indexers.prowlarr.com`» и «RuTracker Turnstile». Здесь **DNS не отдаёт IP вообще**.
|
||||
|
||||
```bash
|
||||
# InitialFailure показывает НАЧАЛО проблемы, а не «сейчас»
|
||||
GET /api/v1/indexerstatus → initialFailure: "2026-05-20T05:4x:xx" ← день деплоя
|
||||
→ disabledTill: +24 ч карантин
|
||||
|
||||
# Резолв проверять ДВУМЯ резолверами
|
||||
nslookup rutracker.org 192.168.2.2 # роутер
|
||||
nslookup rutracker.org 8.8.8.8 # внешний
|
||||
# NXDOMAIN на ОБОИХ → фильтр на стороне аплинка/провайдера
|
||||
# NXDOMAIN на роутере → Pi-hole/локальный DNS
|
||||
```
|
||||
|
||||
**Быстрый чек всех индексеров** — `wget -S` на каждый домен из контейнера prowlarr:
|
||||
`wget: bad address '<domain>'` = DNS-провал, `HTTP/1.1 200 OK` = домен жив.
|
||||
|
||||
**Фикс:** SOCKS5-прокси, но сперва убедиться, что прокси-контейнер виден целевой сети
|
||||
(`docker network inspect media_net --format '{{range .Containers}}{{.Name}} {{end}}'`).
|
||||
После `docker network connect` — **добавить сеть в compose**, иначе потеряется при пересоздании.
|
||||
Затем `POST /api/v1/indexer/testall` снимает `disabledTill`.
|
||||
|
||||
## 2. `disabledTill` НЕ виден в Radarr/Sonarr
|
||||
|
||||
`GET /api/v3/indexer` отдаёт `"status": {}` — пусто. Карантин смотреть **только** в Prowlarr
|
||||
(`/api/v1/indexerstatus`, `/api/v1/health`). Не делать вывод «индексеры свободны» по Radarr.
|
||||
|
||||
## 3. TrueNAS: `python3` ЕСТЬ, `curl` и `sqlite3` — НЕТ
|
||||
|
||||
**Исправление распространённой ошибки в доке** («нет curl и python3»). Факт 2026-09-26:
|
||||
`python3` на хосте работает (использовался для разбора JSON). Нет **`curl`** и **`sqlite3`**.
|
||||
|
||||
**Рабочий паттерн API = `wget` в контейнере + хостовый `python3`:**
|
||||
```bash
|
||||
ssh truenas_admin@HOST \
|
||||
"docker exec prowlarr sh -c 'wget -qO- --header=\"X-Api-Key: <KEY>\" http://localhost:9696/api/v1/health'"
|
||||
```
|
||||
|
||||
- busybox-`wget`: только `-qO-` / `-S` / `--header` / `--timeout`.
|
||||
**`-e use_proxy=yes` НЕ поддерживается** (GNU-опция) → прокси-тест изнутри linuxserver-контейнера
|
||||
этим способом невозможен.
|
||||
- Экранирование JSON через ssh ломается на кавычках в `--header` → надёжнее писать вывод
|
||||
в файл (`> /tmp/x.json`) и разбирать отдельным вызовом.
|
||||
- `jq` с дефисами: `.["download-dir"]`, не `.download-dir`.
|
||||
|
||||
## 4. `/etc/resolv.conf` контейнеров = `127.0.0.11`
|
||||
|
||||
Docker embedded DNS. В linuxserver-образах **нет `getent`** → использовать `nslookup`/`wget`.
|
||||
|
||||
## 5. RemotePathMapping: health жалуется при «задокументированном» маппинге
|
||||
|
||||
```
|
||||
RemotePathMappingCheck error
|
||||
"download client Transmission places downloads in /storage/Downloads/radarr
|
||||
but this directory does not appear to exist inside the container"
|
||||
```
|
||||
|
||||
Проверять **фактический** download-dir, а не предполагаемый:
|
||||
```bash
|
||||
docker exec transmission sh -c 'cat /config/settings.json' # → "download-dir": "/mnt/storage/Downloads"
|
||||
```
|
||||
Если download-dir **плоский** (без подкаталога категории) — сам маппинг не спасёт: подкаталога нет.
|
||||
Плюс Transmission монтирует `/mnt/storage`, Radarr — `/storage` (один хост-путь под двумя именами).
|
||||
**Всегда проверять наличие записей в API** (`GET /api/v3/remotepathmapping`), а не то, что записано в доке.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[personal/plans/lidarr-taiga-and-indexer-unblock]] — план, из которого выросли эти находки
|
||||
- [[family/projects/media-toolbox-taiga]] — состояние стека на Тайге
|
||||
Reference in new issue
Block a user