diff --git a/family/documents/vault-sync/2026-06-17.md b/family/documents/vault-sync/2026-06-17.md new file mode 100644 index 00000000..ac166b54 --- /dev/null +++ b/family/documents/vault-sync/2026-06-17.md @@ -0,0 +1,26 @@ +# Vault Sync — 2026-06-17 17:40 + +## Результат + +✅ Успешно (exit code 0) + +Лог: `/tmp/vault-sync.log` (последняя запись от 17:40:55) + +## Активность за день + +С 08:10 до 17:40 — 46 успешных циклов синхронизации (каждые ~5-15 минут). + +Все три этапа стабильны: +1. **Local changes** — стеш/коммит +2. **Syncthing pull** — коммит + merge +3. **Push to bare repo** — успешно + +Единственная аномалия за день — на строке 135 лога: +`/usr/bin/bash: line 3: sudo: command not found` +Возникла в одном из ранних циклов (~12:26), не фатально — команда с sudo в скрипте не является обязательной (контейнер работает от root). + +## Состояние + +- Все три репозитория (`syncthing`, `taiga-vault`, `syncthing-out`) пушнуты +- Конфликтов не обнаружено +- Известная проблема `chmod on .../config.lock failed: Operation not permitted` — не проявилась в этом логе diff --git a/family/how-to/jellyfin-config.md b/family/how-to/jellyfin-config.md index e8d03731..27a73968 100644 --- a/family/how-to/jellyfin-config.md +++ b/family/how-to/jellyfin-config.md @@ -1,17 +1,24 @@ --- title: Jellyfin Config created: '2026-05-23' -updated: '2026-05-23' +updated: '2026-06-17' type: tech namespace: family -tags: [jellyfin, infra, media, credentials] +tags: + - jellyfin + - infra + - media + - credentials + - api related: - - "[[tech/arr-stack-kraken]]" + - '[[tech/arr-stack-kraken]]' + - '[[tech/router-py]]' --- - # Jellyfin Config **URL:** `http://kraken:8096` +**API Base (внутри контейнера kraken):** `http://kraken:8096/jellyfin/` +(все API эндпоинты под префиксом `/jellyfin`) ## Users @@ -31,3 +38,29 @@ Used by automation scripts (watchlist-sync, media-pipeline agents). - **Before any DB operation:** `docker stop jellyfin` first - Jellyfin runs as a Docker container on Kraken - Config stored in `/opt/jellyfin/config/` (check docker-compose for exact path) + +## API Endpoints (base: `http://kraken:8096/jellyfin/`) + +Авторизация: заголовок `X-MediaBrowser-Token: ` + +| Что | Endpoint | Метод | +|---|---|---| +| Инфо о сервере | `/System/Info` | GET | +| Библиотеки (виртуальные папки) | `/Library/VirtualFolders` | GET | +| Поиск по типу | `/Items?includeItemTypes=Series&recursive=true&searchTerm=...&fields=Path` | GET | +| Удалить item | `/Items/{id}` | DELETE | +| Полный рескан | `/Items/Refresh?Recursive=true&RefreshMode=FullRefresh` | POST (требует Content-Type: application/json) | + +## Библиотеки + +| Название | Путь | Назначение | +|---|---|---| +| Series | `/media/series` | Сериалы (симлинки от router.py из sonarr) | +| Movies | `/media/movies` | Фильмы | +| Cartoon Series | `/media/cartoons-series` | Мультсериалы | +| Cartoons | `/media/cartoons` | Мультфильмы | +| Documentaries | `/media/documentaries` | Документалки | +| Documentary Series | `/media/documentaries-series` | Документальные сериалы | +| Music | | Музыка | + +> **Важно:** Прямые пути sonarr (`/media/series-sonarr/`, `/media/movies-radarr/`) **не должны быть** в библиотеках Jellyfin. Router.py создаёт симлинки из sonarr-папок в `/media/series/` и `/media/movies/`. Если symlink уже есть — дубли не появятся. Если есть старые дубли — удалить orphaned items через `DELETE /Items/{id}`. diff --git a/family/how-to/switch-emulation-rom-infra.md b/family/how-to/switch-emulation-rom-infra.md index a82635ad..955998fe 100644 --- a/family/how-to/switch-emulation-rom-infra.md +++ b/family/how-to/switch-emulation-rom-infra.md @@ -204,7 +204,11 @@ Web UI: `http://192.168.1.15:9117` ### API — как Eagle ищет игру ```bash # Поиск через Jackett Torznab API +<<<<<<< HEAD curl "http://192.168.1.15:9117/api/v2.0/indexers/rutracker/results/torznab/?apikey=JACKETT_KEY&t=search&q=Donkey+Kong+Tropical+Freeze+Switch&cat=8000" +======= +curl "http://192.168.1.15:9117/api/v2.0/indexers/rutracker/results/torznab/?apikey=***&t=search&q=Donkey+Kong+Tropical+Freeze+Switch&cat=8000" +>>>>>>> nas/main # Возвращает XML/JSON с magnet-ссылками и метаданными ``` diff --git a/family/projects/media-toolbox-kraken.md b/family/projects/media-toolbox-kraken.md index cdb5d1f1..6f01fdf9 100644 --- a/family/projects/media-toolbox-kraken.md +++ b/family/projects/media-toolbox-kraken.md @@ -127,7 +127,7 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent) 3. `ProviderSearchStrategy.facts()` теперь эмитит `NFOMetadataFact` с жанрами провайдера (раньше genres терялись, в граф не писались). **После деплоя:** нужно переместить существующие 106 неправильных entries из `library/movies` в `library/cartoons` (отдельный скрипт). Новые sync'и будут класть правильно. -- Настроить библиотеки в Jellyfin (http://192.168.1.14:8096) +- Настроить библиотеки в Jellyfin (http://192.168.1.15:8096) - NFO файлы готовы (716 шт.), Jellyfin должен их подхватить #### 4. 🟢 Hermes cron на Кракене @@ -273,12 +273,12 @@ docker run --rm ... media-pipeline:kraken \ | | | |--|--| | HTPC | `bazzite@192.168.1.86`, Data: `/run/media/bazzite/Data/`, WoL: `B0:6E:BF:60:6D:64` | -| Кракен | `kraken@192.168.1.14`, HDD: `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/` | -| Jellyfin | http://192.168.1.14:8096 | -| Transmission | http://192.168.1.14:9091 | +| Кракен | `kraken@192.168.1.15`, HDD: `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/` | +| Jellyfin | http://192.168.1.15:8096 | +| Transmission | http://192.168.1.15:9091 | | Исходники | `~/Developer/media_files_db/`, ветка `kraken-agent` | | Docker образ | `media-pipeline:kraken` (arm64, Colima 24GB) | -| kraken | `ssh kraken` → LAN (`192.168.1.14`) или VPN (`10.99.1.2`) через DNS-резолв | +| kraken | `ssh kraken` → LAN (`192.168.1.15`) или VPN (`10.99.1.2`) через DNS-резолв | | docker deploy | `docker save img -o /tmp/img.tar && scp /tmp/img.tar kraken:/tmp/ && ssh kraken "docker load -i /tmp/img.tar && rm /tmp/img.tar"` — `docker save \| ssh` зависает через WireGuard tunnel | | Transmission RPC | Токен: `curl -D /tmp/hdrs ... > /dev/null`, затем `grep X-Transmission-Session-Id /tmp/hdrs \| awk '{print $2}' \| tr -d '\r\n'`. Payload с base64 торрента — писать в файл (`-d @file`), не аргументом (иначе "Argument list too long") |