[2026-09-22] eagle: family/how-to/htpc-webos-luna.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md personal/tech/skill-lampac-kraken-deploy.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-22 11:17:48 +06:00
1 parent 0c8aecece0
commit 81f8dd398b
4 files changed
+330 -8

No files matched your search

+58
View File
@@ -42,3 +42,61 @@ ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.applica
- `ares-install/ares-launch` — требует dev mode (порт 9922)
- `listRunningApps` — нет метода, правильно: `running`
- `applicationManager/remove` — нет, правильно: `appInstallService/dev/remove`
- ⚠️ **`luna-send -a '{"appId":...}'`** — на прошивке ТВ `5.4.2` флаг `-a` не парсится, отдаёт хелп-экран. AppId только первым аргументом.
## Установка IPK — рабочий рецепт (проверено 2026-09-22)
Установлено приложение Lampa (`com.lampac.tv`) на ТВ `192.168.1.70`. Полный проход:
```bash
# 1. Скачать ipk прямо на ТВ (без scp с Mac)
ssh root@192.168.1.70 'curl -sS --max-time 60 -o /tmp/app.ipk "http://192.168.1.14:9118/lg.ipk"'
# → 6896874 байт; формат ar (!<arch>), НЕ tar/gzip
# 2. Установить — обёртка script ОБЯЗАТЕЛЬНА
ssh root@192.168.1.70 'rm -f /tmp/i.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.appInstallService/dev/install \
{\"id\":\"org.lampa.tv\",\"ipkUrl\":\"/tmp/app.ipk\",\"subscribe\":true}" /tmp/i.txt; cat /tmp/i.txt'
# → {"subscribed":true,"returnValue":true}
# 3. Проверить — appId из appinfo.json, НЕ из запроса
ssh root@192.168.1.70 'ls /media/developer/apps/usr/palm/applications/'
# → com.lampac.tv
# 4. Запустить
ssh root@192.168.1.70 'rm -f /tmp/l.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.applicationManager/launch {\"id\":\"com.lampac.tv\"}" /tmp/l.txt'
```
🔴 **Поле `"id"` в `dev/install` — произвольная метка.** Реальный appId берётся из `appinfo.json`
внутри ipk. В нашем случае запрос ушёл с `org.lampa.tv`, а установилось `com.lampac.tv`.
**Проверка, что приложение реально открылось** (а не просто «команда вернула true»):
```bash
ssh root@192.168.1.70 'rm -f /tmp/f.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.applicationManager/getForegroundAppInfo {}" /tmp/f.txt; grep appId /tmp/f.txt'
# → "appId": "com.lampac.tv"
```
## Альтернативный путь, который НЕ сработал
`org.webosbrew.hbchannel.service/install` — метод в образе есть (`service.js`, `register("install",...)`),
но `luna-send` через SSH его не дёрнул. Используй `com.webos.appInstallService/dev/install`.
## Текущий ТВ (2026-09-22)
| Параметр | Значение |
|---|---|
| IP | `192.168.1.70` (проводной eth0); старый `.75` больше не отвечает |
| SSH | `root@192.168.1.70`, ключ `~/.ssh/konka_webos`, `StrictHostKeyChecking no` |
| Порты | `22` SSH, `3000`/`3001` Luna |
| webOS | **5.4.2**, ядро `4.4.84`, image `starfish-dvb-secured`, build 2602 |
| Кастомные приложения | `org.webosbrew.hbchannel` 0.7.2, `org.webosbrew.inputhook`, `me.wouterdek.magic4pc`, **`com.lampac.tv`** |
⚠️ SSH печатает `post-quantum key exchange` warning — **это норма**, не ошибка.
## Связанные заметки
- [[family/how-to/tv-luna-send]] — враппер `~/Automation/tv-luna-send.sh`
- [[personal/tech/lampac-deployment]] — что именно ставили на ТВ и зачем
- [[family/how-to/kraken-network]] — сеть Кра́кена и ТВ
+131
View File
@@ -0,0 +1,131 @@
---
created: '2026-09-22'
namespace: personal
related:
- '[[personal/plans/lampac-kraken]]'
- '[[personal/tech/lampac-deployment]]'
- '[[family/projects/watchlist-sync]]'
- '[[family/projects/watchlist-automation]]'
- '[[family/documents/movies-watchlist]]'
status: proposed
tags:
- lampac
- lampa
- watchlist
- catalog
- webos
- plugin
- kraken
title: Watchlist в UI Lampa — плагин отображения
type: plan
updated: '2026-09-22'
---
# Watchlist в UI Lampa — плагин отображения (план)
> Составлен 2026-09-22. Ждёт подтверждения Alex.
> Предыдущий шаг (Lampac на Кра́кене) — [[personal/plans/lampac-kraken]], шаги 1–6 закрыты.
## Задача
Показывать **список фильмов Alex** (`family/documents/movies-watchlist.md`) прямо в UI Lampa на ТВ —
как каталог для просмотра. **Не локальный плейбэк**, а отображение списка.
Уточнение Alex: «это не локальный плейбэк а отображение фильмов из списка».
## Что НЕ так понято (зафиксировать, чтобы не переделывать)
| Толкование | Верно? |
|---|---|
| Показать **свой список** (`movies-watchlist.md`) в UI | ✅ **да, это задача** |
| Показать **файлы библиотеки** с диска Кра́кена (Jellyfin-подобное) | ❌ нет — это шаг 7 старого плана, **другое** |
| Локальный плейбэк (раздача торрента с диска Кра́кена) | ❌ нет |
## Что нашлось в Lampac (разведка 2026-09-22)
В образе `ghcr.io/lampac-nextgen/lampac` 33 модуля (`/lampac/module/`). Релевантные три:
| Модуль | Что делает | Статус | Подходит? |
|---|---|---|---|
| **Catalog** | **YAML-каталоги → плагин `/catalog.js`** | ⛔ выключен | ✅ **главный кандидат** |
| DLNA | DLNA/UPnP, локальные файлы, торрент-менеджмент | ✅ включён | ⚠️ это про файлы, не про список |
| Online | 70+ онлайн-источников → `/online.js` | ✅ включён | уже используется |
### Модуль Catalog — детали
- **Роут:** `/catalog.js` (плагин Lampa), внутренние — `/catalog/<site>`
- **Данные:** YAML-файлы в `<modpath>/sites/<site>.yaml`
- **Имя файла** — только `[a-z0-9-]`, иначе `Regex.Replace` срежет
- **Есть lookup по `displayname`** внутри `*.yaml`, если файла по имени нет
- **WAF-лимит:** `^/catalog/` → 10 запросов/сек
- **`ModuleBaseConf`** с `limit_map`, класс `CatalogSettings`, есть `IEnumerable`-итерация
**Почему выключен:**
```jsonc
// current.conf
"SkipModules": [ "Catalog", "Tracks", "Transcoding", ... ]
"catalog": false // в блоке плагинов LampaWeb
```
Оба надо включить.
⚠️ **Питфолл:** `init.conf` монтируется **не был** — у нас в compose нет volume на `/lampac/init.conf`.
Файл живёт внутри образа. Правки через `docker exec` **потеряются при пересоздании контейнера**.
Значит: либо добавить volume, либо править через AdminPanel, либо `docker cp` + mount.
## Развилка архитектуры — нужно решение Alex
Отображение списка и воспроизведение — **разные вещи**. Список отдаём, но по клику что играть?
| # | Вариант | Как работает | Плюсы | Минусы |
|---|---|---|---|---|
| **A** | **Каталог → TMDB → торренты** | `/catalog.js` отдаёт названия, Lampa ищет их в TMDB, по клику — TorrServer/онлайн | Просто. Список = то, что уже есть. Работает сегодня | Каталог отдельно от «Избранного» Lampa |
| **B** | **Генератор Lampa-«Избранного»** | Отдаём `movies-watchlist.md` как JSON — Lampa кладёт его в свою папку «Буду смотреть» | Из коробки в UI, без плагина | Лимит **50** у `kinopoisk.js`; формат Lampa-специфичный |
| **C** | **Catalog + свои ссылки** | YAML с ссылками на торренты с диска Кра́кена — это уже **локальный плейбэк** | Прямой запуск | ❌ **Alex сказал — не это** |
**Рекомендация: A.** Список показываем, воспроизведение оставляем штатным (торренты/онлайн). Это ровно
«отображение фильмов из списка», без изобретения плейбэка.
## Что нужно выяснить до кодирования
1. **Формат YAML** — читать `Catalog/Controllers` в образе, узнать схему `CatalogSettings`
(поля: `displayname`, иконка, источник элементов, `tmdb`-режим?).
2. **Есть ли готовый Konopoisk/TMDB-режим** — если Catalog умеет принимать TMDB-коллекцию,
задача сводится к генерации YAML из watchlist.
3. **Как обновлять каталог** — watchlist меняется (Radarr, ⬇️, `[x]`), нужен генератор + hook.
4. **Фильтры** — показывать только `[ ]` (не просмотренные)? Прятать `👎`? Секции (`Фильмы`/`Аниме`/`Мультфильмы`)?
5. **`init.conf`** — как правки не потерять: volume vs AdminPanel.
## Черновик шагов (уточнится после разведки формата)
1. Включить модуль: убрать `Catalog` из `SkipModules`, поставить `"catalog": true`.
2. Разобрать схему YAML по кодe `Catalog/Controllers/*.cs` (в контейнере).
3. Написать генератор: `movies-watchlist.md` → `sites/<name>.yaml`.
- Источник данных — **vault** (`family/documents/movies-watchlist.md`), git-синхронизирован
- Уже есть готовый парсер: `watchlist-sync/parser.py` (см. [[family/projects/watchlist-sync]])
4. Смонтировать `sites/` в контейнер.
5. Плагин на ТВ: Lampa → Настройки → Плагины → `http://192.168.1.14:9118/catalog.js`.
6. **Приёмка:** список виден в UI Lampa на ТВ, названия совпадают с `movies-watchlist.md`.
## Как обновлять
Варианты (выбрать после шага 2):
- hook в `watchlist-nightly.sh` (уже кроном 01:00 на Кра́кене) — догенерировать YAML после прогона
- отдельный cron-скрипт
- ручной запуск генератора
⚠️ `watchlist-nightly.sh` живёт в `~/scripts/` — **root:root**, правка только `sudo install -m 755`.
## Открытые вопросы к Alex
1. **Развилка A/B/C** — согласен на A (каталог → TMDB → штатное воспроизведение)?
2. **Что показывать:** только непросмотренные `[ ]`? Или всё?
3. **Секции:** как в файле (`Фильмы`, `Мультфильмы`, `Аниме`) или одним списком?
4. **`👎` и `🗓️`** — прятать?
## Связанные
- [[personal/plans/lampac-kraken]] — базовое развёртывание (шаги 1–6 сделаны)
- [[personal/tech/lampac-deployment]] — эксплуатация Lampac
- [[family/projects/watchlist-sync]] — парсер списка, CLI, cron
- [[family/projects/watchlist-automation]] — полный flow, форматы маркеров
- [[family/documents/movies-watchlist]] — источник данных
+109 -8
View File
@@ -13,8 +13,10 @@ tags:
- webos
related:
- '[[personal/plans/lampac-kraken]]'
- '[[personal/plans/lampac-watchlist-plugin]]'
- '[[personal/tech/multistream-single-flow-limit]]'
- '[[family/how-to/kraken-network]]'
- '[[family/how-to/tv-luna-send]]'
---
# Lampac — развёртывание и эксплуатация (Кра́кен)
@@ -152,24 +154,123 @@ Configure complete ← HTTP начинает отвечать
Выбор порта — `docker compose config` + `sudo ss -tlnp` перед деплоем.
## Интеграция с Lampa (ТВ)
## Интеграция с Lampa (ТВ) — ✅ СДЕЛАНО 2026-09-22
- Плагин: `http://192.168.1.14:9118/online.js`
- TorrServer в Lampa: Настройки → TorrServer → «Использовать основную ссылку» → `http://192.168.1.14:9118`
- Буфер плеера: 50–100 МБ
- UE на LG: `.ipk` с флешки на розничных телевизорах **не работает** → ставить через **Media Station X**
- `/lg.ipk` отдаёт сам Lampac
- `/lg.ipk` отдаёт сам Lampac (проверено: HTTP **200**)
## Откат
### Установка клиента на LG webOS — по SSH, без флешки
🔴 **`Media Station X` и `.ipk` с флешки — НЕ нужны.** ТВ имеет SSH-доступ (root), установка делается с Mac.
**ТВ:** `root@192.168.1.70`, ключ `~/.ssh/konka_webos`, webOS **5.4.2** (ядро 4.4.84, image `starfish-dvb-secured`, build 2602, `webos_build_datetime 20230405092501`).
Порты открыты: `22` (SSH), `3000`/`3001` (Luna). Из кастомного уже стоит: `org.webosbrew.hbchannel` 0.7.2, `org.webosbrew.inputhook`, `me.wouterdek.magic4pc`.
**Порядок установки:**
```bash
cd /srv/.../lampac && docker compose down
sudo rm -rf /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac
# 1. Скачать .ipk от Lampac прямо на ТВ
ssh root@192.168.1.70 'curl -sS --max-time 60 -o /tmp/lampa.ipk "http://192.168.1.14:9118/lg.ipk"'
# → 6 896 874 байт, формат ar (!<arch>), НЕ tar/gzip
# 2. Установить (обязательна обёртка script — см. питфолл ниже)
ssh root@192.168.1.70 'rm -f /tmp/inst.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.appInstallService/dev/install \
{\"id\":\"org.lampa.tv\",\"ipkUrl\":\"/tmp/lampa.ipk\",\"subscribe\":true}" \
/tmp/inst.txt >/dev/null 2>&1; cat /tmp/inst.txt'
# → {"subscribed":true,"returnValue":true}
# 3. Проверить, что установилось
ssh root@192.168.1.70 'ls /media/developer/apps/usr/palm/applications/'
# → com.lampac.tv ← имя приложения Lampa, НЕ org.lampa.tv
# 4. Запустить
ssh root@192.168.1.70 'rm -f /tmp/l.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.applicationManager/launch {\"id\":\"com.lampac.tv\"}" /tmp/l.txt'
# 5. Убедиться, что открылось
ssh root@192.168.1.70 'rm -f /tmp/f.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.applicationManager/getForegroundAppInfo {}" /tmp/f.txt; grep appId /tmp/f.txt'
# → "appId": "com.lampac.tv"
```
Lampac изолирован — остальной стек Кра́кена не затрагивается.
**Фактический ID приложения — `com.lampac.tv`** (vendor Lampac, version 1.0.0, type web).
⚠️ В `luna-send ... dev/install` поле `"id"` — **произвольная метка**; реальный appId берётся из `appinfo.json` внутри ipk. Ошибиться здесь не страшно, но искать приложение надо по фактическому ID.
### 🔴 Питфолл: `luna-send` по SSH молчит
**Симптом:** любой вызов `luna-send` через `ssh root@TV "luna-send ..."` печатает **хелп-экран**, а не результат. С `-t` (PTY) — тоже. С `-a '{"json"}'` — тоже.
**Причина:** `luna-send` детектирует TTY и отказывается писать в pipe.
**Решение:** обернуть в `script(1)`, который аллоцирует псевдо-TTY, и прочитать временный файл:
```bash
ssh root@TV 'script -q -c "luna-send -n 1 -f luna://service/method {json}" /tmp/o.txt; cat /tmp/o.txt'
```
Готовый враппер: `~/Automation/tv-luna-send.sh` (`TV_HOST` переопределяет таргет).
Доки: [[family/how-to/tv-luna-send]], [[family/how-to/htpc-webos-luna]].
⚠️ **Установка идёт через `com.webos.appInstallService/dev/install`**, а НЕ через
`org.webosbrew.hbchannel.service/install` (последний в образе есть, но `luna-send` его не дёрнул чисто).
⚠️ `luna-send -i` (subscribe, бесконечный) через враппер **не работает** — нужен polling.
### Первый просмотр — проверено 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 Мбит/с** |
⚠️ **Почему всего 3–4 Мбит, а не 15:** выбран источник **«Смотреть онлайн (lampac 1.18…)»** — встроенный
плагин `online.js`, HLS-поток. Lampac отдаёт **ссылку**, ТВ тянет видео напрямую из CDN (в `/proc/net/tcp`
ТВ видны внешние адреса на `:443`/`:8443`). Тяжёлый remux с торрента не участвует — поэтому и не дёргается.
🔴 **Следствие:** этот просмотр **не проверяет**, держит ли сеть remux 60–80 Мбит.
Тест функциональности, не полосы. Полосу проверять на торрент-источнике.
**Как убрать выбор источника:** Lampa → Настройки → Плагины → выключить `online.js`. Останутся только торренты.
## Внутреннее устройство Lampac (разведка 2026-09-22)
**33 модуля** в образе (`/lampac/module/`):
`AdminPanel`, `Adult`, **`Catalog`**, `Community`, **`DLNA`**, `DatabaseEditor`, `ExternalBind`,
`ForkPlayerXML`, `GStreamer`, `JacRed`, `Kit`, `LampaWeb`, `LampacApk`, `LogUserRequest-Lite`,
`MsxNative`, `Music`, `NextHUB`, **`Online`**, `OnlineAnime`, `OnlineENG`, `OnlineGEO`, `OnlinePaid`,
`OnlineRUS`, `OnlineUKR`, `PidTor`, `Potok`, `Proxy`, `SISI`, `Sync`, `Telemetry` (+ остальные).
**Конфиг — `current.conf`** внутри образа (`/lampac/current.conf`, 157 КБ, генерируется из `base.conf` +
`init.conf`). Рабочий каталог `/lampac`, файлы читаются **из корня**, не из `config/`.
Выключение модуля — двумя механизмами:
1. **`SkipModules`** в `init.conf` / `current.conf`
2. **`manifest.json`** в каталоге модуля (`"enable": true|false`)
⚠️ **`init.conf` НЕ смонтирован** в нашем compose — файл живёт внутри образа. Любая правка через
`docker exec` **потеряется при пересоздании контейнера**. Для постоянных правок нужен volume или AdminPanel.
### Полезные роуты (проверены curl'ом)
| Роут | Код | Что |
|---|---|---|
| `/` | 200 | LampaWeb (UI, `<base href="/lampa-main/">`) |
| `/online.js` | 200 | плагин VOD — 70+ онлайн-источников |
| `/lg.ipk` | 200 | установщик клиента для LG (6.9 МБ) |
| `/sisi` | 200 | JSON-список платформ 18+ |
| `/dlna` | 200 | DLNA-модуль |
| `/ts/echo` | 200 | TorrServer (отдаёт версию, напр. `MatriX.135`) |
| `/catalog.js` | **404** | модуль Catalog выключен |
| `/cub`, `/api`, `/lampac.js` | 404/500 | — |
## Что осталось
1. **Лимит кэша TorrServer** — сейчас дефолт. Задать ~20 ГБ, чтобы не сожрать 396 ГБ свободных.
2. **Подключение Lampa на ТВ** — шаг 6 плана, на стороне Alex.
2. **`init.conf` без volume** — правки в `docker exec` не переживают пересоздание контейнера.
3. **Шаг 7 плана — watchlist в UI Lampa** — план: [[personal/plans/lampac-watchlist-plugin]].
4. **Проверка полосы на торрент-источнике** (remux 60–80 Мбит) — не сделана.
@@ -13,6 +13,7 @@ tags:
related:
- '[[personal/tech/lampac-deployment]]'
- '[[personal/plans/lampac-kraken]]'
- '[[family/how-to/tv-luna-send]]'
---
# Skill: `lampac-kraken-deploy`
@@ -40,6 +41,27 @@ related:
6. `docker manifest inspect` с Mac → `denied`; проверять **из Кра́кена**.
7. `docker compose` только как плагин (v5.1.3), не `docker-compose`.
8. Приёмка = играет 5+ минут на ТВ, а не «API отвечает».
9. 🔴 **Lampa на ТВ ставится по SSH, флешка и Media Station X НЕ нужны.** См. [[personal/tech/lampac-deployment]].
10. 🔴 **`luna-send` по SSH печатает хелп вместо ответа** — обернуть в `script -q -c "..." /tmp/o.txt`.
11. Фактический appId Lampa на ТВ — **`com.lampac.tv`** (не `org.lampa.tv` из запроса установки).
## Установка Lampa на ТВ (сжато)
```bash
# скачать ipk на ТВ
ssh root@192.168.1.70 'curl -sS -o /tmp/lampa.ipk "http://192.168.1.14:9118/lg.ipk"'
# установить (только через com.webos.appInstallService + обёртку script)
ssh root@192.168.1.70 'rm -f /tmp/i.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.appInstallService/dev/install \
{\"id\":\"org.lampa.tv\",\"ipkUrl\":\"/tmp/lampa.ipk\",\"subscribe\":true}" /tmp/i.txt; cat /tmp/i.txt'
# запустить
ssh root@192.168.1.70 'rm -f /tmp/l.txt; script -q -c \
"luna-send -n 1 -f luna://com.webos.applicationManager/launch {\"id\":\"com.lampac.tv\"}" /tmp/l.txt'
```
ТВ: `root@192.168.1.70`, ключ `~/.ssh/konka_webos`, webOS 5.4.2, порты `22`/`3000`/`3001`.
## Проверка
@@ -59,3 +81,13 @@ ssh kraken 'sudo rm -rf /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e8
## Не закрыто
- Лимит кэша TorrServer — дефолт. Рекомендуется ~20 ГБ.
- `init.conf` не смонтирован — правки через `docker exec` не переживают пересоздание контейнера.
- Шаг 7 — watchlist в UI Lampa: [[personal/plans/lampac-watchlist-plugin]].
## Реальный скилл (файл)
`~/.hermes/hermes-whale/skills/devops/lampac-kraken-deploy/SKILL.md`
⚠️ **Скилл в файловой системе отстал от этой заметки** — в нём нет пунктов 9–11
(установка Lampa на ТВ по SSH, питфолл `luna-send`+`script`, фактический appId `com.lampac.tv`).
При следующей загрузке скилла — подтянуть из [[personal/tech/lampac-deployment]].