Files
obsidian-vault/personal/tech/skill-lampac-kraken-deploy.md
T
Taiga b53dd70a15 [2026-09-26 09:10:28] syncthing: personal/tech/archive-org-collection-harvest.md personal/tech/balda-go-fx-pitfalls.md personal/tech/bilety-oxota-interaktiv.md personal/tech/cloudflare-tunnel-ssh-published-route.md personal/tech/deepseek-language-drift.md personal/tech/docker-data-root-mount-race.md personal/tech/docker-mac-disk-issues.md personal/tech/docker_colima_setup.md personal/tech/eagle-dashboard-launchd.md personal/tech/hermes-agent-improvements.md personal/tech/hermes-browser-toolsets.md personal/tech/hermes-fork-vs-upstream.md personal/tech/hermes-git-repo.md personal/tech/hermes-memory-architecture.md personal/tech/hermes-secret-redaction-bypass.md personal/tech/hermes-self-improvement-review.md personal/tech/home-network-config.md personal/tech/inter-site-throughput-taiga-to-mac.md personal/tech/inter-site-throughput-taiga-to-mac.md.bak-nedstab2 personal/tech/jellyfin-db-schema-mismatch.md personal/tech/karabiner-keyboard-config.md personal/tech/kraken-media-inventory-facts.md personal/tech/kraken-truenas-media-copies.md personal/tech/lampa-jellyfin-plugin.md personal/tech/lampac-deployment.md personal/tech/lampac-torrserver.md personal/tech/llm-model-selection-2026.md personal/tech/mac-print-shared-services.md personal/tech/modbus-rtu-sniffer-debugging.md personal/tech/multistream-single-flow-limit.md personal/tech/multistream-single-flow-limit.md.bak-nedstab2 personal/tech/music-tags-repair-truenas.md personal/tech/obsidian-mcp-ecosystem.md personal/tech/original-xbox-2025-guide.md personal/tech/prowlarr-flaresolverr-cloudflare.md personal/tech/radarr-sonarr-phantom-records.md personal/tech/roundtrip-key-verification.md personal/tech/ryujinx-mac-setup.md personal/tech/skill-arr-media-stack-setup-additions.md personal/tech/skill-docker-data-root-mount-race.md personal/tech/skill-lampac-kraken-deploy.md personal/tech/tirith-trust.md personal/tech/truenas-local-tree-comparison.md personal/tech/truenas-nfs4-acl-and-arrmultiuser.md personal/tech/truenas-zfs-panic-recovery.md personal/tech/vault-doc-pruning.md personal/tech/vless-space-subscription-egress.md personal/tech/watchlist-sync-feed.md personal/tech/watchtower-docker-updates.md personal/tech/xray-outbound-subscription-3xui.md personal/tech/xray-reverse-limits-private-network.md personal/tech/xray-reverse-tunnel-kraken-truenas.md personal/tech/xray-reverse-tunnel-kraken-truenas.md.bak-nedstab2 personal/tech/yandex-music-api.md
2026-09-26 09:10:28 +00:00

20 KiB
Executable File
Raw Blame History

title, created, updated, type, namespace, tags, related
title created updated type namespace tags related
Skill — lampac-kraken-deploy 2026-09-22 2026-09-22 tech personal
skill
lampac
docker
kraken
devops
personal/tech/lampac-deployment
personal/plans/lampac-kraken
family/how-to/tv-luna-send

Skill: lampac-kraken-deploy

Зеркало скилла devops/lampac-kraken-deploy. Файл скилла: ~/.hermes/hermes-whale/skills/devops/lampac-kraken-deploy/SKILL.md

Когда загружать

  • Деплой/рестарт/отладка Lampac на Кра́кене
  • Свежий контейнер healthy, но curl :9118 → Connection reset by peer
  • Подключение Lampa на LG ТВ
  • Вопрос «нужен ли отдельный контейнер TorrServer»

