[2026-09-29] eagle: family/documents/vault-sync/2026-09-28-http402-balance-outage-3.md family/how-to/jellyfin-config.md family/how-to/lampac-torrents.md family/how-to/navidrome-truenas-android.md family/index.md family/plans/lidarr-artist-watchlist.md family/plans/music-jellyfin-lidarr-taiga.md family/projects/media-toolbox-taiga.md personal/tech/jellyfin-tags-cp1251-unreadable.md personal/tech/lampac-deployment.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-29 00:57:52 +06:00
1 parent a32c0dbdae
commit e224ac29c9
14 files changed
+20 -497

No files matched your search

@@ -31,7 +31,7 @@ RuntimeError: HTTP 402: Insufficient Balance (request_id: …)
`personal/plans/balda-mm-pr8-review-fixes.md` — mode-flip), три фазы `Pushed ✓`.
Второй тик (проверочный, Taiga, `07:30:03`) влил остаток бэклога `Updating 6dfedbc..0ac3efb`:
`family/projects/media-toolbox-taiga.md`, `personal/plans/flaresolverr-taiga-deploy.md`,
`family/how-to/arr-stack-taiga.md`, `personal/tech/flaresolverr-taiga.md`,
`personal/tech/flaresolverr-taiga.md` — 3 файла, +259/−265 (переписаны два flaresolverr-файла).
Потерь нет — git-синк идемпотентен, всё доехало за два тика.
+1 -1
View File
@@ -433,6 +433,6 @@ POST /Items/<lib>/Refresh?Recursive=true&RefreshMode=FullRefresh
- [[personal/tech/jellyfin-tags-cp1251-unreadable]] — 🔴 **КОРНЕВОЙ ДЕФЕКТ:** нет фрейма `TPE2` (albumartist); Jellyfin уходит в fallback на папки (имя файла легаси)
- [[personal/tech/music-tags-repair-truenas]] — ремонт тегов (мойибаке/пустые), волна 38
- [[family/plans/music-jellyfin-lidarr-taiga]] — план Music → Jellyfin + Lidarr (Фаза 1 частично выполнена)
- [[family/projects/media-toolbox-taiga]] — *arr стек на Taiga (Prowlarr/Radarr/Sonarr/Transmission/Jellyfin)
- [[family/how-to/arr-stack-taiga]] — *arr стек на Taiga (Prowlarr/Radarr/Sonarr/Transmission/Jellyfin)
- [[family/how-to/truenas-infrastructure]] — TrueNAS: контейнеры, доступ, структура пула
- [[family/how-to/navidrome-truenas-android]] — альтернативный музыкальный сервер (Navidrome) на той же папке `Music`
-1
View File
@@ -494,4 +494,3 @@ Chromium: Timeout 180000ms exceeded.
- [[personal/tech/lampac-torrserver]] — детальная диагностика, маршруты `/ts/`
- [[personal/tech/lampac-deployment]] — деплой, плагин каталога, разбор «Мастерская сатаны» 2026-09-24
- [[family/how-to/arr-stack-kraken]] — стек Prowlarr/Radarr/Sonarr (отдельная, не связанная ветка)
- [[personal/tech/prowlarr-flaresolverr-cloudflare]] — индексера Prowlarr
+1 -1
View File
@@ -684,7 +684,7 @@ Lidarr матчит по MusicBrainz release groups и пишет полные
— закачанное Lidarr'ом подхватывается Navidrome автоматически.
> 🆕 **2026-09-28 — план деплоя Lidarr к Navidrome составлен, ждёт «go» Alex.**
> Полный план — [[family/plans/lidarr-taiga-deploy]] §2026-09-28.
> Актуальный runbook Taiga — [[family/how-to/arr-stack-taiga]].
> Ключевое для этой связки:
> - **Root folder Lidarr = `/storage/Music`** — та же папка, что читает Navidrome.
> - 🔴 **`Write Metadata Tags` в Lidarr ОБЯЗАТЕЛЕН.** Без него Lidarr не пишет `Album Artist`,
+1 -1
View File
@@ -45,7 +45,7 @@ Hub: [[family/how-to/truenas-infrastructure|TrueNAS Infrastructure]]
- [[family/how-to/truenas-infrastructure|TrueNAS Infrastructure]] — Тайга NAS
- [[family/how-to/truenas-access|TrueNAS Access]]
- [[family/how-to/truenas-rclone-backup|TrueNAS Rclone Backup]]
- [[family/projects/media-toolbox-taiga|Media Toolbox (Taiga)]] — *arr стек на TrueNAS
- [[family/how-to/arr-stack-taiga|Arr stack (Taiga)]] — *arr стек на TrueNAS
- [[family/how-to/arr-stack-taiga|Arr Stack — Taiga]]
- [[family/how-to/arr-stack-taiga|Arr stack на Taiga]] — ✅ SkyHook, Transmission и RuTracker проверены после рестарта
- [[family/plans/lidarr-artist-watchlist|Lidarr — список артистов]] — 🟡 **150 позиций в 3 тирах** + дельта: 195 артистов «слушаю много / на NAS мало-нет»; можно ставить
+2 -2
View File
@@ -3,10 +3,10 @@
**Дата:** 2026-09-28
**Статус:** ⏳ список готов — **SkyHook починен, можно ставить** (Lidarr: 1 артист, Radiohead)
**Namespace:** family
**Связано:** [[family/plans/lidarr-taiga-deploy]] §«АУДИТ ВСЕГО СТЕКА» · [[personal/tech/music-library-gap-analysis]]
**Связано:** [[family/how-to/arr-stack-taiga]] · [[personal/tech/music-library-gap-analysis]]
> ⚠️ **Два дефекта стека открыты** — поставить артистов можно, но закачка не поедет,
> пока не закрыты (детали — в [[family/plans/lidarr-taiga-deploy]]):
> Проверять текущие ограничения и маршрутизацию в [[family/how-to/arr-stack-taiga]]:
> 1. 🔴 RuTracker/Kinozal/Kinozal(M) — таймаут в Prowlarr (FS-сессия без `--proxy-server`);
> 2. 🔴 Lidarr → Transmission `Failed to authenticate` (креды download-client пустые).
+7 -7
View File
@@ -731,7 +731,7 @@ TAG:ID3v1 Comment=ñêàçêà ← 🔑 ñêàçêà = "сказ
## ⚠️ КОНФЛИКТ С ПРЕДЫДУЩИМ РЕШЕНИЕМ ALEX — ТРЕБУЕТ ПОДТВЕРЖДЕНИЯ
В [[family/plans/lidarr-taiga-deploy]] (2026-09-26) зафиксировано решение Alex:
В [[family/how-to/arr-stack-taiga]] зафиксирована актуальная схема Taiga:
| # | Вопрос | Решение 2026-09-26 |
|---|---|---|
@@ -765,7 +765,7 @@ TAG:ID3v1 Comment=ñêàçêà ← 🔑 ñêàçêà = "сказ
`backup_conv40` прошёл успешно.
> 🔑 **Вывод:** аргумент «сначала ремонт тегов, библиотеку не создавать» **устарел**.
> Именно он блокировал Фазу 3 в [[family/plans/lidarr-taiga-deploy]].
> Подробная проверка — в [[family/how-to/arr-stack-taiga]].
> Остаточные дефекты — 29 файлов (16 битых + 13 DRM) из [[personal/tech/music-broken-toload]];
> они и раньше объявлялись нерепарируемыми и ждут перезагрузки. **Это не блокер библиотеки.**
@@ -999,7 +999,7 @@ lidarr.mallexxx.duckdns.org {
1. `docker ps` — 6 сервисов + lidarr Up, uid 950.
2. Health Radarr/Sonarr/Lidarr — без `RemotePathMappingCheck`.
3. Jellyfin Music — треки видны, бэкапы не проиндексированы.
4. Обновить доки: `jellyfin-config`, `media-toolbox-taiga`, `lidarr-taiga-deploy`.
4. Обновить доки: `jellyfin-config`, `arr-stack-taiga`.
---
@@ -1154,9 +1154,9 @@ docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffprobe -v error \
## Связанные заметки
- [[family/plans/lidarr-taiga-deploy]] — Фаза 0 (прокси для индексеров) выполнена 2026-09-26
- [[family/how-to/arr-stack-taiga]] — актуальный arr runbook Taiga
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin, Музыкальная библиотека
- [[family/projects/media-toolbox-taiga]] — *arr стек на Taiga
- [[family/how-to/arr-stack-taiga]] — *arr стек на Taiga
- [[personal/tech/music-tags-repair-truenas]] — ремонт тегов (волна 38 закрыта для MP3)
- [[personal/tech/music-broken-toload]] — 29 битых/DRM на перезагрузку (не удалены)
- [[personal/tech/jellyfin-tags-cp1251-unreadable]] — **корневой дефект: нет фрейма `TPE2` (albumartist)** (имя файла легаси)
@@ -1176,8 +1176,8 @@ docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffprobe -v error \
## Связанные заметки
- [[family/plans/lidarr-taiga-deploy]] — Фаза 0 (прокси для индексеров) выполнена 2026-09-26
- [[family/how-to/arr-stack-taiga]] — актуальный arr runbook Taiga
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin, план Music-библиотеки
- [[family/projects/media-toolbox-taiga]] — *arr стек на Taiga
- [[family/how-to/arr-stack-taiga]] — *arr стек на Taiga
- [[personal/tech/music-tags-repair-truenas]] — ремонт тегов (волна 38 закрыта для MP3)
- [[personal/tech/music-broken-toload]] — 29 битых/DRM на перезагрузку (не удалены)
-473
View File
@@ -1,473 +0,0 @@
---
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 (конец сессии, аудит): SkyHook ✅ РАБОТАЕТ, но 2 дефекта открыты.**
> Проверено живым `artist/lookup?term=Astrix` → **10 результатов** ⇒ блокер метаданных снят.
> Остальные факты: Prowlarr `health: []` + карантин пуст; Radarr `health: []`; Navidrome 1207
> артистов / 7791 трек; rootfolder `/storage/Music` accessible, 911 ГБ; 7 доменов отвечают.
> 🔴 **ДЕФЕКТ 1:** RuTracker(1) + Kinozal(5) + Kinozal(M)(6) — `indexer/test` → **пустой ответ даже
> при 90 с**; работают NoNaMe/RuTor/Byrutor. FS жив (3.5.2, `status: ok`, сессия `["prowlarr"]` есть),
> теги `[1,2]` верны, карантина нет. **Первый шаг диагностики:** `docker exec flaresolverr ps aux |
> grep chromium` → искать `--proxy-server=socks5://vless-proxy:1080`.
> 🔴 **ДЕФЕКТ 2:** Lidarr → Transmission `Failed to authenticate` (креды download-client пустые;
> Transmission требует логин). Побочно `musicCategory` читается пустой — проверить, не потерялась ли.
> **Артисты в Lidarr: 1 (Radiohead)** — 150 позиций из [[family/plans/lidarr-artist-watchlist]]
> **ещё не поставлены**.
> Полный разбор — [[family/plans/lidarr-taiga-deploy]] §«АУДИТ ВСЕГО СТЕКА 2026-09-28».
> ✅ **STATE 2026-09-28 (вечер, финал): LIDARR РАБОЧИЙ — приёмка закрыта.**
> 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]`.
> Проброшен `NoNaMe Club (Prowlarr)`.
> 🔴 **`health: []` ≠ «работает»** — проверять поиск. Проверено end-to-end:
> `artist/lookup?term=radiohead` → **10 результатов**, артист **Radiohead добавлен** (id=1),
> `/release?artistId=1` → **23 раздачи** FLAC (seeders 3–7).
> 🔑 **Как снят SkyHook-блокер (главный вывод):** `api.lidarr.audio` за Cloudflare →
> прямой запрос с IP Тайги **403**, через `vless-proxy` **200**. FlareSolverr тут НЕ помогает
> (Lidarr ходит в SkyHook сам). ⚠️ **env `HTTP_PROXY`/`HTTPS_PROXY` Lidarr НЕ ЧИТАЕТ** —
> .NET-клиент SkyHook их игнорирует. Рабочий фикс — **встроенный прокси-конфиг**:
> `PUT /api/v1/config/host/1` c `proxyEnabled=true`, `proxyType=http`,
> `proxyHostname=vless-proxy`, `proxyPort=1081`, bypass `localhost,127.0.0.1,vless-proxy`.
> Скрипт `/tmp/lidarr_set_proxy.py`. ⚠️ Порт **1081** (HTTP), не 1080 (SOCKS5).
> 🔴 **Индексеры для музыки (проверено 2026-09-28):** аудио отдают только **RuTracker(1)**,
> **NoNaMe(4)**, **Kinozal(5,6)**. **RuTor и Byrutor — `music-search available="no"`, музыки НЕТ.**
> ✅ Все 4 аудио-индексера разблокированы 2026-09-28 (FlareSolverr) — [[personal/tech/flaresolverr-taiga]].
> Полный разбор, питфоллы и креды Transmission — [[family/plans/lidarr-taiga-deploy]] §ФАКТИЧЕСКОЕ СОСТОЯНИЕ.
> ⏳ **Остаток (не блокирует Lidarr): пароль RuTracker неверен** (`Auth Failed`, форма логина
> возвращается) → нужен верный пароль от Alex; Radarr/Sonarr `RemotePathMappingCheck` —
> каталоги `Downloads/{radarr,sonarr}` созданы, нужен рестарт Radarr/Sonarr.
> ✅ **STATE 2026-09-28 (вечер): ИНДЕКСЕРЫ 6/6 РАБОЧИЕ — FlareSolverr развёрнут.**
> Все блокеры сняты. Было 3/6, стало 6/6, `health` и `indexerstatus` → `[]` (пусто).
> Поиск «matrix» → **256 результатов** (RuTor 100, RuTracker 50, NoNaMe 50, Kinozal 50, Byrutor 6).
> **RuTracker впервые `valid` за всё время стека (с 2026-05-20).** Карантины id 1/5/6 сняты.
> Схема: два прокси-элемента в Prowlarr — `vless-socks5` (DNS-блок) + `flaresolverr` (Cloudflare),
> теги `[1,2]` на CF-индексеры. FlareSolverr сам ходит через `vless-proxy` (`PROXY_URL`).
> Контейнер `flaresolverr` в `arr/docker-compose.yml`, `8191`, `shm_size: 1gb`, `LOG_LEVEL=warning`.
> 🔴 Главный питфолл: FS-сессия `prowlarr`, созданная ДО появления `PROXY_URL`, навсегда
> остаётся без прокси → `ERR_NAME_NOT_RESOLVED` → ложное «blocked by CloudFlare».
> Лечится `sessions.destroy`. Swap НЕ нужен (RAM 21 GB) — Alex отклонил.
> Полный разбор, все питфоллы и команды — [[personal/tech/flaresolverr-taiga]].
> 🔴 **ПИТФОЛЛ 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]** (до правки 2026-09-28) |
| `GET /api/v1/search?query=matrix` | RuTor **100**, Byrutor **6** (до FS) |
| `GET /api/v1/indexerstatus` | карантин: id **1, 5, 6** (`disabledTill` +24 ч); 2/3/4 чисты |
| `docker ps -a` grep flare | **NONE** — FlareSolverr отсутствовал до 2026-09-28 |
**Итог на тот момент: остаточная проблема — ТОЛЬКО Cloudflare**, DNS-блок снят прокси-маршрутом.
`GET rutracker.org/forum/login.php` через прокси → `<title>Just a moment...</title>`
(+`challenges.cloudflare.com`) = JS-челлендж, который Prowlarr сам не проходит.
✅ **ЗАКРЫТО 2026-09-28:** FlareSolverr развёрнут → **6/6 индексеров valid**, карантины сняты,
поиск 256. Полный разбор — [[personal/tech/flaresolverr-taiga]].
🔴 **`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-28):
- Прокси `vless-socks5` (id=1), Type `Socks5`, Host `vless-proxy`, Port `1080` — тег `proxy` (id=1)
- Прокси `flaresolverr` (id=2), Type `FlareSolverr`, Host `http://flaresolverr:8191/`,
**`requestTimeout=180`** — тег `flaresolverr` (id=2)
- **Индексерам за CF нужны ОБА тега `[1,2]`**: id 1, 4, 5, 6. id 2, 3 → `[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 развёрнут, все 6 индексеров valid.**
> Прокси-элемент `flaresolverr` (id=2, host `http://flaresolverr:8191/`, `requestTimeout=180`),
> теги `[1,2]` на RuTracker/NoNaMe/Kinozal/Kinozal(M).
> FS ходит через `vless-proxy` через env **`PROXY_URL=socks5://vless-proxy:1080`**.
> Пруф: `rutracker.org/forum/login.php` → `Challenge solved!` 200.
> `health` → `[]`, `indexerstatus` → `[]`, поиск «matrix» → **256 результатов**.
> Полный разбор, 5 питфоллов и команды — [[personal/tech/flaresolverr-taiga]].
>
> 🔴 **Важно для 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 развёрнут → индексеры 6/6.**
Контейнер `flaresolverr` добавлен в `arr/docker-compose.yml` (`8191`, `media_net`,
`shm_size: 1gb`, `LOG_LEVEL=warning`, `PROXY_URL=socks5://vless-proxy:1080`).
Прокси-элемент `flaresolverr` (id=2, `requestTimeout=180`) + теги `[1,2]` на CF-индексеры.
`health` → `[]`, `indexerstatus` → `[]`, поиск «matrix» → **256**.
Главный питфолл — FS-сессия `prowlarr` не наследует `PROXY_URL` (лечится `sessions.destroy`).
Swap не трогали (RAM хватает) — Alex отклонил идею.
Полный разбор — [[personal/tech/flaresolverr-taiga]].
- **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). План —
[[personal/plans/flaresolverr-taiga-deploy]].
- **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** — прокси-обход никогда не работал.
Исправлено в тот же день (3/6 индексеров).
- **2026-05-20** — первоначальный деплой
## Связанные заметки
- [[personal/tech/flaresolverr-taiga]] — ✅ **FlareSolverr на Тайге: 6/6 индексеров, все 5 питфоллов** (2026-09-28)
- [[personal/plans/flaresolverr-taiga-deploy]] — ✅ **выполненный план** FlareSolverr на Тайге + снятие карантина индексера
- [[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
@@ -653,4 +653,4 @@ POST /Items/<lib>/Refresh?Recursive=true&RefreshMode=FullRefresh
- [[personal/tech/music-tags-repair-truenas]] — ремонт тегов, волна 38 (мойибаке/пустые)
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin
- [[personal/tech/music-broken-toload]] — 29 битых/DRM
- [[family/projects/media-toolbox-taiga]] — *arr стек
- [[family/how-to/arr-stack-taiga]] — *arr стек
+1 -3
View File
@@ -21,7 +21,6 @@ related:
- '[[personal/tech/multistream-single-flow-limit]]'
- '[[family/how-to/kraken-network]]'
- '[[family/how-to/tv-luna-send]]'
- '[[personal/tech/prowlarr-flaresolverr-cloudflare]]'
---
# Lampac — развёртывание и эксплуатация (Кра́кен)
@@ -489,7 +488,7 @@ Lampa (TV) → «Торренты» → PidTor (модуль lampac)
не повторять без явного согласия.
**Связано:** [[family/how-to/lampac-torrents]] · [[personal/tech/lampac-torrserver]] ·
[[family/how-to/arr-stack-kraken]] · [[personal/tech/prowlarr-flaresolverr-cloudflare]]
[[family/how-to/arr-stack-kraken]]
## 🔴 2026-09-24: генератор каталога признан вторым матчером — уходит в проект
@@ -4340,4 +4339,3 @@ python3 probe_ui.py "$WS"
Lampa создаёт `parts` заново на каждый вызов `partNext`. Флаги однократности
держать **глобально** (`window.*`) и сбрасывать по событию смены экрана.
Симптом нарушения: секции **дублируются** (13 заголовков вместо 9).
-1
View File
@@ -71,7 +71,6 @@ jac.red …results?title=Devils Workshop → 200, 2 раздачи
из-за мёртвого FlareSolverr (Chrome не стартует). К пустой выдаче Lampa это прямого
отношения не имеет (Prowlarr в цепочку PidTor не входит), но ломает **Radarr/Sonarr** —
то есть автозакачку. Разбор и незавершённый фикс:
[[personal/tech/prowlarr-flaresolverr-cloudflare]] §«2026-09-24».
**Список индексеров jac.red (25 шт.) — измеримо, не догадкой:**
`GET http://jac.red/api/v2.0/indexers?configured=true` → массив с `name`.
@@ -206,4 +206,4 @@ Alex на неё ответил «Чё блядь». **Не требовать
- [[personal/tech/xray-reverse-tunnel-kraken-truenas]] — reverse-туннель, замеры egress
- [[personal/plans/lampac-kraken]] — план развёртывания Lampac + блокер «не библиотека»
- [[family/how-to/kraken-network]] — линки ТВ, история торможения 4K
- [[family/projects/media-toolbox-taiga]] — медиа-стек TrueNAS
- [[family/how-to/arr-stack-taiga]] — медиа-стек TrueNAS
+2 -2
View File
@@ -34,7 +34,7 @@ tags:
- encoding
related:
- '[[family/how-to/jellyfin-config]]'
- '[[family/projects/media-toolbox-taiga]]'
- '[[family/how-to/arr-stack-taiga]]'
- '[[personal/tech/music-tags-rename-audit]]'
- '[[personal/plans/music-tags-wave38-fixes]]'
- '[[personal/plans/tagwriter-container]]'
@@ -6752,5 +6752,5 @@ Alex трижды подряд получил вопрос там, где отв
## Связанные заметки
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin на Taiga, план добавления Music-библиотеки
- [[family/projects/media-toolbox-taiga]] — *arr стек
- [[family/how-to/arr-stack-taiga]] — *arr стек
- [[family/how-to/navidrome-truenas-android]] — альтернативный музыкальный сервер на той же папке
@@ -16,7 +16,7 @@ tags:
- navidrome
related:
- '[[family/how-to/arr-stack-taiga]]'
- '[[family/projects/media-toolbox-taiga]]'
- '[[family/how-to/arr-stack-taiga]]'
- '[[family/how-to/navidrome-truenas-android]]'
---
# Skill `arr-media-stack-setup` — дополнения 2026-09-26
@@ -176,4 +176,4 @@ docker logs lidarr 2>&1 | grep -i proxy # ProxyCheck failed ⇒ НЕ исп
## Связанные заметки
- [[family/how-to/arr-stack-taiga]] — актуальная реализация на Taiga
- [[family/projects/media-toolbox-taiga]] — состояние стека на Тайге
- [[family/how-to/arr-stack-taiga]] — состояние стека на Тайге