20 KiB
Executable File
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-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.
Ключевое из скилла
- Хост — Кра́кен (
ssh kraken), aarch64 Debian 12. Не TrueNAS. - Образ содержит
linux/arm64— сборка из исходников не нужна. - 🔴 TorrServer встроенный — второй контейнер не ставить.
- Каталоги в корне диска — только через
sudo mkdir(кореньroot:root, sudo без пароля). - 🔴 Первый старт ~4 минуты.
Connection reset by peer— норма, ждатьConfigure complete.healthy≠ готовность HTTP. docker manifest inspectс Mac →denied; проверять из Кра́кена.docker composeтолько как плагин (v5.1.3), неdocker-compose.- Приёмка = играет 5+ минут на ТВ, а не «API отвечает».
- 🔴 Lampa на ТВ ставится по SSH, флешка и Media Station X НЕ нужны. См. personal/tech/lampac-deployment.
- 🔴
luna-sendпо SSH печатает хелп вместо ответа — обернуть вscript -q -c "..." /tmp/o.txt. - Фактический appId Lampa на ТВ —
com.lampac.tv(неorg.lampa.tvиз запроса установки).
Инвентаризация диска и удаление (добавлено 2026-09-22)
Полная таблица: personal/plans/kraken-media-inventory-cleanup.
- 🔴 arr индексирует только 252 ГБ из 1236 (21%). Остальное — ручные закачки, невидимые в UI Radarr/Sonarr. «Нет в Radarr» ≠ «нет на диске».
- 🔴
downloads/complete/sonarr/— завершённые раздачи, не удалённые после импорта. Байт-в-байт дубли библиотеки = 78,6 ГБ зря. Самый безопасный кандидат на снос. - 🔴 Матч с watchlist — только СТРОГОЕ равенство нормализованных названий,
len >= 4. Подстрочный матч раздувает счёт: 42 позиции / 811 ГБ вместо реальных 29 / 456 ГБ. - 🔴 В
watchlist.jsonнет поляtmdb_id— он вhref(.../movie/424781), вынимать регексом/(\d{2,9})/?$. - 🔴
missing.json(30 позиций с❓) не пересекается с диском — это рукописные заметки в списке. «Недоступно в Lampa» для файлов = нет в watchlist, не «нет в TMDB». - Группировка 802 файлов: файлы в корне
movies/cartoons/documentaries— каждая своя позиция (иначе «Вивариум» 1,46 ГБ склеивается в группу на 135 ГБ). - Удаление только через API arr-стека;
deleteFiles=true— проверять, что путь внутри библиотеки. Дамп API в файл перед операцией.
Читать продолжение поверх: personal/tech/lampac-deployment, раздел «Transmission на Кра́кене».
- 🔴 Матч с 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). - 🔴
UseDisk: falseу TorrServer — Lampa играет С ТОРРЕНТОВ, не с диска. Проверятьcurl -X POST :9118/ts/settings -d '{"action":"get"}'перед любым предупреждением «снесёшь то, что играет». Файлыmedia/в плейбэке Lampa не участвуют. - 🔴 Transmission RPC на Кра́кене: авторизации нет, но нужен session-id.
Первый POST → 409 +
X-Transmission-Session-Id; забрать и повторить.error: 3="No data found!"— файлы удалены, раздачи висят (21 шт. / 561,6 ГБ). ⚠️downloadDir= путь внутри контейнера (/media/...), не host-путь. - 🔴 Перед сносом «копия есть на другом хосте» — СЧИТАТЬ, а не
ls. На TrueNASdocumentaries= 1 файл,documentaries-series= пусто,cartoons-series= 1 сборник. 307 ГБ доксериалов/документалок Кра́кена уникальны. - ⚠️ Jellyfin на Кра́кене (
:8096) может смотреть вmedia/— проверить библиотеки до удаления, rescan после. Это единственная реальная связьmedia/с просмотром. - 🔴 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. - 🔴 У 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. Рассинхрон раскладки, не ошибка чтения. - 🔴 После
docker stop transmissionRPC недоступен — править состояние через bind-mount/srv/.../docker/transmission/(torrents/,resume/,settings.json). - 🔴 Правила чистки раздач (утверждено Alex'ом):
error==3(data missing) → снести;downloadDirпод удаляемые папки → снести ЦЕЛИКОМ;status==0иpercentDone<1(недокачанные) → снести. Итог 2026-09-22: 240 снести / 1769 ГБ, 9 оставить. - 🔴 Манифест удаления строится целыми папками —
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, раздел «ВЫПОЛНЕНО».
- 🔴
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— снимает запись, файлы не трогает (их удаляет манифест). - 🔴
rm -rfкаталога верхнего уровня →Permission deniedна САМОМ каталоге. Содержимое удаляется (оноkraken:kraken), а каталогroot:root. Второй проходsudo rmdirдочищает (каталоги уже пусты). Скрипт должен уметь оба уровня: содержимое —rm -rf, сам каталог —sudo rmdir. - 🔴🔴 После удаления 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 ДО удаления; если сносишь корневую папку библиотеки — планируй чистку записей в том же проходе, потом уже не получится. - 🔴🔴 409 меняет причину — двух барьеров ДВА, останавливаться на первом нельзя.
⚠️ DELETE
папки нет → "root folder (...) doesn't exist" папка пуста → "root folder (...) is empty. Rescan" есть файл → ✅ операция проходитmoviefile/episodefile— тупик. Эти эндпоинты проверяют корень ДО удаления записи, поэтому 409 будет вечно. Не крутить параметры — сразу Rescan. ✅ ЛЕЧЕНИЕ (применено 2026-09-22, Radarr 12→0 / Sonarr 57→0):⚠️ Сканы асинхронные, снимают пачками (25 → 13 → 0), Sonarr ~60 сек. Не судить по одному замеру — поллить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}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(ожидание + уборка). - ⚠️ 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
hasFile12 → 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/.