[2026-06-25] taiga-vault: family/how-to/htpc-emulators-setup.md family/how-to/htpc-gaming-plans.md family/how-to/kraken-access.md family/how-to/openmediavault-rpi5.md family/how-to/time-machine.md family/how-to/wireguard-vpn.md personal/documents/todo-list.md personal/plans/extract-stable-prompt-blocks.md personal/plans/hermes-whale-system-prompt.md personal/plans/thread-scoped-memory.md
This commit is contained in:
@@ -393,6 +393,10 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus
|
||||
|
||||
## Ryujinx (Nintendo Switch)
|
||||
|
||||
<<<<<<< HEAD
|
||||
**Версия:** 1.3.3 (Ryubing fork, Flatpak `io.github.ryubing.Ryujinx`)
|
||||
**Статус:** ✅ Работает (22.06.2026)
|
||||
=======
|
||||
**Версия:** 1.3.3 (Ryubing fork, Flatpak `io.github.ryubing.Ryujinx`)
|
||||
**Статус:** ✅ Работает (10.06.2026)
|
||||
|
||||
@@ -446,63 +450,82 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus
|
||||
|
||||
**Transmission:** `/data/Switch Roms` (case-sensitive, с пробелом) мапится в `/run/media/system/Data/Switch Roms/` через mount `/data` → `/run/media/system/Data`
|
||||
|
||||
>>>>>>> nas/main
|
||||
→ Подробно: [[switch-emulation-rom-infra]]
|
||||
|
||||
### ⚠️ Текущий статус — 21.06.2026
|
||||
### Компоненты
|
||||
|
||||
**Используется:** Flatpak `io.github.ryubing.Ryujinx` 1.3.3 stable.
|
||||
**AppImage Canary 1.3.287** (`~/Applications/publish/Ryujinx`) — переименован в `Ryujinx.sh.bak`, чтобы launcher не подхватывал его (в 1.3.287 баг `ArgumentOutOfRangeException` в `CheckLaunchState()`, PR #7123/#7116).
|
||||
| Компонент | Статус | Путь |
|
||||
|-----------|--------|------|
|
||||
| prod.keys | ✅ 12KB (22.1.0) | `~/.var/app/io.github.ryubing.Ryujinx/data/Ryujinx/system/` |
|
||||
| title.keys | ❌ отсутствует | — |
|
||||
| Firmware | ✅ 19.0.1 (229 .nca) | установлен через GUI |
|
||||
| ROMs на диске | ✅ | `/run/media/system/Data/Switch Roms/` |
|
||||
| Symlinks (плоские) | ✅ | `~/Emulation/roms/switch/` |
|
||||
| В Steam (shortcuts.vdf) | ✅ 38 игр | launchoptions → плоские симлинки |
|
||||
| Постеры SteamGridDB | ✅ все | `~/.steam/steam/userdata/147839491/config/grid/` |
|
||||
|
||||
**Проблема:** после копирования конфигов из AppImage → flatpak, Ryujinx просит prod.keys (хотя файл лежит в `data/Ryujinx/system/prod.keys`, 12KB). firmware 19.0.1 есть (229 .nca). `title.keys` отсутствует.
|
||||
**Статус:** выясняется — возможно mismatch версий prod.keys (22.1.0) и firmware (19.0.1), либо flatpak sandbox не видит файлы.
|
||||
### Launcher
|
||||
|
||||
**Launcher:** `~/Emulation/tools/launchers/ryujinx.sh` — ищет `~/Applications/publish/Ryujinx.sh` → не находит (`.bak`) → запускает `flatpak run io.github.ryubing.Ryujinx`.
|
||||
**Логирование:** `~/ryujinx-launch.log` — PWD, ARGS, EXE, EXIT_CODE.
|
||||
`~/Emulation/tools/launchers/ryujinx.sh` → ищет `~/Applications/publish/Ryujinx.sh` → не находит (`.bak`) → `flatpak run io.github.ryubing.Ryujinx`. Лог: `~/ryujinx-launch.log`.
|
||||
|
||||
**Ryujinx не поддерживает NSZ нативно** — только NSP и XCI. NSZ нужно конвертировать в NSP.
|
||||
AppImage Canary 1.3.287 (`~/Applications/publish/Ryujinx`) переименован в `.bak` — баг `ArgumentOutOfRangeException` в `CheckLaunchState()`.
|
||||
|
||||
**NSZ → NSP конвертация (22.06.2026):**
|
||||
Установлен `nsz` CLI (v4.6) на HTPC через `pip3 install nsz`.
|
||||
**Правильная команда:** `nsz -D file.nsz` (decompress mode).
|
||||
### NSZ конвертация
|
||||
|
||||
Проверено на The Disney Afternoon Collection — `nsz -D` верифицировал все NCA хеши (`[VERIFIED]`), файл 407MB PFS0 (7 files), работает в Ryujinx ✅.
|
||||
**Ryujinx не поддерживает NSZ** — только NSP и XCI. Установлен `nsz` CLI (v4.6) на HTPC: `pip3 install nsz`.
|
||||
Команда: `nsz -D file.nsz`. NSP создаётся рядом с NSZ. После:
|
||||
1. Переименовать NSP в slug (короткое имя без пробелов/скобок)
|
||||
2. Создать симлинк: `ln -sf "/run/media/system/Data/Switch Roms/…/slug.nsp" ~/Emulation/roms/switch/slug.nsp`
|
||||
|
||||
NSP создаётся рядом с NSZ, с тем же длинным именем (со скобками/размером). После декомпрессии:
|
||||
1. Переименовать NSP в slug (короткое имя без пробелов/скобок) — `dk_country_returns_hd.nsp` и т.д.
|
||||
2. Создать симлинк: `ln -sf /run/media/system/Data/Switch\ Roms/…/slug.nsp ~/Emulation/roms/switch/slug.nsp`
|
||||
### Игры
|
||||
|
||||
**Статус:**
|
||||
- The Disney Afternoon Collection — ✅ конвертирован, работает
|
||||
- **NSZ на конвертацию (23 игры):**
|
||||
| Игра | ROM slug | Статус | Формат | Steam |
|
||||
|------|----------|--------|--------|-------|
|
||||
| Animal Crossing New Horizons | `animal_crossing.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Donkey Kong Country Tropical Freeze | `donkey_kong.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Super Mario Odyssey | `mario_odyssey.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Mario Kart 8 Deluxe | `mario_kart_8.nsp` | ✅ работает | NSP | ✅ |
|
||||
| The Legend of Zelda: Breath of the Wild | `zelda_botw.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Spyro Reignited Trilogy | `spyro_reignited_trilogy.nsp` | ✅ работает | NSP | ✅ |
|
||||
| The Disney Afternoon Collection | `the_disney_afternoon_collection.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Sam & Max Save the World | `sam_and_max_save_the_world.nsp` | ✅ работает | NSP | ✅ |
|
||||
| It Takes Two | `it_takes_two.nsp` | ⚠️ работает, но как Friends Pass (требуется полная версия) | NSP | ✅ |
|
||||
| Little Nightmares | `little_nightmares.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Little Nightmares III | `little_nightmares_iii.nsp` | ✅ работает | NSP | ✅ |
|
||||
| Luigi Mansion 3 | `luigi_mansion_3.nsp` | ❓ не тестировалась | NSP | ✅ |
|
||||
| Sonic Mania | `sonic_mania.nsp` | ❓ не тестировалась | NSP | ✅ |
|
||||
| Super Mario 3D All-Stars | `super_mario_3d_all_stars.nsp` | ❓ не тестировалась | NSP | ✅ |
|
||||
| Super Mario Bros. Wonder | `super_mario_bros__wonder.nsp` | ❓ не тестировалась | NSP | ✅ |
|
||||
| Super Mario Party | `super_mario_party.nsp` | ❓ не тестировалась | NSP | ✅ |
|
||||
| Majora's Mask (2Ship2Harkinian) | `majoras_mask.nsp` | ❌ PAL_SEHException (GPU crash) | NSP | ✅ |
|
||||
| Constance | `constance.nsp` | ❌ Application not found | NSP | — |
|
||||
| Hollow Knight | `hollow_knight.nsp` | ❌ битый (hash error) | NSP | ✅ |
|
||||
| Donkey Kong Country Returns HD | `donkey_kong_country_returns_hd.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Hollow Knight: Silksong | `hollow_knight__silksong.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Ori and the Will of the Wisps | `ori_and_the_will_of_the_wisps.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Plants vs. Zombies: Replanted | `plants_vs__zombies__replanted.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Super Mario 3D World + Bowser Fury | `super_mario_3d_world___bowser_fury.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Super Smash Bros. Ultimate | `smash_ultimate.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Unravel Two | `unravel_two.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Vasilisa and Baba Yaga | `vasilisa_and_baba_yaga.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Hunting Simulator 2 | `hunting_simulator_2.nsp` | ✅ NSP готов | NSP | ✅ |
|
||||
| Carnivores Dinosaur Hunt | `carnivores_dinosaur_hunt.nsp` | ✅ работает | NSP | ✅ |
|
||||
| America Wild Hunting | `america_wild_hunting.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Animal Hunting 3D | `animal_hunting_3d.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Best Sniper Legacy Dino Hunt Shooter 3D | `best_sniper_legacy.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Big Buck Hunter Arcade | `big_buck_hunter_arcade.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Big Buck Hunter Ultimate Trophy | `big_buck_hunter_ultimate_trophy.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Cabela's The Hunt Championship Edition | `cabelas_the_hunt.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Deer Drive Legends | `deer_drive_legends.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Duck Hunting Challenge | `duck_hunting_challenge.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Hunt | `hunt.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Hunter Simulator Wild Hunting | `hunter_simulator_wild_hunting.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Hunting Simulator | `hunting_simulator.nsp` | ✅ NSP готов | NSP | — |
|
||||
| Werewolf Hunter Survive the Howl | `werewolf_hunter.nsp` | ✅ NSP готов | NSP | — |
|
||||
|
||||
**В Steam (10):**
|
||||
1. Donkey Kong Country Returns HD
|
||||
2. Hollow Knight: Silksong
|
||||
3. Ori and the Will of the Wisps
|
||||
4. Plants vs. Zombies: Replanted
|
||||
5. Super Mario 3D World + Bowser Fury
|
||||
6. Super Smash Bros. Ultimate
|
||||
7. Unravel Two
|
||||
8. Vasilisa and Baba Yaga
|
||||
9. Hunting Simulator 2
|
||||
10. Carnivores Dinosaur Hunt
|
||||
|
||||
**Не в Steam, в 14 Hunting games (12):**
|
||||
11. America Wild Hunting
|
||||
12. Animal Hunting 3D
|
||||
13. Best Sniper Legacy Dino Hunt Shooter 3D
|
||||
14. Big Buck Hunter Arcade
|
||||
15. Big Buck Hunter Ultimate Trophy
|
||||
16. Cabela's The Hunt Championship Edition
|
||||
17. Deer Drive Legends
|
||||
18. Duck Hunting Challenge
|
||||
19. Hunt
|
||||
20. Hunter Simulator Wild Hunting
|
||||
21. Hunting Simulator
|
||||
22. Werewolf Hunter Survive the Howl
|
||||
|
||||
**Битый (Hash error):**
|
||||
- Hollow Knight — ❌
|
||||
**Symlink схема:** плоские симлинки без пробелов в `~/Emulation/roms/switch/` → `/run/media/system/Data/Switch Roms/...`
|
||||
**Transmission:** `/data/Switch Roms` мапится в `/run/media/system/Data/Switch Roms/` через mount `/data` → `/run/media/system/Data`
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -55,6 +55,9 @@
|
||||
→ **Полное research + план действий: [[switch-emulation-rom-infra]]**
|
||||
|
||||
Приоритет 1: **Switch (DKC: Tropical Freeze)** — Ryujinx (GreemDev fork) через EmuDeck
|
||||
|
||||
### TODO:
|
||||
- [ ] It Takes Two — смержить DLC Full Game (`010092A0172E5001`) с base NSP (сейчас работает как Friends Pass)
|
||||
Приоритет 2: **Wii (DKC Returns оригинал)** — Dolphin через EmuDeck (проще, без keys)
|
||||
|
||||
**Важно:** оригинальный Ryujinx закрылся (окт. 2024). Актуальный — GreemDev fork. Eden — для Android.
|
||||
|
||||
@@ -1,99 +1,51 @@
|
||||
# Kraken — Внешний доступ
|
||||
|
||||
> Обновлено: 2026-05-13
|
||||
> Обновлено: 2026-06-24
|
||||
|
||||
## SSH с любой машины
|
||||
## Как зайти
|
||||
|
||||
**Контейнер hermes-kraken:**
|
||||
- Маппинг `/home/kraken/.ssh:/opt/data/.ssh:ro` в docker-compose.yml
|
||||
- Кастомный `/etc/passwd` с пользователем `kraken:x:1000:1000` (файл `passwd-with-kraken` рядом с compose)
|
||||
- `HERMES_UID=1000 HERMES_GID=1000` чтоб entrypoint ремапил пользователя
|
||||
- SSH из контейнера: `ssh -i /opt/data/.ssh/id_ed25519 kraken@localhost`
|
||||
- Ключ `kraken` добавлен в `authorized_keys` на хосте
|
||||
Везде `ssh kraken`. Резолвится через `~/.ssh/config` на Eagle:
|
||||
|
||||
`~/.ssh/config` на Eagle:
|
||||
```
|
||||
Host kraken
|
||||
HostName kraken
|
||||
User kraken
|
||||
Port 22
|
||||
IdentityFile ~/.ssh/id_rsa
|
||||
StrictHostKeyChecking no
|
||||
ProxyCommand bash -c 'if ifconfig | grep -q 10.99.0.2; then nc 10.99.1.2 22; else nc kraken 22; fi'
|
||||
```
|
||||
- **Дома** — напрямую по LAN (`192.168.1.15`)
|
||||
- **Снаружи** — через WireGuard (`10.99.1.2`, VPN поднимается автоматически `wg-auto.sh`)
|
||||
|
||||
**SSH напрямую по LAN:**
|
||||
```bash
|
||||
ssh kraken@kraken
|
||||
```
|
||||
WireGuard split-tunnel: Eagle (10.99.0.2) ↔ VPS ↔ Kraken (10.99.1.2). Подробнее: [[wireguard-vpn]].
|
||||
|
||||
**SSH через VPS** (reverse tunnel, порт 2223):
|
||||
```bash
|
||||
ssh -J root@91.207.28.205 kraken@127.0.0.1 -p 2223
|
||||
```
|
||||
## Portainer (локально)
|
||||
|
||||
`kraken.qentra.top` — Cloudflare Tunnel, только HTTP (Hermes API), SSH не работает.
|
||||
|
||||
`kraken.qentra.top` — Cloudflare Tunnel, только HTTP (Hermes API), SSH не работает.
|
||||
|
||||
---
|
||||
|
||||
## Как устроен туннель
|
||||
|
||||
Кракен держит постоянный **reverse SSH tunnel** на VPS через autossh:
|
||||
|
||||
```
|
||||
Кракен (RPi 5, 192.168.1.15)
|
||||
└── autossh → ssh -R 2223:localhost:22 root@91.207.28.205
|
||||
↓
|
||||
VPS (91.207.28.205)
|
||||
слушает :2223 → перенаправляет на Кракен:22
|
||||
```
|
||||
|
||||
Аналогично Тайге (у неё порт 2222).
|
||||
|
||||
### Управление туннелем на Кракене
|
||||
|
||||
```bash
|
||||
sudo systemctl status kraken-tunnel
|
||||
sudo systemctl restart kraken-tunnel
|
||||
sudo journalctl -u kraken-tunnel -n 20
|
||||
```
|
||||
|
||||
Файл сервиса: `/etc/systemd/system/kraken-tunnel.service`
|
||||
SSH-ключ Кракена: `/home/kraken/.ssh/id_ed25519`
|
||||
Публичный ключ добавлен в `/root/.ssh/authorized_keys` на VPS.
|
||||
|
||||
### Проверить с VPS
|
||||
|
||||
```bash
|
||||
ssh root@91.207.28.205 "ss -tlnp | grep 2223"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cloudflared (для будущих сервисов)
|
||||
|
||||
Контейнер `cloudflared` запущен на Кракене (`unless-stopped`), туннель `kraken` активен в CF Zero Trust.
|
||||
Hostname: `kraken.qentra.top → HTTP → localhost:8642` (Hermes API).
|
||||
|
||||
---
|
||||
|
||||
## Portainer API (локально)
|
||||
`http://kraken:9000`
|
||||
|
||||
API:
|
||||
```bash
|
||||
BASE=http://localhost:9000
|
||||
KEY="ptr_AJY+Ba9A7f6pcAHZfDD5koU4stkKgJCdbTEXLDLxn0g="
|
||||
EP=3 # endpoint ID на Кракене = 3, не 1!
|
||||
|
||||
curl -s -H "X-API-Key: $KEY" "$BASE/api/endpoints/$EP/docker/containers/json?all=true" \
|
||||
| jq '[.[] | {name: .Names[0], status: .Status}]'
|
||||
```
|
||||
|
||||
---
|
||||
## Hermes API
|
||||
|
||||
`http://kraken:8642/v1/chat/completions` — OpenAI-compatible endpoint.
|
||||
|
||||
## Docker контейнеры (2026-06-24)
|
||||
|
||||
| Имя | Заметки |
|
||||
|-----|---------|
|
||||
| flaresolverr | |
|
||||
| hermes-kraken | |
|
||||
| homeassistant | |
|
||||
| jellyfin | |
|
||||
| portainer | |
|
||||
| prowlarr | |
|
||||
| radarr | |
|
||||
| rclone | |
|
||||
| sonarr | |
|
||||
| transmission | |
|
||||
| cloudflared | |
|
||||
| watchtower | |
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[kraken-portainer-access]] — полная инструкция по деплою cloudflared через Portainer
|
||||
- [[openmediavault-rpi5]] — настройка Кракена (Docker, Hermes, структура папок)
|
||||
- [[truenas-remote-access-reverse-proxy]] — аналогичный туннель для Тайги
|
||||
- [[kraken-network]] — SSH, WG топология
|
||||
- [[wireguard-vpn]] — полное описание WG
|
||||
- [[kraken-portainer-access]]
|
||||
- [[openmediavault-rpi5]]
|
||||
|
||||
@@ -5,7 +5,7 @@ tags:
|
||||
- openmediavault
|
||||
- how-to
|
||||
created: '2026-05-11'
|
||||
updated: '2026-05-12'
|
||||
updated: '2026-06-24'
|
||||
status: hermes-pending
|
||||
ip: 192.168.1.15
|
||||
---
|
||||
@@ -26,7 +26,7 @@ ip: 192.168.1.15
|
||||
| 6 — USB HDD | ✅ | 12TB Seagate ST12000NT001, EXT4, UUID `49e8f586-3839-4c5d-a1e1-58bfc3579ade`, смонтирован через OMV в `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade` |
|
||||
| 7 — omv-extras + Docker | ✅ | omv-extras 7.0.6, Docker 29.4.3, kraken в группе docker |
|
||||
| 8 — Контейнеры | ✅ | Все через отдельные docker compose, конфиги на HDD (см. ниже) |
|
||||
| 9 — Time Machine share | ✅ | `mbentley/timemachine:smb`, расписание 10:00-22:00 GMT+6, HDD/timemachine |
|
||||
| 9 — Time Machine share | ✅ | Samba на хосте (не Docker), шара TimeMachine, квота 2.8 TiB |
|
||||
| 10 — Перенос данных | N/A | не входит в этот гайд |
|
||||
| 11 — Hermes агент Кракен | ✅ | Запущен, Telegram @kraken_htpc_bot живой, mcpvault ✅, obsidian RW, SOUL.md, browser/Playwright ✅, Spotify ✅ |
|
||||
| 11а — Docker на HDD | ✅ | data-root + containerd перенесены на HDD через symlink, SD освободилась до 22% |
|
||||
@@ -276,11 +276,14 @@ read only = no
|
||||
inherit acls = yes
|
||||
fruit:time machine = yes
|
||||
vfs objects = catia fruit streams_xattr
|
||||
fruit:time machine max size = 3000000000000 # квота ~2.8 TiB
|
||||
```
|
||||
|
||||
> **TM квота:** установлена 2026-06-24 — `3000000000000` байт (~2.8 TiB). Раньше было `0` (безлимит), из-за чего TM занял 2.2T из 11T HDD. При достижении квоты Mac начнёт удалять старые снепшоты.
|
||||
|
||||
**Credentials:**
|
||||
- Пользователь: `timemachine`
|
||||
- Пароль: сохранён в bitwarden (или уточнить у Alex)
|
||||
- Пароль: `timemachine`
|
||||
|
||||
**Подключение с Mac:**
|
||||
1. Finder → `⌘K` → `smb://kraken`
|
||||
@@ -462,6 +465,67 @@ docker inspect hermes-kraken --format 'Status={{.State.Status}} Restarts={{.Rest
|
||||
|
||||
---
|
||||
|
||||
## Перенаправление записи с SD на HDD (2026-06-24)
|
||||
|
||||
**Проблема (2026-06-24):** Kraken крашился — SD-карта забита под 99% (14G/14G, 40MB свободно). folder2ram держит `/var/log` в tmpfs, но при ребуте/shutdown OMV сбрасывает tmpfs на SD.
|
||||
|
||||
**Решение:** bind-mount всех пишущихся каталогов на HDD.
|
||||
|
||||
| Каталог | Цель на HDD | Метод |
|
||||
|---------|-------------|-------|
|
||||
| `/var/folder2ram/var/log` | `.../var-log` | fstab bind |
|
||||
| `/var/cache/apt` | `.../apt-cache` | fstab bind |
|
||||
| `/var/log/journal` | `.../journal` | fstab bind |
|
||||
| Docker data-root | `.../docker-data` | daemon.json |
|
||||
| containerd | `.../containerd` | symlink |
|
||||
|
||||
### Команды
|
||||
|
||||
```bash
|
||||
HDD="/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade"
|
||||
|
||||
# folder2ram/var/log
|
||||
sudo mkdir -p "$HDD/var-log"
|
||||
sudo rsync -a /var/folder2ram/var/log/ "$HDD/var-log/"
|
||||
sudo mount --bind "$HDD/var-log" /var/folder2ram/var/log
|
||||
echo "$HDD/var-log /var/folder2ram/var/log none bind,nofail 0 0" | sudo tee -a /etc/fstab
|
||||
|
||||
# Apt-кэш
|
||||
sudo mkdir -p "$HDD/apt-cache"
|
||||
sudo rsync -a /var/cache/apt/ "$HDD/apt-cache/"
|
||||
sudo mount --bind "$HDD/apt-cache" /var/cache/apt
|
||||
echo "$HDD/apt-cache /var/cache/apt none bind,nofail 0 0" | sudo tee -a /etc/fstab
|
||||
|
||||
# Journald
|
||||
sudo mkdir -p "$HDD/journal"
|
||||
sudo rsync -a /var/log/journal/ "$HDD/journal/" 2>/dev/null
|
||||
sudo mount --bind "$HDD/journal" /var/log/journal
|
||||
echo "$HDD/journal /var/log/journal none bind,nofail 0 0" | sudo tee -a /etc/fstab
|
||||
sudo systemctl restart systemd-journald
|
||||
```
|
||||
|
||||
Проверка:
|
||||
```bash
|
||||
df -h /var/folder2ram/var/log /var/log/journal /var/cache/apt
|
||||
# Все должны показывать /dev/sda1 (HDD), не mmcblk0 (SD)
|
||||
```
|
||||
|
||||
> ⚠️ OMV может перезаписывать `/etc/fstab` при `omv-salt deploy run`. Если bind пропадёт — перепроверить.
|
||||
|
||||
### df vs du — расхождение на SD
|
||||
|
||||
`df` = 13G/14G, `du -shx /` = 3.6G. Разница ~10G — **блоки ext4, занятые физически на NAND но не привязанные к файлам** (эффект отсутствия TRIM). На SD это норма.
|
||||
|
||||
Остаточная запись на SD после переносов: `/etc`, `/var/lib/samba` (8 MB), `/home/kraken` (uv кэш), dpkg — стабильно.
|
||||
|
||||
### SD backup
|
||||
|
||||
Скрипт: `/usr/local/bin/sd-backup.sh` — образ SD на HDD, хранит 3 последних копии.
|
||||
```bash
|
||||
sudo /usr/local/bin/sd-backup.sh # ~11G, ~11 мин
|
||||
```
|
||||
Хранится: `$HDD/backup/sd-card/kraken-sd-*.img.gz`. Ротация: auto-removes oldest.
|
||||
|
||||
## Шаг 11а — Docker и containerd на HDD
|
||||
|
||||
**Статус: ✅ (2026-05-13)**
|
||||
|
||||
@@ -10,16 +10,20 @@ Destination: `smb://timemachine@kraken/TimeMachine`
|
||||
Пароль: `smbpasswd -a timemachine`
|
||||
passdb.tdb персистентен на хосте — пароль не слетает при рестарте
|
||||
|
||||
Бандл лежит на TrueNAS, смонтирован по SMB в Кракен.
|
||||
Бандл лежит на локальном HDD Кракена: `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/timemachine/`
|
||||
|
||||
## Конфигурация OMV Samba
|
||||
|
||||
Шара добавлена через `extraoptions` в `conf.service.smb`:
|
||||
```
|
||||
[TimeMachine]
|
||||
path = /mnt/timemachine
|
||||
valid users = timemachine
|
||||
...
|
||||
path = /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/timemachine
|
||||
browseable = yes
|
||||
read only = no
|
||||
valid users = timemachine
|
||||
vfs objects = fruit streams_xattr
|
||||
fruit:time machine = yes
|
||||
fruit:time machine max size = 3000000000000
|
||||
```
|
||||
|
||||
Применить конфиг:
|
||||
@@ -45,9 +49,33 @@ sudo tmutil setdestination -p smb://timemachine@kraken/TimeMachine
|
||||
## Связанные заметки
|
||||
|
||||
- [[family/how-to/wireguard-vpn|WireGuard VPN]] — туннель для бэкапа вне дома
|
||||
- [[family/how-to/kraken-network|Kraken Network]] — ssh, сетевые адреса
|
||||
|
||||
## Важно: связка WireGuard + SMB
|
||||
|
||||
Когда mbp-black не дома (IP не `192.168.1.x`), `kraken` резолвится через VPS dnsmasq
|
||||
в `10.99.1.2` (WG адрес). SMB работает через туннель, но может быть медленнее.
|
||||
|
||||
Проверка доступа через WG с mbp-black:
|
||||
```bash
|
||||
smbutil view //timemachine@kraken
|
||||
```
|
||||
|
||||
Если дома — лучше через LAN (`smb://192.168.1.15/TimeMachine`), быстрее.
|
||||
|
||||
## History
|
||||
|
||||
- **До 2026-06-02**: использовался Docker-контейнер `mbentley/timemachine:smb`.
|
||||
Контейнер снесён, Samba перенесена на хост OMV из-за проблем с persisting паролей
|
||||
(tdbsam не сохранялся, `ntlm auth = no` ломал backupd при reconnect).
|
||||
- **2026-06-24**: проверена доступность smbd и бандла.
|
||||
- **Проблема:** пароль `timemachine` не проходит при подключении через WireGuard (mbp-black
|
||||
вне дома, IP `10.120.1.143`, Kraken резолвится в WG `10.99.1.2`). `mount_smbfs` и `smbutil`
|
||||
выдают `Authentication error`.
|
||||
- **Проверено на Kraken:** smbd слушает на `0.0.0.0:445`, TCP/445 через WG открыт,
|
||||
`smbstatus` показывает активных сессий 0. Samba конфигурация: `disable netbios = yes`,
|
||||
`log level = 0` (логи в /var/log/samba/log.smbd пустые — запросы аутентификации даже
|
||||
не доходят до smbd, значит проблема на клиентской стороне).
|
||||
- **Диагностика не завершена** — причина Authentication error не выяснена.
|
||||
- **Доки обновлены:** убрано упоминание TrueNAS, прописан прямой пароль `timemachine`
|
||||
в credentials в обоих документах (`time-machine.md` и `openmediavault-rpi5.md`).
|
||||
|
||||
@@ -55,7 +55,8 @@ Destination обновлён:
|
||||
- Старый: `smb://timemachine@kraken._smb._tcp.local./TimeMachine` (mDNS, не работает)
|
||||
- Новый: `smb://timemachine@kraken/TimeMachine` (VPN DNS ✅)
|
||||
|
||||
Контейнер: `mbentley/timemachine:smb` на Кракене, работает постоянно (`restart: unless-stopped`).
|
||||
Samba работает на **хосте OMV** (не в Docker-контейнере). См. [[family/how-to/time-machine]].
|
||||
Контейнер `mbentley/timemachine:smb` больше не используется.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user