[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:
1 parent
8b87784327
commit
eff4dd9c9d
4 files changed
+283
-16
No files matched your search
@@ -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) — фикс «ОСИРОТЕВШИЕ
|
||||
|
||||
Reference in new issue
Block a user