27 KiB
Executable File
title, created, updated, type, namespace, status, tags, related
| title | created | updated | type | namespace | status | tags | related | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lampac на Кра́кене — развёртывание | 2026-09-21 | 2026-09-22 | plan | personal | in-progress |
|
|
Lampac на Кра́кене — развёртывание
План составлен 2026-09-21, записан в vault 2026-09-22. В плане учтены прямые правки Alex из сессии обсуждения.
Задача
Дать ТВ в Бишкеке воспроизведение без дёрганья. Корень проблемы — single-flow TCP при RTT 104 мс: поток отдаётся одним соединением → ~28–45 Мбит, а remux'ы требуют 60–80.
❌ Отвергнутые варианты (не возвращаться)
| Вариант | Почему нет |
|---|---|
| Lampac/бэкенд на Mac | «нахуя нам блядь на маке что-то, на кракене блядь бэкенд». Бэкенд — только на Кра́кене |
| 8 xray-туннелей + mux | Одно логическое окно, head-of-line blocking. Путь один (ТТК → Ростелеком) |
| MPTCP по одному пути | То же — нужны разные физические пути |
| Транскод | 🔴 Кра́кен его не тянет. Выкинут целиком |
Замеры, на которых стоит план
| Режим | Результат |
|---|---|
| 1 поток | ~28 Мбит/с |
| 4 параллельных | ~51 Мбит/с (×1.8) |
| Speedtest (8 сессий) | до 120 Мбит/с |
Рост ×1.8 при 4 потоках доказывает: лимит не в полосе транзита, а в одном TCP-потоке при RTT ~104 мс.
Что разворачиваем
lampac-nextgen/lampac (MIT, .NET 10), порт 9118.
Внутри: TorrServer (subprocess) + JacRed (Jackett-совместимый индексатор) + LampaWeb + TmdbProxy + DLNA
- Catalog (каталоги; включён нами — см. шаг 7).
Плагины для Lampa:
http://<lampac>:9118/online.js— онлайн-источники (70+)http://<lampac>:9118/catalog.js— каталог «Мой список» (watchlist)
UI для LG: /lg.ipk отдаёт сам Lampac.
Целевой хост
Кра́кен — aarch64, Debian 12 (bookworm), Docker, 12 запущенных контейнеров.
OS на SD-карте: 14G всего, 8.6G свободно. /srv/... — 1.8T, 396 ГБ свободно.
⚠️ Это отдельная машина, НЕ TrueNAS. Проверено 2026-09-22:
| Хост | SSH | hostname | arch | ОС |
|---|---|---|---|---|
| Кра́кен | ssh kraken (ProxyCommand, порт 22, user kraken) |
kraken |
aarch64 | Debian 12 bookworm |
| TrueNAS / Taiga | ssh truenas_admin@mallexxx.duckdns.org |
truenas |
x86_64 | TrueNAS SCALE |
🔴 Не путать. mallexxx.duckdns.org — это TrueNAS, Lampac там не ставится и в плане не фигурирует.
Ошибка «пойти на TrueNAS искать Lampac» — реальная, допущена 2026-09-22, исправлена.
Запущенные контейнеры Кра́кена (2026-09-22): radarr, jellyfin, transmission, portainer,
flaresolverr, prowlarr, sonarr, watchtower, rclone, xray-reverse-bridge, hermes-kraken,
cloudflared. Плюс 8 Exited-контейнеров старше 3 месяцев (мусор, к плану не относятся).
Каталог с медиа на Кра́кене: /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/media
(старый UUID 49e8f586... — symlink на актуальный диск 6194539b-03e0-4f33-986b-4da09834e82f).
ssh kraken работает через ~/.ssh/config:
Host kraken
User kraken
Port 22
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
ProxyCommand bash -c 'if ifconfig | grep -q 10.99.0.2; then nc 10.99.1.2 22; else nc kraken 22; fi'
Шаги
1. Каталоги (на data-диске, НЕ на SD)
/srv/dev-disk-by-uuid-6194539b-.../lampac/
├── docker-compose.yml
├── config/
├── cache/ # кэш TorrServer — только сюда
└── data/ # БД JacRed
2. docker-compose.yml
- образ
ghcr.io/lampac-nextgen/lampac:latest,platform: linux/arm64 - порт
9118:9118,restart: unless-stopped - bind-mount
cache/→ каталог кэша TorrServer (иначе образ забьёт SD-карту) - bind-mount
config/→ конфиг - ⚠️ в контейнере рабочий каталог
/lampac, файлы читаются из корня, не изconfig/
3. Конфиг TorrServer внутри Lampac
- лимит кэша (напр. 20 ГБ) — чтобы не сожрал 404 ГБ
🔴 TorrServer у Lampac ВСТРОЕННЫЙ (subprocess внутри контейнера, виден в логах как compilation TorrServer).
Отдельный контейнер TorrServer не ставить — выдуманный шаг, не из плана.
Вопрос Alex: «Если имеет встроенный нахуя внешний?»
4. Первый запуск
curl -fsS "http://localhost:9118/version?type=hash"
Пусто/ошибка → docker logs lampac.
⚠️ Первый старт долгий. Контейнер компилирует/грузит ~40 native-модулей
(compilation LampaWeb, DLNA, GStreamer, Sync, TorrServer, ... затем loaded module: ...).
Соединение на curl рвётся с Recv failure: Connection reset by peer, пока идёт загрузка.
Статус healthy при этом уже стоит — не признак готовности HTTP.
Не дёргать контейнер, ждать loaded module: последнего модуля.
5. Доступ ТВ к Lampac
Кра́кен (192.168.1.14) и ТВ (192.168.1.70) — в одном сегменте 192.168.1.x,
межроутерного пути нет. ТВ должен достать 9118 напрямую.
6. Подключение Lampa на ТВ
- Lampa через Media Station X (
.ipkс флешки на розничных LG не работает) - Настройки → TorrServer → «Использовать основную ссылку» →
<lampac>:9118 - плагин:
http://<lampac>:9118/online.js - буфер плеера: 50–100 МБ
- качество по скорости: до 10 Мбит → 720p; 10–25 → 1080p
7. 🔜 Шаг 7 плана — ВЫПОЛНЕН (серверная часть)
Статус: сделано 2026-09-22. Отдельный план — personal/plans/lampac-watchlist-plugin.
Итог: movies-watchlist.md отдаётся каталогом Lampa через модуль Catalog:
- Плагин на ТВ:
http://192.168.1.14:9118/catalog.js - Источник выбирается панелью слева в меню каталогов (пункта «Настройки → Источник» НЕ существует!)
- 4 категории: Фильмы 360 · Новинки 33 · Мультфильмы 3 · Аниме 7
- Автообновление: cron
30 2 * * *→~/scripts/watchlist-catalog.sh
⚠️ Не проверено в UI ТВ. Alex добавил плагин, но каталог не увидел; соединений ТВ → :9118 — ноль.
Гипотеза: нужен полный перезапуск Lampa (каталоги регистрируются только при старте).
Порядок диагностики — personal/tech/lampac-deployment, раздел «Выбор источника каталога в Lampa».
⚠️ Исходная формулировка шага 7 была неточной («плагин, который ходит к библиотеке
как к источнику воспроизведения»). Уточнено Alex: задача — отображение списка, не плейбэк.
Механизм — встроенный модуль Catalog, свой плагин не писался.
Осталось: Alex добавляет плагин на ТВ пультом (1 минута, см. план).
Журнал сессии 2026-09-22 (вторая часть)
Выполнено: шаги 1, 2, 4, 5, 6. Осталось: 3 (лимит кэша) и 7 (плагин библиотеки).
Результаты
| Шаг | Статус |
|---|---|
| 1. Каталоги на HDD | ✅ /srv/...6194539b.../lampac/{config,cache,data}, kraken:kraken, 755 |
| 2. docker-compose.yml | ✅ развёрнут, docker compose config --quiet → VALID |
| 3. Лимит кэша TorrServer | ⏳ единственный незакрытый шаг на стороне сервера — встроенный TS работает на дефолтах |
| 4. Первый запуск | ✅ curl /version?type=hash → 46b29e1fe8fa6021cd83e75c41abffb7 |
| 5. Доступ с ТВ | ✅ http://192.168.1.14:9118/version?type=hash отвечает с LAN-IP |
| 6. Lampa на ТВ | ✅ com.lampac.tv v1.0.0 установлена и запущена |
Факты, добытые по ходу
ghcr.io/lampac-nextgen/lampac:latestсодержитlinux/arm64→ сборка из исходников не нужна. Риск «ARM64-образа нет» из таблицы рисков — снят. (docker manifest inspectс Mac отдаётdenied— проверять из Кра́кена.)- Порт
9118был свободен. Занятые на Кра́кене:7878, 8096, 8191, 8989, 9000, 9091, 9696, 51413. docker compose— плагин v5.1.3, отдельногоdocker-composeнет.- Каталоги на
/srv/...6194539b.../требуютsudo(корень дискаroot:root). Уkrakenестьsudoбез пароля. - Порт
9118слушается на0.0.0.0✅ — шаг 5 по этой части пройден. - Lampac отвечает по LAN-IP:
http://192.168.1.14:9118/version?type=hash→46b29e1fe8fa6021cd83e75c41abffb7. Инициализация завершается логомConfigure complete— после него HTTP начинает отвечать. - Кра́кен имеет два LAN-адреса:
192.168.1.14и192.168.1.15. Mac Alex —192.168.1.57. ТВ192.168.1.70— один сегмент, доступ прямой.
Ошибки сессии (не повторять)
- 🔴 Придумал шаг «поставить TorrServer отдельным контейнером». TorrServer у Lampac встроенный. Реакция Alex: «Если имеет встроенный нахуя внешний?» — выдумка сверх плана.
- 🔴 Затёр
docker-compose.ymlпри правке — вместо добавления сервиса перезаписал файл целиком. На Кра́кене рабочий файл цел (правил локальную копию), но правило то же: перед правкой читать файл, а не перезаписывать по памяти. - Локальная копия
/Users/admin/lampac-deploy/— снесена (была 0 байт после неудачной правки). Рабочий compose живёт только на Кра́кене.
Урок: шаг 3 плана («конфиг TorrServer внутри Lampac») — это настройка существующего, а не установка второго. Читать план буквально.
Следующий шаг
Шаг 6 — подключение Lampa на ТВ 192.168.1.70:
- Lampa через Media Station X (
.ipkс флешки на розничных LG не работает) - Настройки → TorrServer → «Использовать основную ссылку» →
http://192.168.1.14:9118 - Плагин:
http://192.168.1.14:9118/online.js - Буфер плеера: 50–100 МБ
- Качество по скорости: до 10 Мбит → 720p; 10–25 → 1080p
Приёмка шага 6 = играет без дёрганья 5+ минут, битрейт ≤15 Мбит.
Шаг 6 выполнен — установка Lampa на ТВ
Сделано по SSH, без флешки.
| Действие | Команда/результат |
|---|---|
.ipk скачан на ТВ |
curl -o /tmp/lampa.ipk http://192.168.1.14:9118/lg.ipk → 6.9 МБ, ar-архив (!<arch>) |
| Установка | luna://com.webos.appInstallService/dev/install → {"subscribed":true,"returnValue":true} |
| Результат | приложение com.lampac.tv v1.0.0 (vendor Lampac) в /media/developer/apps/usr/palm/applications/ |
| Запуск | luna://com.webos.applicationManager/launch → returnValue:true |
| Проверка | getForegroundAppInfo → "appId": "com.lampac.tv" |
🔴 Грабли, на которые я наступил (и как правильно):
luna-sendчерез SSH молчит — пишет в tty, не в stdout. Любой вызов отдаёт хелп. Правильно: обернуть вscript -q -c "luna-send ..." /tmp/o.txt, затемcat /tmp/o.txt. Доки: family/how-to/tv-luna-send, family/how-to/htpc-webos-luna.- Установка — через
com.webos.appInstallService/dev/install, НЕ черезorg.webosbrew.hbchannel.service/install(тот тоже есть, но не сработал так чисто). -aдля appId в luna-send на этой прошивке не работает — хелп вместо вызова.- ТВ — webOS 5.4.2 на ядре 4.4.84, image
starfish-dvb-secured, build 2602. Из кастомного уже стоят:org.webosbrew.hbchannel0.7.2,org.webosbrew.inputhook,me.wouterdek.magic4pc.
Первый просмотр — проверено 2026-09-22
Фильм запущен, не дёргается. Alex: «Вроде стабильно, не делается».
| Факт | Значение |
|---|---|
| Соединения ТВ → Lampac | 3 × ESTABLISHED 192.168.1.70 → 192.168.1.14:9118 |
| Нагрузка контейнера | lampac CPU 57%, NET 168 МБ ↓ / 132 МБ ↑ |
| Битрейт на eth0 | ~3–4 Мбит/с (не 15) |
Почему всего 3–4 Мбит: выбран источник «Смотреть онлайн (lampac 1.18…)» — это встроенный
плагин online.js, HLS-поток. Lampac отдаёт ссылку, ТВ тянет видео напрямую из CDN
(в /proc/net/tcp ТВ видны внешние адреса на :443/:8443). Тяжёлый remux с торрента
в этом режиме не участвует — поэтому и не дёргается.
⚠️ Следствие: первый просмотр не проверяет, держит ли сеть remux 60–80 Мбит. Это тест функциональности, не полосы. Проверка полосы — отдельно, на торрент-источнике.
Отключить выбор источника: Lampa → Настройки → Плагины → выключить online.js.
Останутся только торренты.
Следующий шаг — ✅ ВЫПОЛНЕН 2026-09-22
Шаг 7 (watchlist в UI Lampa) сделан. Полный план и все питфоллы — personal/plans/lampac-watchlist-plugin. Кратко:
- Включён встроенный модуль
Catalog(SkipModulesбез него +catalog: true) - Написан генератор
gen_watchlist.py:movies-watchlist.md→ JSON init.conf,sites/,wwwroot/смонтированы на HDD — правки переживают пересоздание- Cron
30 2 * * *→~/scripts/watchlist-catalog.sh - Отдача: 4 категории — Фильмы 360 · Новинки 34 · Мультфильмы 3 · Аниме 7
⚠️ Смонтирован config-module/init.conf — это исправляет шаг «init.conf без volume»,
который раньше числился в открытых задачах.
Осталось на Alex: добавить на ТВ плагин http://192.168.1.14:9118/catalog.js (пультом),
полностью перезапустить Lampa и выбрать источник панелью слева в меню каталогов
(пункта «Настройки → Источник» не существует).
Сопутствующие доки: family/how-to/tv-luna-send, family/how-to/htpc-webos-luna, family/how-to/tv-lampac-plugin.
Где что лежит (финально)
Кра́кен: /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/
├── docker-compose.yml # lampac + встроенный TorrServer, порт 9118
├── config/ # → /lampac/config
├── cache/ # → /lampac/cache (кэш TorrServer)
├── data/ # → /lampac/data (БД JacRed)
├── config-module/init.conf # → /lampac/init.conf:ro (включает Catalog)
├── catalog/sites/ # → /lampac/module/Catalog/sites
├── catalog/override/ # → /lampac/module/Catalog/override
├── wwwroot/ # → /lampac/wwwroot (JSON-каталог)
└── scripts/gen_watchlist.py # генератор .md → JSON
Полный актуальный compose — в personal/tech/lampac-deployment (раздел docker-compose). Здесь не дублирую: файл меняется, а копия в двух местах гарантированно рассинхронизируется.
Управление: cd /srv/.../lampac && docker compose {up -d,logs -f,restart,down}.
Правка compose — без sudo (каталог kraken:kraken), но создание каталогов — через sudo mkdir.
Журнал сессии 2026-09-22 (третья часть) — каталог watchlist
Шаг 7 выполнен. Все шаги 1–7 базового плана закрыты (кроме шага 3 — лимит кэша).
Работа велась по отдельному плану personal/plans/lampac-watchlist-plugin. Ключевое, что касается этого документа:
Изменён docker-compose.yml — добавлено 4 монтирования (7 всего):
| Монтирование | Зачем |
|---|---|
./config-module/init.conf:/lampac/init.conf:ro |
включает модуль Catalog |
./catalog/sites:/lampac/module/Catalog/sites |
описания каталогов |
./catalog/override:/lampac/module/Catalog/override |
переопределения |
./wwwroot:/lampac/wwwroot |
JSON-каталог отдаётся статикой |
Создан config-module/init.conf — минимальный, перекрывает base.conf:
SkipModules без Catalog + LampaWeb.initPlugins.catalog: true.
🔴 Питфолл SkipModules: наш init.conf перекрывает base.conf, а не сливается с ним.
Поэтому список SkipModules надо повторять целиком — иначе модули из base вернутся к дефолту.
Ошибки сессии
- 🔴 Придумал вопрос «что играть по клику» (развилка A/B/C про источник воспроизведения). Alex: «я чё тебе сказал в постановке задачи». Задача была — отображение, не плейбэк. Урок: в постановке было сказано буквально; развилки сверх неё — выдумка.
- 🔴 Полез разбирать
luna-sendнаугад, не прочитав доки по ТВ. Они уже были: family/how-to/tv-luna-send, family/how-to/htpc-webos-luna — там прямо описан питфолл «пишет в tty, нуженscript -q -c». Alex: «Доки по тв читал?!». Урок: перед работой с хостом — искать док в vault, а не экспериментировать.
Что осталось
- Лимит кэша TorrServer (шаг 3) — дефолт. Критичность низкая.
- Каталог watchlist не подтверждён в UI ТВ — плагин добавлен, но не виден. Нужен полный
перезапуск Lampa + выбор источника панелью слева. Соединений ТВ →
:9118было ноль. - Проверка полосы на торрент-источнике — не сделана.
Журнал сессии 2026-09-22
Что сделано
- Проверен доступ к Кра́кену по SSH — работает, хост подтверждён (aarch64 Debian 12).
- Установлено, что Кра́кен и TrueNAS — разные машины (см. таблицу выше).
- Из плана убраны все упоминания TrueNAS и Jellyfin по прямому указанию Alex.
Коммит vault:
6abb22b—personal/plans/lampac-kraken.md, +5 −8.
Убрано 6 мест:
| Где | Что убрано | Заменено на |
|---|---|---|
frontmatter tags |
тег jellyfin |
— (удалён) |
frontmatter related |
[[personal/tech/xray-reverse-tunnel-kraken-truenas]] |
— (удалено) |
| «Задача» | «Jellyfin отдаёт видео одним потоком» | «поток отдаётся одним соединением» |
| таблица замеров | строки «Mac → TrueNAS, 1 SCP-поток / 4 параллельных» | «1 поток» / «4 параллельных» |
| шаг 7 | «файлы на TrueNAS (медиа-стек Radarr/Jellyfin)» | «медиафайлы на диске Кра́кена» |
| «Связанные» | ссылка на туннель | — (удалена) |
Проверка: grep -iE 'truenas|taiga|jellyfin' personal/plans/lampac-kraken.md → 0 совпадений.
Ошибки сессии (не повторять)
- 🔴 Пошёл на
mallexxx.duckdns.org(TrueNAS) искать Lampac. В плане этого нет — выдумано. - 🔴 Полез в
jellyfinна Кра́кене — этого в плане тоже нет. - 🔴 Выдумал развилку «просто кино / своя библиотека» и дважды потребовал ответа. Реакция Alex: «Чё блядь».
- 🔴 Сделал бэкап файла — Alex: «Какой бэкап нахуй». Для правок vault-заметок бэкап не нужен.
Урок: шаги 1–4 плана не зависят от состояния Jellyfin/библиотеки на других хостах. Читать план и делать то, что написано, а не выяснять обстоятельства вокруг.
Следующий шаг
Шаг 1 плана — создать каталоги на Кра́кене:
/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/{config,cache,data}
Ждёт подтверждения Alex. Пишущее — только на /srv, не на SD.
Что проверить на шаге 5
ТВ и Кра́кен — один сегмент 192.168.1.x (проверено 2026-09-04, family/how-to/kraken-network):
Кра́кен eth0 192.168.1.14, ТВ 192.168.1.70. Проброс портов и туннели не нужны.
Перед шагом 5 проверить, что 9118 слушается на 0.0.0.0, а не на 127.0.0.1.
Проверка (приёмка) — итог 2026-09-22
- ✅
docker ps— контейнерlampacUp (healthy) - ✅
curl /version?type=hash→46b29e1fe8fa6021cd83e75c41abffb7(и по LAN-IP192.168.1.14) - ✅ С ТВ Lampa играет — Alex проверил, не дёргается
- ⚠️ Битрейт 3–4 Мбит вместо ≤15 — т.к. выбран онлайн-источник (HLS), не торрент-remux
Lampa на ТВ установлена по SSH — шаг 6 закрыт без участия Alex.
Осталось
- Шаг 3: лимит кэша TorrServer (дефолты, не критично — диск 396 ГБ свободно)
- Шаг 7: плагин библиотеки — watchlist в UI Lampa (отдельный план)
- Проверка полосы на торрент-источнике (remux 60–80 Мбит) — не сделана
Откат
docker compose down+ удалить каталог/srv/.../lampac/- Стек Кра́кена не трогаем — Lampac изолирован
Риски
| Риск | Митигация |
|---|---|
| Кэш TorrServer съест диск | bind-mount на 1.8T + лимит кэша |
| ARM64-образ отсутствует | ✅ Проверено 2026-09-22: linux/arm64 есть в манифесте. Риск снят |
| SD-карта кончится | всё пишущее — только на /srv ✅ |
| ТВ не достанет 9118 | ✅ 0.0.0.0:9118, ответ по 192.168.1.14:9118 проверен |
Связанные
- personal/tech/lampac-deployment — технический справочник: compose, команды, питфоллы, порты
- personal/tech/multistream-single-flow-limit — исследование, ранжирование путей
- personal/tech/inter-site-throughput-taiga-to-mac — замеры полосы и RTT
- family/how-to/kraken-network — линки ТВ