Files

28 KiB
Executable File
Raw Permalink Blame History

created, namespace, type, status, tags, title, updated, related, summary
created namespace type status tags title updated related summary
2026-09-22 family how-to работает-min_sid-на-обсуждении
lampa
lampac
pidtor
torrents
jacred
torrserver
kraken
min_sid
diagnostics
Torrents в Lampa — как оно работает и как чинить 2026-09-25
personal/tech/lampac-torrserver
personal/tech/lampac-deployment
personal/tech/lampa-jellyfin-plugin
family/how-to/tv-lampac-plugin
family/how-to/arr-stack-kraken
personal/plans/lampac-kraken
PidTor: три причины пустого списка — кэш-503, Playwright-503 на многословном title, и min_sid:15 отрезающий нишевые раздачи. Свежие фильмы работают, документалки требуют решения Alex по min_sid.

Torrents в Lampa — как оно работает и как чинить

Обновлено: 2026-09-25 Связано: personal/tech/lampac-torrserver, personal/tech/lampac-deployment, family/how-to/tv-lampac-plugin, family/how-to/arr-stack-kraken, personal/tech/lampa-jellyfin-plugin Статус: ✅ работает. Приёмка Alex: «Во! теперь появились торренты. запустил F1..»


TL;DR

Пункт «Торренты» пуст / 500 / 503
→ проверь PidTor.redapi = http://jac.red   (НЕ локальный!)
→ снять кэш ответа (см. «Где на самом деле кэш» ниже)
→ docker restart lampac

Одна причина большинства поломок: redapi указывает на локальный JacRed, который отдаёт формат без поля info → PidTor падает → 500/503.

Вторая причина 503 (найдена 2026-09-25): длинный многословный title. См. раздел ниже.

Третья причина (2026-09-25): min_sid: 15 отбрасывает нишевые раздачи. Даже когда JacRed нашёл и title короткий — пустой список. Документалки не набирают 15 сидов. См. раздел «Третья причина» ниже.


🔴 Где на самом деле кэш (исправлено 2026-09-24)

Прежняя запись «кэш лежит в cache/fdb/» неверна. Факт:

$H/lampac/cache/fdb/     → только ПУСТЫЕ каталоги 0/ 1/ 2/ … f/   (0 файлов)
$H/lampac/cache/module/  → 76 файлов без расширений, base64-ish имена
                            (OEdMn4LsmVEkyTEYgfu5dg), file = PE32 .NET DLL

cache/module/ — это сборки .NET-модулей, кэш модулей, а не JSON-ответы PidTor. Опознать модуль по содержимому:

