Files
obsidian-vault/family/projects/media-toolbox-taiga.md
T

432 lines
28 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: '*arr Stack на Тайге — Setup & Config'
namespace: family
type: reference
tags:
- taiga
- radarr
- sonarr
- prowlarr
- jellyfin
- arr
- media
- lidarr
- dns
- flaresolverr
- cloudflare
created: '2026-05-20'
updated: '2026-09-28'
status: deployed
---
# *arr Stack на Тайге — Setup & Config
> 🔴 **STATE 2026-09-28 (вечер): FlareSolverr — ПЛАН СОСТАВЛЕН, ждёт «go». НЕ УСТАНОВЛЕН.**
> Разведка подтвердила: **DNS-блокер УЖЕ ЗАКРЫТ** (прокси-маршрут настроен 2026-09-26,
> `vless-proxy` → 301/200 на трекеры, поиск RuTor 100 + Byrutor 6). Остаточная проблема —
> **Cloudflare JS-челлендж** на RuTracker / Kinozal / Kinozal (M); `IndexerStatus` карантин
> id 1/5/6. Решение — FlareSolverr. Compose `arr` **не менялся**.
> 🔴 Ключевое отличие от Кра́кена: у Тайги есть DNS-блок → **FlareSolverr сам должен ходить
> через `vless-proxy`**. Плюс два риска CrashChrome: `ShmSize=64MB` и **`Swap=0`** (`/proc/swaps` пуст).
> План, команды и открытые вопросы — [[personal/plans/flaresolverr-taiga-deploy]].
> ✅ **STATE 2026-09-28: LIDARR РАЗВЁРНУТ — 7-й сервис стека, music-менеджер.**
> Live: **`https://lidarr.mallexxx.duckdns.org`** → HTTP 200, TLS Let's Encrypt, **health ЧИСТЫЙ**.
> Контейнер `lidarr` **v3.1.0.4875-ls42**, порт 8686, uid 950, `media_net` + `caddy_default`.
> API-ключ `166654ac3f054096ae0e8393fb1bf940`. Compose — в общем `/mnt/RED_2TB/docker/arr/docker-compose.yml`.
> Root folder `/storage/Music` (accessible) — **та же папка, что читает Navidrome**.
> Download client Transmission (тест связи 200), naming: `{Artist Name}/{Album Title}/{track:00} - {Track Title}`.
> Prowlarr: Application `Lidarr` id=3 `fullSync`, `syncCategories=[3000…3060]`.
> ⏳ **Приёмка НЕ закрыта:** `api.lidarr.audio` (метаданные SkyHook) → **403 Cloudflare**
> прямым запросом, через `vless-proxy` → **200**. Заготовка `/tmp/add_proxy_env.py` (HTTP_PROXY/
> HTTPS_PROXY + NO_PROXY) — НЕ применена.
> 🔴 **Индексеры для музыки (проверено 2026-09-28):** аудио отдают только **RuTracker(1)**,
> **NoNaMe(4)**, **Kinozal(5,6)**. **RuTor и Byrutor — `music-search available="no"`, музыки НЕТ.**
> В Lidarr проброшен `NoNaMe Club (Prowlarr)`. Полный разбор, 7 питфоллов и креды Transmission —
> [[family/plans/lidarr-taiga-deploy]] §ФАКТИЧЕСКОЕ СОСТОЯНИЕ.
> 🔴 **ПИТФОЛЛ 2026-09-28: `429 TooManyRequests` от Prowlarr ≠ rate limit.** Это **карантин**
> (`disabledTill`) — Prowlarr отдаёт 429 на ЛЮБОЙ запрос к индексеру, пока тот в карантине.
> Лечится `POST /api/v1/indexer/testall` (сбрасывает `disabledTill`), **не ожиданием**.
> Проверять `GET /api/v1/indexerstatus`. Тот же симптом сбил диагностику синка Prowlarr→Lidarr.
>
> 🔴 **ПИТФОЛЛ 2026-09-28: Transmission требует логин/пароль.** `rpc-authentication-required: true`,
> юзер `transmission_admin`. Креды — в env `/mnt/RED_2TB/docker/transmission/docker-compose.yml`
> (`USER`/`PASS`). Без них любой новый download client даёт `400 Authentication failure`.
>
> 🔴 **ПИТФОЛЛ 2026-09-28: запись в root-owned Caddyfile.** `docker cp` на bind-mounted файле
> падает `device or resource busy`; `docker run alpine -v /:/host:rw` блокируется апрувом.
> РАБОЧИЙ путь: `docker exec -i caddy sh -c 'cat > /etc/caddy/Caddyfile' < /tmp/new.txt`.
> ✅ **STATE 2026-09-27 (v6, ночь): NAVIDROME РАЗВЁРНУТ — музыкальный сервер для `Music/`.**
> Контейнер **`navidrome`** (v0.64.2) на порту **4533**, домен **`https://music.mallexxx.duckdns.org`**
> (Caddy, Let's Encrypt). Compose — `/mnt/RED_2TB/docker/navidrome/docker-compose.yml`.
> Музыка смонтирована **`rw`** (`/mnt/RED_2TB/storage/Music` → `/music`) по явному решению Alex.
> **Скан завершён: 8043 трека.** Бэкап-папки исключены через `/storage/Music/.ndignore`.
> ✅ **Главное: Navidrome читает ТЕГИ, папки игнорирует** — артисты `ДДТ`, `Красная Плесень`
> из тегов, а не `!Rock&Folk` / `z Другое`. Баг Jellyfin #18162 здесь отсутствует.
> План и все питфоллы деплоя — [[family/how-to/navidrome-truenas-android]] §v4.
> **Jellyfin остаётся для ВИДЕО** (6 библиотек, музыка там не создаётся).
> ⚠️ **Jellyfin-библиотека музыки НЕ создаётся:** попытка 2026-09-27 провалена (баг #18162,
> навигация по папкам) → полный откат, БД восстановлена. Музыка → только Navidrome.
> ✅ **STATE 2026-09-27 (v5, вечер): Music-библиотека УДАЛЕНА, БД Jellyfin ВОССТАНОВЛЕНА.**
> Контейнеры **живы** (prowlarr/radarr/sonarr/jellyfin/transmission, uid 950, media_net на месте).
> **Индексеры: 3/6 рабочих** (RuTor/Byrutor/NoNaMe ✅; RuTracker/Kinozal — Cloudflare).
> Итог по Music: библиотека создавалась, скан прошёл (7826 треков, бэкап-папки исключены через
> `.ignore`), **приёмка Alex в UI провалена** (навигация по папкам) → **полный откат**:
> `DELETE /Library/VirtualFolders` + восстановление БД из
> `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (MD5 `b71b5d659a1262fa98b85a6ab0003f24`).
> **Сейчас: 6 библиотек, Audio=0, MusicArtist=0.**
> 🔴 **ПРИЧИНА провала: в файлах ОТСУТСТВУЕТ фрейм `TPE2` (albumartist)** — Jellyfin в music-библиотеке
> строит иерархию по `TPE2`, при его отсутствии уходит в fallback на папки и не читает `TPE1`.
> Теги **уже в UTF-16 с BOM**, диагноз «CP1251» **опровергнут**. См. [[personal/tech/jellyfin-tags-cp1251-unreadable]].
> Ремонт (простановка `TPE2` = `TPE1` по 7826 файлам) НЕ начат.
> **Lidarr НЕ установлен.** План — [[family/plans/music-jellyfin-lidarr-taiga]] (v5).
## Архитектура
Prowlarr (9696) → Radarr (7878) + Sonarr (8989) → Transmission (9091) → Jellyfin (8096)
Navidrome (4533) ← `/storage/Music` — ✅ развёрнут 2026-09-27, читает ТЕГИ (не папки)
⏳ Lidarr (8686) — план составлен 2026-09-28, ждёт «go». Связка с NAVIDROME.
→ [[family/plans/lidarr-taiga-deploy]] §2026-09-28
Staging папки (`radarr/`, `sonarr/`) невидимы в Jellyfin.
Router скрипт создаёт симлинки из staging → категоризированные библиотеки по NFO (genre + mpaa).
```
Transmission → /mnt/storage/Downloads
Radarr импортирует → /storage/radarr/<Title>/
Sonarr импортирует → /storage/sonarr/<Title>/
router.py (--apply)
movies/ cartoons/ series/
cartoons-series/ documentaries/ documentaries-series/
↓
Jellyfin
```
## Web UI (HTTPS через Caddy)
| Сервис | URL |
|--------|-----|
| Radarr | https://radarr.mallexxx.duckdns.org |
| Sonarr | https://sonarr.mallexxx.duckdns.org |
| Prowlarr | https://prowlarr.mallexxx.duckdns.org |
| Jellyfin | https://jellyfin.mallexxx.duckdns.org |
| **Navidrome** | **https://music.mallexxx.duckdns.org** — ✅ **развёрнут 2026-09-27** (музыка) |
| Transmission | https://transmission.mallexxx.duckdns.org (уже был) |
| Lidarr | https://lidarr.mallexxx.duckdns.org — ⏳ **НЕ установлен**; план составлен 2026-09-28, ждёт «go» ([[family/plans/lidarr-taiga-deploy]] §2026-09-28) |
Caddy: subdomain-based роутинг, без URL Base. Let's Encrypt автоматически.
> Правка Caddyfile — **только через alpine-контейнер** (Caddyfile root-owned, `truenas_admin`
> писать не может). Отправлять **весь файл**, не патч. См. skill `truenas-caddy-service-deploy`.
## Docker
**Compose:** `/mnt/RED_2TB/docker/arr/docker-compose.yml`
**Config dirs:** `/mnt/RED_2TB/docker/arr/{prowlarr,radarr,sonarr,jellyfin}/`
**PUID/PGID:** 921/921 (user `transmission`, тот же что владеет `/storage/`)
### Сети
| Контейнер | Сети |
|-----------|------|
| prowlarr | media_net + caddy_default |
| radarr | media_net + caddy_default |
| sonarr | media_net + caddy_default |
| jellyfin | caddy_default |
| transmission | transmission_default + **media_net** (персистентно в compose) |
| vless-proxy | hermes_taiga_net + **media_net** (персистентно в compose, добавлено 2026-09-26) |
> ✅ **ПОПРАВКА 2026-09-26 (проверено на живой машине):** строка про `vless-proxy` в `media_net` была
> **НЕВЕРНА.** Факт на момент начала сессии: `docker inspect vless-proxy` → только `hermes_taiga_net`
> (172.16.15.2). `docker network inspect media_net` → участники `prowlarr radarr transmission sonarr`.
> `docker exec prowlarr getent hosts vless-proxy` → NO DNS.
> Следствие: прокси-маршрут для индексеров, описанный в §«Prowlarr — прокси», **никогда не работал**.
>
> ✅ **ИСПРАВЛЕНО 2026-09-26:** `media_net` добавлена в `/mnt/RED_2TB/docker/vless-proxy/docker-compose.yml`
> (persistent) + контейнер пересоздан `--force-recreate`. Теперь `vless-proxy` = `172.16.17.6` в `media_net`,
> `getent hosts vless-proxy` из prowlarr/radarr резолвится. Полный разбор — [[family/plans/lidarr-taiga-deploy]] Фаза 0.
>
> ⚠️ **ПОПРАВКА PUID/PGID:** `921/921` устарело (см. строку выше про PUID 921 — артефакт до
> restore-инцидента). Факт 2026-09-26: **все сервисы стека под uid 950**, `PUID=950 PGID=950`
> в compose. `921` — старый uid transmission, не используется.
`media_net` — внешняя сеть, создана вручную: `docker network create media_net`
## Хранилище
**Host:** `/mnt/RED_2TB/storage/` → внутри контейнеров: `/storage/`
**Transmission mount:** `/mnt/RED_2TB/storage/` → `/mnt/storage/`
### Папки
| Папка | Назначение | Jellyfin |
|-------|-----------|----------|
| `radarr/` | Radarr root (staging) | ❌ |
| `sonarr/` | Sonarr root (staging) | ❌ |
| `Movies/` | Фильмы (симлинки + старый контент) | ✅ Movies |
| `Cartoons/` | Мультики (симлинки + старый контент) | ✅ Cartoons |
| `series/` | Сериалы | ✅ Series |
| `cartoons-series/` | Мультсериалы | ✅ Cartoon Series |
| `documentaries/` | Документалки | ✅ Documentaries |
| `documentaries-series/` | Документальные сериалы | ✅ Documentary Series |
| `Music/` | Музыка (8043 трека в Navidrome, 9 категорий) | ✅ **Navidrome** (не Jellyfin!) |
| `Downloads/` | Торренты (Transmission) | ❌ |
Все папки: uid=921, gid=921, NFSv4 ACL через midclt.
> 📌 **`Music/` на 2026-09-26:** файлы лежат, `/storage` уже смонтирован в контейнер (ro), но виртуальной папки Music в Jellyfin **нет**. Разведка + 6-шаговый план (бэкап → `POST /Library/VirtualFolders` → скан → приёмка) — [[family/how-to/jellyfin-config]] §«Taiga (TrueNAS)». Доп. монтирование НЕ требуется.
> ⚠️ Структура `Music/` — плоские категории (`!Rock&Folk`, `!Retro`, `!Классика`), НЕ `Artist/Album` → для `collectionType=music` Jellyfin раскладывает по тегам, риск «Unknown Artist».
## API ключи
| Сервис | Prefix |
|--------|--------|
| Radarr | `51e201f2` |
| Sonarr | `b1eb9cdd` |
| Prowlarr | `35c8b3f4` |
| Jellyfin | `eaglesetup2026taiga` |
Получить полный ключ: `docker exec <svc> grep ApiKey /config/config.xml`
Jellyfin token создан вручную через sqlite — хранится в `/mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db`.
## Remote Path Mapping (Radarr + Sonarr) — ⚠️ НЕ ПРИМЕНЁН, health жалуется
Transmission монтирует `/mnt/RED_2TB/storage/` → `/mnt/storage/`
Radarr/Sonarr монтируют `/mnt/RED_2TB/storage/` → `/storage/`
> 🔴 **ФАКТ 2026-09-26: этого маппинга в API Radarr/Sonarr НЕТ.** Health обоих даёт:
> ```
> RemotePathMappingCheck error
> "download client Transmission places downloads in /storage/Downloads/radarr
> but this directory does not appear to exist inside the container"
> ```
>
> **Фактическая причина (опровергает предположение ниже):** Transmission **не раскладывает** по
> `Downloads/radarr` — download-dir плоский:
> ```json
> {"download-dir": "/mnt/storage/Downloads",
> "incomplete-dir": "/mnt/storage/Downloads/transmission/incomplete",
> "script-torrent-done-enabled": false, "rpc-url": "/transmission/",
> "rpc-whitelist": "172.16.*.*"}
> ```
> Radarr ОЖИДАЕТ подкаталог категории (`/storage/Downloads/radarr`) — его нет.
> Разбирать в Фазе 4 плана [[family/plans/lidarr-taiga-deploy]].
Предполагаемый маппинг в каждом (задумано, но не выставлено):
- host: `transmission`
- remotePath: `/mnt/storage/Downloads/`
- localPath: `/storage/Downloads/`
## 🔴 Индексеры НЕ РАБОТАЮТ: DNS-фильтр провайдера (найдено 2026-09-26)
**Все 6 индексеров в карантине (`disabledTill` = +24 ч), `initialFailure = 2026-05-20`**
(дата первоначального деплоя) → **не работали ни одного дня.**
```
GET /api/v1/health (prowlarr) →
"Indexers unavailable due to failures for more than 6 hours:
RuTracker, RuTor, NoNaMe Club, Kinozal, Kinozal (M)"
```
**Корень — NXDOMAIN на трекеры, и с роутера, и с 8.8.8.8:**
```bash
nslookup rutracker.org 192.168.2.2 # роутер → NXDOMAIN
nslookup rutracker.org 8.8.8.8 # Google → NXDOMAIN
nslookup google.com 192.168.2.2 # → OK
```
| Домен | DNS |
|---|---|
| `rutracker.org` | ❌ NXDOMAIN |
| `rutor.info` | ❌ NXDOMAIN |
| `kinozal.tv` | ❌ NXDOMAIN |
| `nnmclub.to` | ❌ NXDOMAIN |
| `byrutgame.org` | ✅ 185.200.198.230 |
| `google.com` | ✅ |
> Это **не Pi-hole и не роутер** (8.8.8.8 тоже NXDOMAIN) — блок на стороне аплинка Тайги.
> Это **другой** класс, чем задокументированные «Cloudflare 403 на indexers.prowlarr.com»
> и «RuTracker Turnstile»: здесь DNS не отдаёт IP вообще.
Прокси для обхода описан в §«Prowlarr — прокси». **✅ 2026-09-26: прокси-маршрут починен** —
3 из 6 индексеров работают. Полный разбор — [[family/plans/lidarr-taiga-deploy]] Фаза 0.
### ✅ Перепроверено 2026-09-28 (важно: часть «блокеров» закрыта)
| Проверка | Результат |
|---|---|
| `vless-proxy` в `media_net` | ✅ `172.16.17.6`, `getent hosts vless-proxy` из prowlarr OK |
| `curl -x socks5h://vless-proxy:1080 https://rutracker.org/` | ✅ **301** |
| `… https://nnmclub.to/` | ✅ **200** |
| `… https://kinozal.me/` | ✅ **200** |
| `… https://kinozal.tv/` | ❌ **000** (домен мёртв — подтверждено) |
| `GET /api/v1/indexerproxy` | `vless-socks5` id=1, Socks5, host `vless-proxy`, port 1080, tags=[1] |
| `GET /api/v1/tag` | `proxy` id=1 (таблица Tags **не пуста** — поправка к записи 2026-09-26) |
| `GET /api/v1/indexer` | все 6 `enable=true`, **tags=[1]** у всех |
| `GET /api/v1/search?query=matrix` | RuTor **100**, Byrutor **6** |
| `GET /api/v1/indexerstatus` | карантин: id **1, 5, 6** (`disabledTill` +24 ч); 2/3/4 чисты |
| `proxy-api` из `lidarr` | curl с `-x socks5h://vless-proxy:1080` |
| `docker ps -a` grep flare | **NONE** — FlareSolverr отсутствует |
🔴 **Итог: остаточная проблема — ТОЛЬКО Cloudflare**, DNS-блок снят прокси-маршрутом.
`GET rutracker.org/forum/login.php` через прокси → `<title>Just a moment...</title>`
(+`challenges.cloudflare.com`) = JS-челлендж, который Prowlarr сам не проходит.
Решение — FlareSolverr → [[personal/plans/flaresolverr-taiga-deploy]].
🔴 **`429 TooManyRequests` от Prowlarr = карантин, не rate-limit.** Снимается
`POST /api/v1/indexer/testall`, НЕ ожиданием. Проверять `GET /api/v1/indexerstatus`.
⚠️ **Питфолл API на Тайге (проверено 2026-09-28):** передача `X-Api-Key` через вложенный
`docker exec … sh -c 'curl -H "X-Api-Key: …"'` съедает кавычки → **401 Unauthorized**,
хотя ключ верный. 🔴 **Рабочий приём — файл-заголовок:**
```bash
docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845" > /tmp/h.txt; \
curl -s -H @/tmp/h.txt http://localhost:9696/api/v1/indexer'
```
Внутри контейнера `python3` НЕТ (только `curl` есть в linuxserver-образах) — JSON разбирать
хостовым `python3` через файл: `docker exec … > /tmp/ix.json` → `python3 -c "…"`.
Также `wget` из busybox не умеет `-H` с кавычками — предпочитать `curl -H @file`.
## Prowlarr — прокси для заблокированных индексеров
`vless-proxy` доступен в `media_net` как `vless-proxy` (SOCKS5 **1080**, HTTP **1081**).
Настройка (фактическое состояние после 2026-09-26):
- Прокси `vless-socks5` (id=1), Type `Socks5`, Host `vless-proxy`, Port `1080`
- Тег `proxy` (id=1) — создан; **все 6 индексеров** имеют tags `[1]`
> ✅ **ИСПРАВЛЕНО 2026-09-26.** До этого таблица `Tags` в `prowlarr.db` была **ПУСТА**,
> а `Indexers.Tags` ссылался на висячий id `[1]`; `IndexerProxies.Tags` = `[]`.
> Прокси физически не был привязан ни к чему → все индексеры падали в NXDOMAIN.
>
> **Результат `POST /api/v1/indexer/testall` (2026-09-26):**
>
> | id | Индексер | Статус |
> |---|---|---|
> | 1 | RuTracker | ❌ `403 Cloudflare "Just a moment..."` на `/forum/login.php` |
> | 2 | RuTor | ✅ OK |
> | 3 | Byrutor | ✅ OK |
> | 4 | NoNaMe Club | ✅ OK |
> | 5 | Kinozal | ❌ `blocked by CloudFlare Protection` |
> | 6 | Kinozal (M) | ❌ `blocked by CloudFlare Protection` |
>
> RuTracker: `GET /forum/index.php` → **200**, `POST /forum/login.php` → **403 Cloudflare JS-challenge**.
> Остаточная проблема — Cloudflare, НЕ DNS.
> ✅ **РЕШЕНО 2026-09-28: FlareSolverr развёрнут.** Прокси-элемент `flaresolverr` (id=2, host
> `http://flaresolverr:8191/`, `requestTimeout=120`), теги `[1,2]` на RuTracker/Kinozal/Kinozal(M).
> FS ходит через `vless-proxy` через env **`PROXY_URL=socks5://vless-proxy:1080`**.
> Пруф: `rutracker.org/forum/login.php` → `Challenge solved!` 200. Полный разбор —
> [[personal/plans/flaresolverr-taiga-deploy]].
> ⏳ **Осталось:** тег FS на NoNaMe (id 4); перепроверить Kinozal (5) одиночным тестом.
>
> 🔴 **Важно для RuTracker/Kinozal: `kinozal.tv` МЁРТВ** (NXDOMAIN даже на выходной стороне прокси) —
> использовать `kinozal.me` (через прокси → 200).
## Индексеры (те же что на Кракене)
| id | Имя | Примечание |
|-----|-----|-----------|
| 1 | RuTracker | через прокси **+ FlareSolverr**; ✅ работает (2026-09-28) |
| 2 | RuTor | через прокси; ✅ работает |
| 3 | Byrutor | через прокси; ✅ работает; `enableRss: false` |
| 4 | NoNaMe Club | через прокси; ✅ работает (FS-тег не навешен — не требуется) |
| 5 | Kinozal | через прокси **+ FlareSolverr**; ✅ `Challenge solved!` на `kinozal.me/browse.php` |
| 6 | Kinozal (M) | через прокси **+ FlareSolverr**; ✅ из 6/6 ключевое — `isValid=true` |
`preferMagnetUrl: true` для всех → нет дневного лимита на .torrent.
## router.py
**Скрипт:** `/mnt/RED_2TB/docker/arr/media-pipeline/router.py`
Адаптация kraken-версии с изменёнными путями:
```python
MEDIA_BASE = Path("/mnt/RED_2TB/storage")
SOURCES = [
("movie", MEDIA_BASE / "radarr"),
("series", MEDIA_BASE / "sonarr"),
]
TARGETS = {
"movies": MEDIA_BASE / "Movies",
"series": MEDIA_BASE / "series",
"cartoons": MEDIA_BASE / "Cartoons",
"cartoons-series": MEDIA_BASE / "cartoons-series",
"documentaries": MEDIA_BASE / "documentaries",
"documentaries-series": MEDIA_BASE / "documentaries-series",
}
JELLYFIN_URL = "http://jellyfin:8096" # или по IP
```
Запуск вручную (авто-хука нет):
```bash
ssh truenas_admin@mallexxx.duckdns.org "python3 /mnt/RED_2TB/docker/arr/media-pipeline/router.py"
# проверить, затем:
ssh truenas_admin@mallexxx.duckdns.org "python3 /mnt/RED_2TB/docker/arr/media-pipeline/router.py --apply"
```
## Отличия от Кракена
| | Kraken | Taiga |
|--|--------|-------|
| Reverse proxy | nginx path-based (`/sonarr`) | Caddy subdomain-based |
| HTTPS | нет | автоматически (Let's Encrypt) |
| PUID/PGID | 1000/1000 | 921/921 (transmission) |
| Staging папки | `movies-radarr/`, `series-sonarr/` | `radarr/`, `sonarr/` |
| Прокси для индексеров | нет | vless-proxy SOCKS5 (hermes_taiga_net) |
| Авто-синк (watchlist) | ❌ (был, убрали) | ❌ нет |
| Jellyfin users | alex + lisa | только alex |
| PGS→SRT | pgsrip + cron | TBD (при необходимости) |
## Pitfalls (задокументировано при деплое)
- `d---------` на папках в ls — это норма для NFSv4 ACL на TrueNAS. Реальные права через `midclt call filesystem.getacl`
- Не трогать ACL существующих папок (Movies, Cartoons, Downloads) — только новые
- После alpine `chown` NFSv4 ACE слетают — нужно повторно применять через midclt `filesystem.setacl`
- `indexers.prowlarr.com` отдаёт 403 Cloudflare с IP Тайги → Prowlarr не может скачать Cardigann definitions. Решение: скопировать `/config/Definitions/` с Кракена (549 yml-файлов)
- После старта Prowlarr `/indexer/schema` недоступен ~2-3 мин (HTTP timeout к indexers.prowlarr.com). Ждать
- POST /indexer зависает при добавлении Cardigann через API (capability check). Решение: import через SQLite напрямую с Кракена
- Jellyfin 10.11: `name` в POST `/Library/VirtualFolders` должен быть в **query string** (`?name=Movies&collectionType=movies`), не в body
- Transmission whitelist задаётся через env var `WHITELIST` в compose — settings.json перезаписывается при старте
- Transmission compose location: `/mnt/RED_2TB/docker/transmission/docker-compose.yml`
- ⚠️ **УТОЧНЕНО 2026-09-26: `python3` на хосте Тайги ЕСТЬ** (использовался для разбора JSON).
Не хватает **`curl`** и **`sqlite3`**. Рабочий паттерн API-вызовов — **`wget` внутри контейнера
+ хостовый `python3` для разбора**:
```bash
ssh truenas_admin@mallexxx.duckdns.org \
"docker exec prowlarr sh -c 'wget -qO- --header=\"X-Api-Key: <KEY>\" http://localhost:9696/api/v1/health'"
```
busybox-`wget` умеет только `-qO-` / `--header` / `--timeout`; **`-e use_proxy=yes` НЕ поддерживает
(GNU-опция)** → прокси-тесты внутри контейнера этим способом невозможны.
- ⚠️ **Shell-экранирование JSON через ssh** — кавычки в `--header` ломаются на нескольких уровнях.
Рабочий приём: писать результат **в файл** внутри контейнера/на хосте, разбирать отдельно.
- ⚠️ **`/etc/resolv.conf` контейнеров** = `nameserver 127.0.0.11` (Docker embedded DNS) →
в контейнерах нет `getent`; для проверки DNS использовать `nslookup`/`wget`.
## История
- **2026-09-28 (вечер)** — разведка под задачу «поставить FlareSolverr как на Кра́кене,
пустить трекеры через прокси». Подтверждено, что **DNS-блокер уже закрыт** (прокси-маршрут
от 2026-09-26: rutracker 301 / nnmclub 200 / kinozal.me 200; поиск RuTor 100 + Byrutor 6).
Остаточная проблема — **Cloudflare JS-челлендж** на RuTracker/Kinozal/Kinozal(M) (карантин
`IndexerStatus` id 1/5/6). FlareSolverr отсутствует. План — [[personal/plans/flaresolverr-taiga-deploy]].
**Ничего не изменено.**
- **2026-05-20** — первоначальный деплой
- **2026-09-26** — разведка под задачу «Lidarr + музыка + синк с Jellyfin». Стек жив, но
**индексеры не работают с дня деплоя** (DNS-фильтр провайдера: NXDOMAIN на rutracker.org /
rutor.info / kinozal.tv / nnmclub.to с 8.8.8.8 и роутера; `byrutgame.org` резолвится).
Обнаружено, что **vless-proxy НЕ подключён к media_net** — прокси-обход никогда не работал.
План и 2 открытых вопроса — [[personal/plans/lidarr-taiga-and-indexer-unblock]]. Изменений нет.
## Связанные заметки
- [[personal/plans/flaresolverr-taiga-deploy]] — 🔴 **АКТИВНЫЙ ПЛАН 2026-09-28:** FlareSolverr на Тайге (обход Cloudflare на RuTracker/Kinozal) + снятие карантина индексера
- [[personal/plans/lidarr-taiga-and-indexer-unblock]] — ⏳ **план 2026-09-26:** Lidarr на Тайге + разблокировка индексеров (DNS-фильтр — ✅ закрыт 2026-09-28)
- [[personal/tech/music-tags-repair-truenas]] — ремонт 7906 битых тегов (блокирует Music-библиотеку)
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin на Тайге
- [[personal/tech/truenas-nfs4-acl-and-arrmultiuser]] — NFSv4 ACL и uid 950