[2026-09-20] eagle: family/how-to/router-bishkek-asus.md personal/tech/jellyfin-db-schema-mismatch.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-20 17:09:23 +06:00
1 parent 92a637ccf9
commit fe19897908
2 files changed
+55 -2

No files matched your search

+42
View File
@@ -64,6 +64,15 @@ address=/tv/192.168.1.75
## Полезные команды
```bash
# Скорость/состояние портов коммутатора (Broadcom, robocfg)
ssh admin@192.168.1.1 'robocfg show'
# → Port 0: 1000FD (CPU/аплинк), Port 3/4: LAN, Port 5: WAN
# Формат: <speed><FD|HD>, DOWN = порт не подключён, mac = устройство на порту
# Версия бинарника / модель
ssh admin@192.168.1.1 'nvram get productid' # RT-AC68U
# ⚠️ /sys/class/net/eth0/speed даёт 10Mb — это внутренний CPU-порт, НЕ показатель
# Проверить DNS резолвинг локальных имён
dig @192.168.1.1 htpc +short
dig @192.168.1.1 tv +short
@@ -78,6 +87,39 @@ ssh -i ~/.ssh/id_rsa admin@192.168.1.1 "service restart_dnsmasq"
ssh -i ~/.ssh/id_rsa admin@192.168.1.1 "nvram show | grep -E '^(dhcp_dns|wan_dns|wan0_dns)'"
```
## Диагностика скорости линка портов (2026-09-20)
**Метод: сопоставить MAC на порту (`robocfg show`) с устройством из `arp -a`.**
Фактическое состояние на 2026-09-20:
| Порт | Скорость | MAC | Устройство |
|---|---|---|---|
| 0 | 1000FD | `6c:44:2a:9d:76:c5` | CPU / аплинк (норма) |
| 3 | **100FD** ⚠️ | `ac:5a:f0:25:11:c6` | **LG TV** (провод) |
| 4 | **1000FD** ✅ | `2c:cf:67:64:03:f3` | **Kraken** (LAN-порт) |
| 5 | 1000FD | `f0:79:59:77:9b:70` | WAN |
**Kraken = гигабит, ТВ = сотка.** Оба плеча НЕ base1000.
### ✅ Кабельный тест (решающий, 2026-09-20)
Чтобы отличить «кабель» от «потолок устройства»: **подключить к тому же кабелю другое устройство с известным гигабитным портом** и посмотреть линк с обеих сторон.
```bash
# на роутере: сменился ли MAC на порту и осталась ли сотка
ssh admin@192.168.1.1 'robocfg show | grep "Port 3"'
# на Mac (USB-Ethernet Realtek): на какой скорости слинковался
ifconfig | awk '/^[a-z]/{ifc=$1} /100baseTX|1000baseT/{print ifc, $NF}'
```
**Результат:** Mac (USB-Ethernet Realtek, MAC `00:e0:4c:68:04:88`, интерфейс `en8`) на этом кабеле слинковался на **`100baseTX`**; роутер порт 3 дал `100FD`.
→ **Виноват кабель, а не ТВ.** Если бы ТВ был ограничен, Mac дал бы гигабит.
**Фикс:** заменить кабель на **CAT5e / CAT6** (проверить все 8 жил — обрыв одной пары роняет линк на 100). Если после замены кабеля сотка остаётся — смотреть порт роутера или порт ТВ.
> 📌 Тот же линк 100 Mbit/s у ТВ был отмечен ещё 2026-09-04 (см. таблицу устройств). Тест 20.09 подтвердил причину — **кабель**.
## Кастомный dnsmasq
Файл: `/jffs/configs/dnsmasq.conf.add`
+13 -2
View File
@@ -1,7 +1,7 @@
# Jellyfin: сервер старше БД — `no such column: p.Permission_Permissions_Guid`
> **Обнаружено:** 2026-09-20 на Kraken (RPi5/OMV, arm64, Docker).
> **Статус:** 🔴 **НЕ ЗАФИКСИРОВАНО** — диагноз подтверждён, фикс согласован, ждёт апрува Alex.
> **Статус:** ✅ **ЗАФИКСИРОВАНО 2026-09-20** — контейнер пересоздан на образе 12.1.0.0, jellyfin `healthy`, Alex подтвердил «Заработало». См. раздел «Результат» ниже.
> **Симптом:** `jellyfin` не подключается (`http://kraken:8096` → **503**), контейнер `Up` но `unhealthy`, health-check бесконечно пишет `Server is could not complete startup. Check logs.`
> **Связанные:** [[personal/tech/docker-data-root-mount-race]], [[family/how-to/kraken-access]], [[family/plans/kraken-backup-to-truenas]]
@@ -71,7 +71,7 @@ scp kraken:/tmp/jf.db /Users/admin/kraken-recovery/jellyfin-db/jellyfin.db
**Питфолл тега `latest`:** `docker inspect` показывает digest, откуда образ БЫЛ СКАЧАН, а не текущий `latest`. Локальный «latest» может быть сильно старше, чем `latest` в реестре. Проверять версию **внутри образа**: `docker run --rm --entrypoint sh jellyfin/jellyfin:latest -c '/jellyfin/jellyfin --version'`.
## Фикс (согласован с Alex, ЖДЁТ ВЫПОЛНЕНИЯ)
## Фикс (ВЫПОЛНЕН 2026-09-20)
**Миграцию вручную запустить НЕЛЬЗЯ и не нужно** — миграции уже применены (до 12.1.0.0), запускать нечего; даунгрейд схемы EF Core не поддерживает. Проблема не в БД, а в **образе контейнера**.
@@ -94,6 +94,17 @@ ssh kraken 'docker exec jellyfin sh -c "curl -s -o /dev/null -w \"%{http_code}\n
**Риск:** низкий. Данные (`/config`) не трогаются, пересоздаётся только контейнер. Бэкап БД обязателен — откатываться больше некуда.
## ✅ Результат (2026-09-20)
| Шаг | Факт |
|---|---|
| Бэкап БД | `/home/kraken/backups/jellyfin-recreate-20260920-165750/` — `jellyfin.db` (24.5 МБ) + `-wal` + `-shm` |
| Пересоздание | `docker compose up -d --force-recreate` → `Container jellyfin Recreated / Started`, rc=0 |
| Статус через 15 с | **`Up 15 seconds (healthy)`** — сразу healthy, без периода `starting` |
| Подтверждение Alex | «Заработало» |
> Контейнер теперь работает на образе `jellyfin/jellyfin:latest` = **12.1.0.0**, что согласовано с версией БД. Проблема `no such column` закрыта.
**Compose jellyfin** (`/srv/.../docker/jellyfin/docker-compose.yml`):
```yaml
image: jellyfin/jellyfin # без тега = latest