grep -l "pidtor" $H/lampac/cache/module/*     # → файл, внутри которого PidTor.dll
strings <файл> | grep -iE "pidtor|\.dll"
# → PidTor.dll, lite/pidtor, lite/pidtor/serial/{id}, lite/pidtor/s{id}

⚠️ Перед «очистить cache/fdb/» проверь, что там есть файлы — find $H/lampac/cache/fdb -type f | wc -l. Пусто → чистка не даст ничего. Кэш модулей в cache/module/ без нужды не трогать: модули пересобираются при старте.

📌 Практический вывод: при 503 первым делом пробовать заголовок, который ещё не запрашивался (другой год / другой title) — свежий ключ не попадёт в старый кэш и даст честный ответ. docker restart lampac кэш ответов не снимает.


🔴 Вторая причина 503: длинный многословный title (2026-09-25)

Повод: Alex — «эти фильмы можно как-нибудь в торрентах на лампе найти?» (о 45 документалках с диска Kraken, безотносительно Jellyfin).

Проверено на Кра́кене, 2026-09-25:

/lite/pidtor?title=Spy%20in%20the%20Snow&year=2018  → 503  (пустое тело)
/lite/pidtor?title=Spy%20in%20the%20Snow            → 503
/lite/pidtor?title=Spy                              → 200, HTML с рабочей раздачей
/lite/pidtor?title=Penguin%20Meet%20the%20Family    → пусто

Пробел в title через %20 даёт 503; одно слово — 200 с результатом. Кириллица работает (title=шпион в снегах → 200, раздача найдена).

Причина — Chromium/Playwright внутри lampac, а не JacRed

jac.red напрямую исправен и быстр:

curl "http://jac.red/api/v2.0/indexers/all/results?apikey=&Query=attenborough"
  → 200, 0.48s, Blue Planet II 156 ГБ 4K BDRemux (rutracker + nnmclub)
curl "…Query=шпион в снегах"
  → 200, BBC Шпион в снегах (rutracker, bitru, nnmclub, kinozal), sid=3

docker logs lampac при этом забит циклом:

Chromium: Browser_Disconnected
Chromium: Initialization → CreateAsync → LaunchAsync
Chromium: v154.0.8037.57 / headless / True
…
Chromium: Timeout 180000ms exceeded.
  - <launched> pid=21522
  - [err] Failed to connect to the bus: socket /run/dbus/system_bus_socket:
          No such file or directory

Chromium стартует, отваливается, рестартует — и на запросе с несколькими словами уходит в 180-секундный таймаут, который отдаётся наружу как 503. Фоновый шум dbus/bus.cc:405 в логах контейнера — это оно, не отдельная проблема.

⚠️ Не путать с cached-503 из раздела выше: там признак X-Invoke-Cache: HIT + время <0.04s. Здесь 503 приходит свежим, без попадания в кэш.

Практический вывод для поиска

  1. Искать одним-двумя словами, не полным названием. Spy вместо Spy in the Snow; Penguin вместо Penguin Meet the Family.
  2. Диакритику/апострофы ломают запрос — Nature's Biggest Beasts попробовать как Nature или Biggest Beasts.
  3. Русские документалки ищутся лучше по русскому названию, чем по транслитерации папки: шпион в снегах → раздача есть.
  4. Если пусто на 200 — это честные «0 раздач», а не сбой. Сверить через jac.red …?Query=<слово> напрямую.

Незакрытый дефект (ждёт решения Alex)

Playwright в контейнере lampac уходит в цикл и валит запросы с длинным title. Не трогал — правка base.conf/ограничение параллельных Chromium вне задачи. Кандидаты: ограничить параллельный запуск Chromium либо отключить headless-модули в base.conf (в SkipModules уже есть Potok, MsxNative, ForkPlayerXML).


🔴 Третья причина: min_sid: 15 — фильтр, который режет документалки (2026-09-25)

Повод: Alex — «понятно. занеси наблюдение в доку по лампе» (после разбора документалок с диска Kraken).

Факт. Даже когда JacRed раздачу нашёл и title короткий (200, не 503), PidTor может отдать пустой список. Причина — min_sid в секции PidTor.

Текущее значение в current.conf lampac (строка 3378):

"PidTor": {
  "enable": true,
  "redapi": "http://jac.red",
  "apikey": null,
  "min_sid": 15,          ← 🔴 вот он
  "max_size": 0,
  "emptyVoice": true,
  "forceAll": false,
  "torrs": null,
  "auth_torrs": null
}

Фильтр в PidTor/Controller.cs:86-89:

int sid = torrent.Seeders;
if (sid >= init.min_sid)   // 15 по умолчанию
    …  // раздача показывается

Раздача с Seeders < 15 отбрасывается молча — наружу приходит пустой список, не ошибка.

Почему это бьёт именно по документалкам

Нишевый контент не набирает сидов:

Запрос JacRed нашёл Сидов PidTor отдал
шпион в снегах (BBC Spy in the Snow) rutracker, bitru, nnmclub, kinozal 3 ❌ отфильтровано
Spy in the Snow (rutracker) WEB-DL 1080p ДБ 3 ❌ отфильтровано
attenborough → Blue Planet II rutracker + nnmclub, 156 ГБ 4K — зависит от сидов

Для фильмов-новинок 15 сидов норма; для BBC-документалки 2018 года — почти недостижимо.

Второй барьер рядом — фильтр по качеству

Controller.cs:84: раздача проходит дальше только если forceAll == true или в имени есть 2160p / 1080p / 720p (либо 4k/uhd). Spy in the Snow содержит 1080p → этот барьер проходит; min_sid его убивает.

Как снижать min_sid

Значение Смысл
0 показывать всё, включая мёртвые раздачи (0 сидов)
1–2 компромисс: мёртвые отсекаются, нишевые проходят
15 текущее; режет почти все документалки

Порядок правки боевого конфига (personal/plans/lampac-kraken): коммит current.conf до → правка min_sid → заливка + рестарт lampac → приёмка Alex в UI (искать Spy in the Snow в PidTor) → коммит после.

🔴 Приёмка = раздача видна в UI, а не «API отвечает 200».

Добавка к диагностике: rjson как быстрый чекап

# пустой список vs 503 — различать так (тело {} = отфильтровано, не сбой):
curl "http://127.0.0.1:9118/lite/pidtor?title=Spy&rjson=true"   → {}

rjson=true отдаёт JSON вместо HTML — удобнее для скриптов. Пустой {} при известной раздаче в JacRed = фильтр min_sid/качество, а не поломка.


По каким трекерам ищет PidTor

Свой список PidTor не держит. Он идёт на {redapi}/api/v2.0/indexers/all/results?title=..&year=.. — суффикс all означает «все индексеры JacRed разом». Состав трекеров определяется стороной jac.red, а не lampac.

🔴 Prowlarr в этой цепочке не участвует. У Prowlarr свои 6 индексера (RuTracker · Kinozal · Kinozal (M) · RuTor · NoNaMe Club · Byrutor), и питает он Radarr/Sonarr (family/how-to/arr-stack-kraken). Прямого моста «Prowlarr → источники Lampa» нет; добавить трекер в Prowlarr ≠ добавить источник в плеер.

Как влиять на список источников (два пути):

Путь Как Блокер
Локальный JacRed lampac править набор трекеров в его БД ($H/lampac/data/), затем переключить redapi на http://127.0.0.1:9118 🔴 формат без info → NPE. Переключать только после появления поля info
Prowlarr в обход PidTor добавить трекеры в Prowlarr и качать ими в Radarr/Sonarr это не «источники в Lampa» — в плеере их не видно

⚠️ Шум «один источник в «Смотреть онлайн» и качество плохое» — это онлайн-балансеры (Online/OnlineRUS/OnlinePaid/SISI), а не PidTor. Качество диктует CDN источника.


Архитектура

Lampa (ТВ) → «Торренты» → PidTor (модуль lampac)
                            ↓ redapi
                       jac.red (ВНЕШНИЙ, 144.31.3.10)
                            ↓ /api/v2.0/indexers/all/results  (все индексеры)
                            ↓ MagnetUri + info{}
                       TorrServer (встроен в lampac, порт 9085 внутр.)
                            ↓
                       качает на HDD Кра́кена

🔴 Поиск раздач идёт на ВНЕШНИЙ jac.red. TorrServer только качает. Локальный JacRed есть, но несовместим по формату (нет info).

Что нужно в config-module/init.conf

"PidTor": {
  "enable": true,
  "redapi": "http://jac.red",
  "min_sid": 15
}

⚠️ Файл именно config-module/init.conf. Правки в config/init.conf не применяются и не дают ошибки — просто ничего не меняется.


Диагностика по коду ответа

Код Время Значение Что делать
503 0.001–0.035s + X-Invoke-Cache: HIT Ответ из кэша. Реальная причина скрыта Запросить новый ключ (другой год/title) для честного ответа; см. «Где на самом деле кэш»
503 2–180s, без X-Invoke-Cache 🔴 Chromium/Playwright внутри lampac. Обычно длинный многословный title Искать одним-двумя словами; однословный title → 200. См. «Вторая причина 503»
500 0.1–1s Честная ошибка. Обычно NPE на info Смотреть redapi
200 — Работает —

🔴 503 = кэш, 500 = реальная ошибка. X-Invoke-Cache: HIT + время <0.04s — верный признак. 🔴 503 не означает «раздач нет». Это кэшированный отказ. Делать выводы о трекерах можно только по свежему (некэшированному) ответу.


🔴 Главная ловушка: два разных JacRed

ВНЕШНИЙ jac.red — поля ответа:
  [..., 'ffprobe', 'info', 'languages']                 ← info ЕСТЬ
  info = {"quality":480, "voices":["Дубляж"],
          "sizeName":"2.02 GB", "relasted":2025}

ЛОКАЛЬНЫЙ JacRed (127.0.0.1:9118) — поля ответа:
  ['Category','Details','MagnetUri','Peers','PublishDate',
   'Seeders','Size','Title','Tracker']
                                                ↑ info НЕТ → NPE

PidTor падает здесь (PidTor/Controller.cs:97):

string mediainfo = torrent.info.sizeName ?? string.Empty;
//                ^^^^^^^^^^^^^^ info == null → NullReferenceException → HTTP 500

Локальный JacRed быстрее (0.12s против 0.35s), поэтому соблазн переключить есть. Не переключать. Скорость не стоит поломки.


Проверка работоспособности

1. PidTor по фильму (то, чем ходит клиент)

эндпоинт: http://192.168.1.14:9118/lite/pidtor?title=<Название>&year=<Год>
ожидаем:  HTTP 200, непустой ответ

Проверять тем же набором параметров, что посылает клиент — ключ кэша включает title:original_title:year:language:serial. F1 без года → 200, с годом → другой ключ.

2. Прямой источник (JacRed)

{PidTor.redapi}/api/v2.0/indexers/all/results?title=<Название>&year=<Год>

⚠️ Именно маршрут /api/v2.0/indexers/all/results — тот, которым ходит PidTor. /api/v1.0/torrents тоже работает, но это другой эндпоинт; проверка через него ничего не доказывает.

3. Список раздач TorrServer

curl -s -X POST http://127.0.0.1:9118/ts/torrents \
  -H 'Content-Type: application/json' -d '{"action":"list"}'

🔴 Только такой вызов. -d '[]', -d '{}', без тела → 400. GET /ts/torrents → 404. Порт 9085 снаружи недоступен, только /ts/ через 9118.

4. Приёмка

Запустить фильм в плеере. «API отвечает 200» ≠ «работает». Приёмка только в UI.


⚠️ ПРЕДЫСТОРИЯ: min_sid уже трогали — и откатили (2026-09-22)

🔴 Перед любой правкой min_sid прочитать это.

На сессии 2026-09-22 я сам понижал min_sid до 3 — и это было откачено:

· min_sid: мой 3 убран → стоковое 15

Причина отката — min_sid не был причиной пустого списка у Alex. Реальная причина была redapi: он указывал на локальный JacRed, который отдаёт формат без поля info → PidTor/Controller.cs:97 (torrent.info.sizeName) → NPE → 500.

Стоковое 15 рабочее состояние, зафиксированное в personal/tech/lampac-torrserver §«Статус закрытия»: ✅ min_sid: 3 убран → сток 15. Трогать его — значит переоткрывать закрытую задачу.

⚠️ Не путать два случая:

2026-09-22 (закрыто) 2026-09-25 (открыто)
Симптом «Торренты» пусто у всех фильмов конкретные документалки пусто
Причина redapi → локальный JacRed (нет info) Seeders < 15
Фикс redapi = http://jac.red обсуждение min_sid
Вывод min_sid не при чём min_sid — вероятная причина

Т.е. понижение min_sid обосновано только для нишевого контента (BBC-документалки, 0–3 сида). Для свежих фильмов стоковое 15 всех устраивало — Гамнет: из 14 раздач проходили 6, F1 играл, приёмка Alex пройдена.


📋 Решение ожидает Alex: min_sid 15 → 1–2 (НЕ НАЧАТО)

Статус: план записан, правка не начата, ждёт подтверждения Alex.

Что предлагается: понизить min_sid до 1–2, чтобы нишевые документалки (BBC Spy in the Snow, сидов 0–3) перестали отсеиваться.

Цена (озвучена Alex, не забыть повторить): понижение min_sid — решение Alex, низкий sid = медленнее качает. Т.е. раздачи с 1–2 сидами будут играть хуже.

Значение Что даёт Риск
15 (текущее) свежие фильмы отлично, документалки пусто нишевый контент недоступен
1–2 документалки появляются медленная загрузка на нишевых раздачах
0 всё, включая мёртвые плеер будет висеть на раздачах с 0 сидов

Порядок правки (если Alex подтвердит)

  1. Коммит current.conf ДО правки.
  2. Правка min_sid в config-module/init.conf (не config/init.conf — правки там не применяются и не дают ошибки).
  3. Заливка + docker restart lampac.
  4. 🔴 Приёмка Alex В UI: искать Spy in the Snow в разделе PidTor, запустить. «API отвечает 200» ≠ «работает».
  5. Коммит ПОСЛЕ.

Объём: ~15 минут + приёмка на ТВ.

⚠️ Файл: правки идут в config-module/init.conf. current.conf — эффективный, слитый из base.conf + init.conf; правка current.conf напрямую перезапишется при старте. Держать в голове, в каком из двух файлов менять.


Открытый дефект: Playwright валит длинные запросы (не закрыт)

Статус: найден 2026-09-25, не трогал, ждёт решения Alex.

Симптом: /lite/pidtor?title=Spy%20in%20the%20Snow → 503, а ?title=Spy → 200. Multi-word title уходит в 180-секундный таймаут Chromium/Playwright внутри lampac.

Chromium: Browser_Disconnected → Initialization → CreateAsync → LaunchAsync
Chromium: Timeout 180000ms exceeded.
  - [err] Failed to connect to the bus: /run/dbus/system_bus_socket: No such file

Кандидаты на фикс:

  • ограничить параллельный запуск Chromium;
  • отключить headless-модули в base.conf (SkipModules уже содержит Potok, MsxNative, ForkPlayerXML).

Обходной путь (работает сейчас): искать одним-двумя словами. Русские документалки — по русскому названию, не по имени папки на диске.

⚠️ Это отдельный дефект от min_sid. Если починить Playwright, длинные запросы начнут отвечать, но min_sid всё равно отрежет раздачи с <15 сидов.


Питфоллы

  1. 🔴 503 — это кэш, а не ошибка. Сначала снять кэш ответа, потом делать выводы. Иначе час диагностики по закэшированному отказу. ⚠️ Кэш не в cache/fdb/ (там пусто) — см. «Где на самом деле кэш»; быстрее всего запросить новый ключ (другой год/title).
  2. 🔴 503 ≠ «раздач нет». Это кэшированный отказ; выводы о трекерах делать только по свежему ответу.
  3. 🔴 Prowlarr не влияет на источники Lampa. Он питает Radarr/Sonarr; PidTor ходит на jac.red.
  4. 🔴 enabled: false у всех 86 модулей — это НОРМА. Служебное поле (расписание). Смотреть только enable.
  5. 🔴 Лог lampac не показывает исключения PidTor — docker logs пуст. Читать исходник (Controller.cs, Model.cs).
  6. 🔴 docker exec lampac python3 не работает — python3 нет в образе. Парсить конфиги скриптом снаружи через docker cp.
  7. 🔴 Конфиг — в config-module/init.conf, не в config/init.conf.
  8. 🔴 Кириллица в inline-ssh командах → BLOCKED (tirith confusable_text). Только скриптом-файлом.
  9. 🔴 Порт 9085 наружу закрыт — работать через /ts/ на 9118.
  10. ⚠️ Кириллический title в query-параметре через Mac уходит в таймаут апрува (BLOCKED) — использовать %D0%9C...-экранирование или + вместо пробела; + в URL работает (title=Мастерская+сатаны).
  11. 🔴 title из нескольких слов = 503 (Playwright-таймаут). Проверено 2026-09-25: title=Spy%20in%20the%20Snow → 503, title=Spy → 200. Это НЕ «раздач нет» и НЕ кэш (X-Invoke-Cache отсутствует). Искать одним словом.
  12. 🔴 Шум dbus/bus.cc:405 … /run/dbus/system_bus_socket в docker logs lampac — маркер той же проблемы. Chromium в контейнере без dbus стартует и отваливается; Browser_Disconnected + Timeout 180000ms exceeded в логе = PidTor будет отдавать 503.
  13. ⚠️ docker logs lampac тонет в Chromium-шуме (grep -viE "dbus|chromium|playwright") — иначе реальные строки не видно. Исключений PidTor там по-прежнему НЕТ (см. п. 5).
  14. 🔴 Пустой список ≠ 503. Три разных состояния: 503 (кэш/Playwright), {}/пусто при 200 (= фильтры min_sid/качество отрезали), 500 (NPE на info). Проверять rjson=true для быстрого различения.
  15. 🔴 min_sid: 15 режет документалки молча. Сидов у BBC-докфильмов обычно 0–3. Если JacRed находит, а PidTor пусто — смотреть min_sid первым делом, не трекеры.

Урок

Единственная причина поломки — поменял рабочий параметр по соображению «локальный быстрее», не проверив формат ответа.

Правильный порядок при подозрении на внешнюю зависимость:

1. Сравнить ФОРМАТ ответа (набор полей JSON), не только код и время
2. Отсутствие поля = потенциальный NPE в потребителе
3. Только потом менять источник

Дешевле сравнить два JSON, чем ломать модуль и разбирать час.

⚠️ Второй урок (2026-09-24): не выдумывать расположение файлов. «Кэш в cache/fdb/» прожило в двух доках сутки, хотя папка пустая. Проверять факт (find … | wc -l), а не повторять запись из доки.


Связанные