Полная техническая справка: personal/tech/lampac-deployment.

Ключевое из скилла

  1. Хост — Кра́кен (ssh kraken), aarch64 Debian 12. Не TrueNAS.
  2. Образ содержит linux/arm64 — сборка из исходников не нужна.
  3. 🔴 TorrServer встроенный — второй контейнер не ставить.
  4. Каталоги в корне диска — только через sudo mkdir (корень root:root, sudo без пароля).
  5. 🔴 Первый старт ~4 минуты. Connection reset by peer — норма, ждать Configure complete. healthy ≠ готовность HTTP.
  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 из запроса установки).

Инвентаризация диска и удаление (добавлено 2026-09-22)

Полная таблица: personal/plans/kraken-media-inventory-cleanup.

  1. 🔴 arr индексирует только 252 ГБ из 1236 (21%). Остальное — ручные закачки, невидимые в UI Radarr/Sonarr. «Нет в Radarr» ≠ «нет на диске».
  2. 🔴 downloads/complete/sonarr/ — завершённые раздачи, не удалённые после импорта. Байт-в-байт дубли библиотеки = 78,6 ГБ зря. Самый безопасный кандидат на снос.
  3. 🔴 Матч с watchlist — только СТРОГОЕ равенство нормализованных названий, len >= 4. Подстрочный матч раздувает счёт: 42 позиции / 811 ГБ вместо реальных 29 / 456 ГБ.
  4. 🔴 В watchlist.json нет поля tmdb_id — он в href (.../movie/424781), вынимать регексом /(\d{2,9})/?$.
  5. 🔴 missing.json (30 позиций с ❓) не пересекается с диском — это рукописные заметки в списке. «Недоступно в Lampa» для файлов = нет в watchlist, не «нет в TMDB».
  6. Группировка 802 файлов: файлы в корне movies/cartoons/documentaries — каждая своя позиция (иначе «Вивариум» 1,46 ГБ склеивается в группу на 135 ГБ).
  7. Удаление только через API arr-стека; deleteFiles=true — проверять, что путь внутри библиотеки. Дамп API в файл перед операцией.

