[2026-09-23] plan fix: .15 is alive (same host as .14); TimeCode.sql is container-only, not on volume

This commit is contained in:
Alexey Martemyanov committed 2026-09-23 21:41:31 +06:00
1 parent 8b87784327
commit eff4dd9c9d
4 files changed
+283 -16

No files matched your search

+67 -16
View File
@@ -37,7 +37,7 @@ related:
| Элемент | Значение |
|---|---|
| Модуль | `/lampac/module/Sync/TimeCode/` (`Controller.cs`, `plugin.js`, `SqlContext.cs`) |
| БД | `/lampac/database/TimeCode.sql` (SQLite; на хосте `$H/lampac/database/TimeCode.sql`) |
| БД | `/lampac/database/TimeCode.sql` (**внутри контейнера**; на хосте нет — см. 8.4) |
| Таблица | `timecodes` |
| Колонки | `Id, user, identity, card, item, position, duration, percent, profile, deleted, watched_at, updated_at, extra` |
| Запись ставит | `Lampa` → `POST /timecode/add` (легаси) или `/timecode/set` (нативный), пачками ≤10 req/s |
@@ -201,8 +201,11 @@ KP-ID (`kinopoisk.ru/film/`, 68 штук в `.md`) в цепочке **не уч
- `--dry-run` по умолчанию, `--apply` для записи; печатает каждое действие.
3. **Копия для теста.** Dry-run на **копии** боевого `.md`, сверить: сколько строк
перешло, какие именно. Только после сверки — `--apply` на боевом.
4. **`.env`** на Кра́кене: `LAMPAC_TIMECODE_DB=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/database/TimeCode.sql`
(БД лежит на хосте, не в контейнере — путь проверен).
4. **`.env`** на Кра́кене: `LAMPAC_TIMECODE_DB=/lampac/database/TimeCode.sql` —
🔴 **путь ВНУТРИ контейнера**, хостовой копии нет (см. 8.4). Модуль запускается
на хосте Кра́кена, поэтому перед чтением делать
`docker cp lampac:/lampac/database/TimeCode.sql <tmp>` и читать копию.
Либо (предпочтительно, отдельным апрувом) bind-mount `database/` на хост.
5. **Крон.** В `~/scripts/watchlist-nightly.sh` — новый вызов **после** `sync-up`,
**до** `sync-vault (push)`. Правка через `sudo cp` (`~/scripts/` — `root:root 755`).
Бэкап скрипта до правки. Сумма новой версии зафиксировать в доке.
@@ -229,12 +232,12 @@ KP-ID (`kinopoisk.ru/film/`, 68 штук в `.md`) в цепочке **не уч
| 4 | `identity` для сериалов = `tv-1851-s1e2`, серия в `card` | этап 1 — только фильмы; сериалы отдельно |
| 5 | `percent` сбрасывается в `0` при `deleted` | фильтровать `deleted = 0` |
| 6 | Матч по названию ломается на год/рейтингах | нормализация `_norm_title()` + год как второй ключ |
| 7 | `timecodes` переживает рестарт лампака (SQLite на хосте, не в контейнере) | ок |
| 7 | 🔴 **`/lampac/database` НЕ на volume и НЕ на хосте** — БД только внутри контейнера; пересоздание контейнера уничтожит историю | читать через `docker cp`; риск потери закрыть bind-mount'ом отдельно (см. 8.4) |
| 8 | Крон-файлы возвращать только `crontab /tmp/файл`; бэкап `crontab -l > f` обязателен | — |
| 9 | 🔴 **`identity` бывает в ДВУХ формах** (`movie-674` и `674_movie`) | regex `^(?:(movie\|tv)-)?(\d+)` |
| 10 | 🔴 **`watched_at` не признак досмотра** — бывает `>0` при `percent=18` | порог только по `percent` |
| 11 | 🔴 **inline `python3 -c` уходит на апрув и истекает** | все пробы — файлами |
| 12 | **`ssh kraken` резолвится в мёртвый `.15`** | работать через `kraken@192.168.1.14` |
| 12 | ✅ **`.15` и `.14` — ОДИН Кра́кен, оба живые.** Прежнее «`.15` мёртвый» — моя ошибка | обрывы = перегрузка sshd; короткие команды, повторы |
| 13 | Длинные `ssh` + тяжёлый `jq` рвут соединение («banner exchange») | разбивать на короткие команды, тяжёлое — файлом |
---
@@ -302,23 +305,71 @@ Vault git чистый. Записано в [[family/projects/watchlist-automati
в `~/logs/` (`watchlist-catalog.log`, `watchlist-cleanup.log`). Фикс (перенести
в `~/logs/`) предложен, ждёт команды Alex.
### 8.3 🔴 `ssh kraken` резолвится в МЁРТВЫЙ адрес
### 8.3 ✅ Уточнено: `192.168.1.15` НЕ мёртвый — это тот же Кра́кен
`ssh kraken` → DNS отдаёт **`192.168.1.15`** → порт 22 открыт, но sshd рвёт
соединение на `banner exchange`. Рабочий адрес — **`192.168.1.14`** (проверено:
`ALIVE_14`, uptime 6:27, load 0.02).
🔴 **Изменено 2026-09-23 (поздняя правка). Предыдущая версия этого раздела
утверждала «`.15` мёртвый» — ЭТО НЕВЕРНО, ошибка снятия одного таймаута за факт.**
Причина в `~/.ssh/config`: proxy-команда
Проверено:
```
if ifconfig | grep -q 10.99.0.2; then nc 10.99.1.2 22; else nc kraken 22; fi
$ ping -c 2 192.168.1.15 → 0% loss, 5.5 ms avg
$ ssh kraken@192.168.1.15 → hostname = kraken
hostname -I = 192.168.1.14 192.168.1.15 10.99.1.2 172.21.0.1 …
```
На Mac интерфейса с `10.99.0.2` **нет** → уходит на `nc kraken 22` → мёртвый `.15`.
WG-туннель до Кра́кена не поднят.
Кра́кен **имеет оба адреса**, оба живые, это одна и та же машина.
Оба варианта работают: `ssh kraken` (→ `.15`) и `ssh kraken@192.168.1.14`.
**Обход до восстановления WG:** всегда `ssh kraken@192.168.1.14` явно.
**Проверка:** `nc -z -w 5 192.168.1.14 22`.
**Настоящая причина обрывов** — не адрес, а **перегрузка sshd**:
первые подключения падали при `load average: 4.69` (после ребута поднимались
контейнеры). Симптом: `Connection closed by UNKNOWN port 65535` /
`Connection timed out during banner exchange`. Лечится повтором и короткими
командами, а не сменой адреса.
### 8.4 Commit незакоммиченных фиксов сирот
**Обход, который реально помогает:**
- короткие `ssh`-команды, тяжёлое — файлом-скриптом;
- не собирать `ssh` + тяжёлый `jq` в одну строку (180 KB json = обрыв);
- `ssh kraken` штатно работает, `192.168.1.14` — равноценный явный путь.
⚠️ **WG-туннель до Кра́кена не поднят:** интерфейса с `10.99.0.2` на Mac нет,
`nc 10.99.1.2 22` → FAIL. Proxy-команда в `~/.ssh/config` уходит в ветку
`nc kraken 22`. Само по себе это не ломает (Кра́кен доступен по LAN),
но объясняет, почему прокси не используется.
### 8.4 🔴 `TimeCode.sql` НЕ на хосте — только внутри контейнера, и НЕ на volume
🔴 **Критично для реализации. Предыдущая версия плана называла хостовый путь
`$H/lampac/database/TimeCode.sql` — такого пути НЕТ.**
Факт:
```
$ docker inspect lampac --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}\n{{end}}'
…/lampac/cache -> /lampac/cache
…/lampac/config -> /lampac/config
…/lampac/data -> /lampac/data
…/lampac/config-module/init.conf -> /lampac/init.conf
…/lampac/catalog/override, plugin.js, sites -> /lampac/module/Catalog/*
…/lampac/wwwroot -> /lampac/wwwroot
```
**`/lampac/database` в маунтах ОТСУТСТВУЕТ.** Файл живёт внутри контейнера:
```
docker exec lampac ls -la /lampac/database/TimeCode.sql
-rw-r--r-- 1 lampac lampac 24576 Sep 22 15:32 /lampac/database/TimeCode.sql
```
**Способы чтения (единственный рабочий):**
```bash
docker cp lampac:/lampac/database/TimeCode.sql /tmp/TimeCode.sql
python3 /tmp/probe_match.py # файлом, НЕ -c
```
🔴 **РИСК ПОТЕРИ ДАННЫХ.** `/lampac/database` **не на volume** →
`docker compose up --force-recreate`, обновление образа ла́мпака или
пересоздание контейнера **уничтожат всю историю просмотров**. Прямо сейчас
там 1 запись (потери нет), но план зависит от этой БД — риск закрыть
отдельным шагом (bind-mount `database/` на хост, с бэкапом перед правкой
compose, **без пересоздания контейнера без разрешения Alex**).
### 8.5 Commit незакоммиченных фиксов сирот
В рабочем дереве `watchlist-sync` висели незакоммиченные правки, которые **уже
работали боевым прогоном**: `cli.py` (+7) и `parser.py` (+65) — фикс «ОСИРОТЕВШИЕ