Failed to authenticate. API Error: 401 Invalid authentication credentials

[2026-05-18] vault sync
This commit is contained in:
Alexey Martemyanov
2026-05-18 03:09:12 +06:00
parent 36143b783b
commit 1f07327a36
8 changed files with 252 additions and 11 deletions
+42 -1
View File
@@ -1,7 +1,7 @@
---
title: Kraken Network & Infra
created: '2026-05-17'
updated: '2026-05-17'
updated: '2026-05-18'
type: reference
tags:
- kraken
@@ -37,3 +37,44 @@ confidence: high
- Configs: `~/docker/media-pipeline/{config.json,cache/,unresolved.json}`
- Нет docker-compose — только `docker run` напрямую
- Монтировать `unresolved.json` явно: `-v "$(pwd)/unresolved.json:/config/unresolved.json"`
## *arr стек (добавлен 2026-05-17)
Prowlarr / Radarr / Sonarr + Transmission + Jellyfin — полностью настроены через API.
Скилл: `~/.hermes/skills/arr-media-stack-setup/SKILL.md`
| Сервис | Порт | Compose dir |
|--------|------|-------------|
| Transmission | 9091 | `docker/transmission/` |
| Radarr | 7878 | `docker/radarr/` |
| Sonarr | 8989 | `docker/sonarr/` |
| Prowlarr | 9696 | `docker/prowlarr/` |
| Jellyfin | 8096 | `docker/jellyfin/` |
Все контейнеры в `media_net` (external network), кроме Jellyfin (читает диск напрямую).
RuTracker индексер подключён через Prowlarr → fullSync в Radarr/Sonarr.
Скачка медиа-агентом: скилл `download-media` (Radarr/Sonarr API — только `curl + jq`, без python3).
**⚠️ Pitfall: Pi-hole DNS hijack** — при включённом Pi-hole Radarr/Sonarr могут получать 503 на DNS lookup (Pi-hole блокирует трекеры). Решение: whitelist в Pi-hole или прямые IP в настройках индексера.
**⚠️ Pitfall: curl отсутствует в Hermes-контейнере** — агент внутри Docker не может исполнять curl-команды из скилла. Skills path: `~/.hermes/skills/` видна только хостовому Hermes; контейнерный Hermes ищет в `/opt/data/skills/`.
## HDD Hardware Error — поведение при перегрузке
**Симптом (2026-05-18):** При одновременном rsync + Jellyfin transcode + docker overlay → ext4 сбрасывает ошибку Sense Key 0x4 (Hardware Error) → файловая система ремонтирует в read-only (`remount-ro`).
**Признаки:** Docker containers fail with `EIO` (I/O error -5), overlayfs недоступен.
**Восстановление:**
1. Reboot Kraken (OMV или физически)
2. При монтировании ext4 автоматически запускает fsck
3. После ребута: `docker compose up -d` из каждого `~/docker/<service>/`
**Профилактика:** не запускать rsync и ffmpeg transcode одновременно. Jellyfin transcode: pgsrip (subtitle extraction) особенно нагружает CPU+диск.
## Связанные заметки
- [[personal-os-architecture]]
- [[tech/media-pipeline-pitfalls]]
- [[tech/htpc-steam-emulators]]
+34 -4
View File
@@ -1,7 +1,7 @@
---
title: Media Pipeline — Pitfalls & Debug Notes
created: '2026-05-16'
updated: '2026-05-16'
updated: '2026-05-18'
type: entity
tags:
- media-pipeline
@@ -12,8 +12,8 @@ confidence: high
---
# Media Pipeline — Pitfalls & Debug Notes
Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Крякне.
Связано: [[personal-os-architecture]], [[wiki/tech/kraken-infra]]
Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Кракене.
Связано: [[personal-os-architecture]], [[tech/kraken-network]]
## §9.x Score Engine — Критические питфолы
@@ -41,6 +41,7 @@ confidence: high
- 40 KP-запросов vs 8428 TMDb в типичном прогоне
- Лимит исчерпывается только после очистки кеша когда весь TMDb идёт заново
- Проблема не в архитектуре — это нормально
- **KP API URL смена домена (Баг 8):** `api.kinopoisk.dev``api.poiskkino.dev`. Swift URLSession при редиректе теряет `X-API-KEY` → пустые ответы кешируются. Фикс: обновить URL, добавить `shouldCache: ((Data) -> Bool)?` — не кешировать пустой `docs`.
## Docker Deploy — Kraken (обязательный порядок)
@@ -92,6 +93,29 @@ docker run \
- §9.6 subset floor 0.35 — добавлен
- §9.9 year tiebreak `count>1` only — исправлен
- Year-miss retry в TMDb/KP providers — добавлен
- KP API URL (`api.poiskkino.dev`) + пустой-docs no-cache — исправлен
- Leet-speak в транслите (`4` = `ч`): `String.decodeLeetSpeak()` — исправлен
- Год `2023г` (кириллическое `г`): `(19|20)\d\d)г\b` паттерн — исправлен
- `TitleParser _year_` underscore boundary: `\b``(?<![0-9])..(?![0-9])` — исправлен (Баг 12)
- `OutputConfig` `cartoons`/`documentaries` не optional в JSON: `decodeIfPresent` — исправлен
- `xvid`/`divx` не в quality markers list — исправлен
- TitleParser: год как название фильма (1984, 2001) → safety guard ≥2 букв перед — исправлен
## Трекер-парсеры (Steps A-C, 2026-05-17)
`TrackerPageParserRegistry` — dispatch по `url.host`:
- `RutrackerPageParser` — CP1251/iconv, SwiftSoup, жанры из заголовка, KP/IMDb IDs
- `RutorPageParser`, `NNMClubPageParser` — структура реализована, требует fixture тестов
- `TrackerMediaKind` enum: movie/series/cartoon/documentary/music/audiobook/game/book/unknown
- `extractMediaKind` — детект по `BB.catId`/`FORUM_ID` на странице (100+ forum IDs)
`DirectoryPolicy` / `MatchPolicy` / `MoveStrategy`:
- `FileAction.transmissionMove(torrentId:, from:, to:)` — Codable
- `buildMovieActions` читает policy, `needsSymlink`, `needsNFO`, `effectiveOutputDir`
- `transmissionMove` когда есть `torrentId`, иначе `move`
**⚠️ `transmissionMove` генерируется только если scanner создал регион** (нужен video файл).
Музыка/книги/игры из downloads не перекладываются — нет `videoExtensions` для аудио (Шаг D, pending).
## Agent/Sync Pitfall — Duplicate unresolved
@@ -99,7 +123,13 @@ docker run \
**Фикс:** `updateUnresolvedStore` проверяет `allOutputDirs` на существующий canonical dir → пропускает. Файл: `PipelineRunner.swift`.
## QuerySnapshotGenerator
При изменениях в `TitleParser`/`NameTokenization`/`QueryBuilder` снапшоты в тестах устаревают.
**Регенерация:** `swift run QuerySnapshotGenerator` из корня репо.
НЕ использовать `SNAPSHOT_TESTING_RECORD=all` — крашит при 364 concurrent writes (SIGSEGV).
## Связанные заметки
- [[personal-os-architecture]]
- [[wiki/tech/kraken-network]]
- [[tech/kraken-network]]