Читать продолжение поверх: personal/tech/lampac-deployment, раздел «Transmission на Кра́кене».

  1. 🔴 Матч с watchlist — name И original + год ±1. Строгое равенство только по русскому name пропускает файлы, названные по оригиналу: Bram.Stoker's Dracula.1992 → «Дракула» (6114), The.Crow.1994 → «Ворон» (9495), despicable.me.4.2024 → «Гадкий я 4» (519182). 4 промаха = 27,3 ГБ, ошибочно помеченных «не в watchlist». Токенный матч тоже гадит: «пингвины. шпион в толпе» → «Шпион» (2015).
  2. 🔴 UseDisk: false у TorrServer — Lampa играет С ТОРРЕНТОВ, не с диска. Проверять curl -X POST :9118/ts/settings -d '{"action":"get"}' перед любым предупреждением «снесёшь то, что играет». Файлы media/ в плейбэке Lampa не участвуют.
  3. 🔴 Transmission RPC на Кра́кене: авторизации нет, но нужен session-id. Первый POST → 409 + X-Transmission-Session-Id; забрать и повторить. error: 3 = "No data found!" — файлы удалены, раздачи висят (21 шт. / 561,6 ГБ). ⚠️ downloadDir = путь внутри контейнера (/media/...), не host-путь.
  4. 🔴 Перед сносом «копия есть на другом хосте» — СЧИТАТЬ, а не ls. На TrueNAS documentaries = 1 файл, documentaries-series = пусто, cartoons-series = 1 сборник. 307 ГБ доксериалов/документалок Кра́кена уникальны.
  5. ⚠️ Jellyfin на Кра́кене (:8096) может смотреть в media/ — проверить библиотеки до удаления, rescan после. Это единственная реальная связь media/ с просмотром.
  6. 🔴 Radarr/Sonarr API: обязателен префикс UrlBase + -L. curl :7878/api/v3/... → HTTP 307 с ПУСТЫМ телом (0 байт в дампе) — выглядит как «API лежит / ключ неверный». Правильно: curl -sL -H "X-Api-Key: $KEY" "http://127.0.0.1:7878/radarr/api/v3/movie" (и /sonarr для аналогичного). UrlBase в config/config.xml. Диагностика: curl -o /dev/null -w "%{http_code}" → 307. Скрипт: /tmp/step1c.sh.
  7. 🔴 У Sonarr 9 из 13 сериалов — фантомы (записи без файлов): Magical Police Department, The Meeting Place Cannot be Changed, MOZU, Delicious in Dungeon, Double or Quits, Severance, Futurama, True Detective, Brassic. Файлы есть только у Our Flag Means Death, Stranger Things, The Cyberfarm, Rick and Morty. Рассинхрон раскладки, не ошибка чтения.
  8. 🔴 После docker stop transmission RPC недоступен — править состояние через bind-mount /srv/.../docker/transmission/ (torrents/, resume/, settings.json).
  9. 🔴 Правила чистки раздач (утверждено Alex'ом): error==3 (data missing) → снести; downloadDir под удаляемые папки → снести ЦЕЛИКОМ; status==0 и percentDone<1 (недокачанные) → снести. Итог 2026-09-22: 240 снести / 1769 ГБ, 9 оставить.
  10. 🔴 Манифест удаления строится целыми папками — movies, movies-radarr, series, series-sonarr по одной строке каждая + папки мультфильмов. Перед этим сверить состав папки с утверждённым списком (51 + 11 позиций — совпало). ⚠️ Инвентарь видит только видеофайлы — .nfo/.srt/постеры от ранее удалённых фильмов (Master.i.Margarita.2023, Pchelovod.2024, Леон, Ворон_2024) в манифест попадают «бонусом». Это правильно, но выглядит шире списка. ⚠️ Расхождение итога с утверждённой суммой = несовпадение имён папок. 693 ГБ вместо 828 ГБ — 7 папок мультфильмов не сматчились буквально. Всегда [ -e "$path" ] каждую строку + печатать du -sb построчно.

Удаление медиа — ВЫПОЛНЕНО 2026-09-22 (питфоллы исполнения)

Итог: удалено 693 ГБ, диск 477 ГБ → 1,2 ТБ, Transmission 249 → 9 раздач. Полный журнал: personal/plans/kraken-media-inventory-cleanup, раздел «ВЫПОЛНЕНО».

  1. 🔴 torrent-remove по id НЕ работает — Transmission пересоздаёт раздачи. Снял 240 id → осталось 17, а не 9: восемь вернулись с новыми id (223, 233, 234, 236, 238, 241, 244, 247). Долечены вторым проходом по downloadDir, третий проход — Babylon (/downloads/radarr, префикс не в фильтре). Правило: чистить по downloadDir, не по id, и пересчитывать после каждого прохода. Все префиксы учесть: /downloads/complete И /downloads/radarr И /downloads/complete/radarr. "delete-local-data": false — снимает запись, файлы не трогает (их удаляет манифест).
  2. 🔴 rm -rf каталога верхнего уровня → Permission denied на САМОМ каталоге. Содержимое удаляется (оно kraken:kraken), а каталог root:root. Второй проход sudo rmdir дочищает (каталоги уже пусты). Скрипт должен уметь оба уровня: содержимое — rm -rf, сам каталог — sudo rmdir.
  3. 🔴🔴 После удаления root-папок arr отдаёт 409 на любой DELETE файловой записи.
    DELETE /radarr/api/v3/moviefile/<id>    → 409
    DELETE /sonarr/api/v3/episodefile/<id>  → 409
    {"message":"Movie's root folder (/media/movies-radarr) doesn't exist."}
    Warn|MediaFileDeletionService|Movie's root folder (...) doesn't exist.
    
    Причина: rootfolder хранится в БД arr. Удалил папку — MediaFileDeletionService отказывается работать с записями. Rescan НЕ помогает (файлы исчезли ДО скана): осталось 12 фильмов и 57 эпизодов фантомами. У Radarr список rootfolders стал ПУСТ. Общее правило: дамп API ДО удаления; если сносишь корневую папку библиотеки — планируй чистку записей в том же проходе, потом уже не получится.
  4. 🔴🔴 409 меняет причину — двух барьеров ДВА, останавливаться на первом нельзя.
    папки нет   → "root folder (...) doesn't exist"
    папка пуста → "root folder (...) is empty. Rescan"
    есть файл   → ✅ операция проходит
    
    ⚠️ DELETE moviefile/episodefile — тупик. Эти эндпоинты проверяют корень ДО удаления записи, поэтому 409 будет вечно. Не крутить параметры — сразу Rescan. ✅ ЛЕЧЕНИЕ (применено 2026-09-22, Radarr 12→0 / Sonarr 57→0):
    M=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/media
    # 1. корневые папки — 🔴 sudo обязателен, сам media/ принадлежит root
    sudo mkdir -p "$M"/{movies-radarr,series-sonarr,movies,series}
    sudo chown kraken:kraken "$M"/{movies-radarr,series-sonarr,movies,series}
    # 2. заглушка В КОРЕНЬ — иначе вторые ворота «root folder is empty»
    printf 'decoy' > "$M/movies-radarr/.keep"; printf 'decoy' > "$M/series-sonarr/.keep"
    # 3. Rescan — фантомы снимаются САМИ, DELETE не нужен
    curl -sL -X POST -H "X-Api-Key: $RKEY" -H 'Content-Type: application/json' \
      -d '{"name":"RescanMovie"}'  "$R/api/v3/command"
    curl -sL -X POST -H "X-Api-Key: $SKEY" -H 'Content-Type: application/json' \
      -d '{"name":"RescanSeries"}' "$S/api/v3/command"
    # 4. убрать заглушки и папки
    sudo rm -rf "$M"/{movies-radarr,series-sonarr,movies,series}
    
    ⚠️ Сканы асинхронные, снимают пачками (25 → 13 → 0), Sonarr ~60 сек. Не судить по одному замеру — поллить jq '[.[].statistics.episodeFileCount]|add' до 0. ⚠️ RescanMovie/RescanSeries БЕЗ ids = вся библиотека (нужен именно такой). ⚠️ mkdir без sudo падает — media/ это root:root, хотя дети kraken:kraken. Скрипты: /tmp/step10c.sh (диагностика), /tmp/step11.sh (заглушка+rescan), /tmp/step12.sh (ожидание + уборка).
  5. ⚠️ Jellyfin на Кра́кене жив (/health → 302). 🔴 302 = страница логина, НЕ поломка. Порт :8096. Библиотеки в XML не видны — Jellyfin 10.x держит их в SQLite (docker/jellyfin/config/data/jellyfin.db), API-ключа в конфиге нет → программный rescan не сделать. Быстро: Dashboard → Libraries → три точки → Scan All Libraries. ⛔ Не объявлять библиотеку консистентной после массового сноса до этого rescan.

✅ Чистка медиа — ЗАВЕРШЕНА 2026-09-22

Метрика До После
Свободно 477 ГБ 1,2 ТБ
Занято 1,3 ТБ 511 ГБ
Раздач Transmission 249 9 (только документалки)
Radarr фильмов с файлами 12 0
Sonarr эпизодных файлов 57 0

Освобождено 765 ГБ. Снесено: movies 309,7 · movies-radarr 234,6 · series-sonarr 116,1 · series 3,6 · 37 папок мультфильмов 168 ГБ.

Осталось в media/ (455 ГБ): documentaries-series 236 · downloads 80 · documentaries 72 · cartoons 38 · cartoons-series 31 · music пусто. Мультфильмы 169 → 69 ГБ (выжили только короткометражки, которые Alex не называл).

⚠️ Документалки (307,5 ГБ) НЕ ТРОГАЛИ — копий нет ни на одном хосте.

TrueNAS: шары Time Machine НЕТ

ssh -t truenas_admin@mallexxx.duckdns.org \
  'midclt call sharing.smb.query | jq -r ".[] | \"\(.name) tm=\(.timemachine) purpose=\(.purpose)\""'
old-bu  tm=false  /mnt/RED_2TB/old-bu        purpose=DEFAULT_SHARE
storage tm=false  /mnt/RED_2TB/storage       purpose=DEFAULT_SHARE
t610    tm=false  /mnt/RED_2TB/backup/t610   purpose=DEFAULT_SHARE

Ни одна шара не включена как Time Machine — Finder не предложит её для бэкапа. Включение = один флаг timemachine=true, не делалось (Alex не просил). ⚠️ midclt по ssh требует ssh -t (нужен TTY), иначе sudo: a password is required.

Установка Lampa на ТВ (сжато)

# скачать 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.

Проверка

ssh kraken 'docker ps --filter name=lampac --format "{{.Names}} {{.Status}} {{.Ports}}"'
ssh kraken 'curl -sS "http://localhost:9118/version?type=hash"'
ssh kraken 'curl -sS "http://192.168.1.14:9118/version?type=hash"'

Откат

ssh kraken 'cd /srv/.../lampac && docker compose down'
ssh kraken 'sudo rm -rf /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac'

Не закрыто

  • Лимит кэша TorrServer — дефолт (UseDisk: false, 96 МБ RAM). ⚠️ Это и есть причина, что Lampa играет с торрентов, а не с диска — менять только осознанно.
  • ✅ Удаление медиа на Кра́кене ВЫПОЛНЕНО (2026-09-22): 765 ГБ, диск 477 ГБ → 1,2 ТБ, Transmission 249 → 9 раздач. Детали: personal/plans/kraken-media-inventory-cleanup.
  • ✅ Фантомы arr СНЯТЫ (2026-09-22): Radarr hasFile 12 → 0, Sonarr episodeFile 57 → 0. Лечение — питфолл 32. Отдельный справочник: personal/tech/radarr-sonarr-phantom-records.
  • ⏳ Jellyfin: rescan НЕ сделан. Жив (/health → 302 = логин, не поломка), но библиотека не пересканирована — программно нельзя без API-ключа. Сделать в UI: Dashboard → Libraries → три точки → Scan All Libraries.
  • ⚠️ Уборка: каталог /Users/admin/personal/ (артефакт записи по относительному пути) — удалить.
  • ⚠️ TrueNAS: шары Time Machine нет (timemachine=false у old-bu, storage, t610). Включается флагом, но Alex не просил.
  • Шаг 7 — watchlist в UI Lampa: personal/plans/lampac-watchlist-plugin.
  • Секции Watchlist внутри CUB-фида — инжект залит, приёмка в UI не подтверждена.

Реальный скилл (файл)

~/.hermes/hermes-whale/skills/devops/lampac-kraken-deploy/SKILL.md

✅ Синхронизирован 2026-09-22 (вечер). Пункты 9–11 (установка Lampa на ТВ по SSH, питфолл luna-send+script, appId com.lampac.tv) и новые 12–18 (инвентаризация диска, дубли downloads/complete, строгий матч с watchlist, tmdb_id в href) перенесены в файл скилла, включая раздел «Pillar: disk inventory & deletion candidates».

✅ Синхронизирован 2026-09-22 (ночь). Добавлен раздел «Pillar: media inventory, Transmission cleanup & deletion» (пункты 19–23): матч по name+original+год, TorrServer UseDisk: false (Lampa играет с торрентов), Transmission RPC session-id + error: 3, cross-host проверка копий счётом, Jellyfin как единственная связь media/.