[2026-09-15] eagle: family/documents/vault-sync/README.md
This commit is contained in:
@@ -1,129 +0,0 @@
|
||||
---
|
||||
title: "🔄 Vault sync — как работает и как запустить"
|
||||
tags: [vault-sync, infrastructure, obsidian, syncthing, taiga]
|
||||
updated: 2026-09-15
|
||||
---
|
||||
|
||||
# 🔄 Vault sync — как работает и как запустить
|
||||
|
||||
> **Операционный документ.** Как правка из vault доезжает до телефона и что делать, если не доехала.
|
||||
> Инциденты — в этой же папке `family/documents/vault-sync/`.
|
||||
|
||||
---
|
||||
|
||||
## 1. Архитектура
|
||||
|
||||
```
|
||||
Mac ~/obsidian ──git push──▶ bare: /mnt/RED_2TB/storage/git/obsidian-vault.git
|
||||
(IS the remote, /vault.git внутри контейнера)
|
||||
│
|
||||
│ git merge
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ контейнер hermes-taiga · /opt/data/sync-vault.sh │
|
||||
│ ТРИ фазы: │
|
||||
│ ① taiga → /vault = .../storage/obsidian │
|
||||
│ ② syncthing → /obsidian-syncthing ← SyncThing → 📱 │
|
||||
│ ③ syncthing-out → push обратно в bare │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Спайс:** `/vault` — sparse-checkout (`personal/`, `family/`, `.obsidian/`). Пуш из taiga-фазы — только эти пути.
|
||||
|
||||
| Путь | Что это |
|
||||
|---|---|
|
||||
| `~/obsidian` (Mac) | рабочий клон vault (править тут) |
|
||||
| `/mnt/RED_2TB/storage/git/obsidian-vault.git` | **bare-репозиторий = remote** |
|
||||
| `/mnt/RED_2TB/storage/obsidian` | `/vault` — taiga-воркtree (sparse) |
|
||||
| `/mnt/RED_2TB/storage/obsidian-syncthing` | **раздаётся SyncThing'ом на телефон** |
|
||||
| `/opt/data/sync-vault.sh` (в контейнере) | сам скрипт синка |
|
||||
|
||||
---
|
||||
|
||||
## 2. 🔴 ГЛАВНОЕ: `git push` НЕ доводит правку до телефона
|
||||
|
||||
**Факт, стоивший времени 2026-09-15.** Пуш на bare — это только полдела. До телефона доводит **cron-скрипт `sync-vault.sh` внутри контейнера `hermes-taiga`**.
|
||||
|
||||
Если после правки телефона не видно — **причина почти всегда в этом**: синк не прогонялся.
|
||||
|
||||
---
|
||||
|
||||
## 3. Запустить синк вручную
|
||||
|
||||
```bash
|
||||
ssh truenas_admin@mallexxx.duckdns.org \
|
||||
'docker exec hermes-taiga bash /opt/data/sync-vault.sh 2>&1 | tail -20'
|
||||
```
|
||||
|
||||
**Признак успеха** — три строки:
|
||||
```
|
||||
[<TS>] [taiga] ... Pushed ✓
|
||||
[<TS>] [syncthing] Syncthing: synced with bare repo ✓ / Pushed ✓
|
||||
[<TS>] [syncthing-out] Pushed ✓
|
||||
```
|
||||
|
||||
**Если не видишь — SyncThing раздаст в течение минуты.**
|
||||
|
||||
---
|
||||
|
||||
## 4. Cron-задача
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Название | `sync-vault` |
|
||||
| id | `29851c413903` |
|
||||
| Расписание | `*/5 * * * *` |
|
||||
| prompt | `bash /opt/data/sync-vault.sh >> /tmp/vault-sync.log 2>&1` |
|
||||
| Живёт | в контейнере `hermes-taiga` (не на Mac!) |
|
||||
| Лог | `/tmp/vault-sync.log` (в контейнере) |
|
||||
|
||||
> ⚠️ Задача оформлена как **prompt** (LLM-раунд), поэтому наследует риски провайдера: таймауты блокируют очередь, а ~6 % тиков завершаются `completed` **без запуска скрипта**. Данные не теряются (git идемпотентен), но каденция ниже номинала. Разбор — [[2026-09-14-cron-api-timeout-sync-outage]].
|
||||
|
||||
**Смотреть лог:**
|
||||
```bash
|
||||
ssh truenas_admin@mallexxx.duckdns.org 'docker exec hermes-taiga tail -12 /tmp/vault-sync.log'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Проверить, что всё сошлось
|
||||
|
||||
Все три репозитория должны быть на **одном коммите**:
|
||||
|
||||
```bash
|
||||
ssh truenas_admin@mallexxx.duckdns.org '
|
||||
cd /mnt/RED_2TB/storage/obsidian-syncthing && echo -n "syncthing: " && git log --oneline -1
|
||||
cd /mnt/RED_2TB/storage/obsidian && echo -n "vault: " && git log --oneline -1
|
||||
cd /mnt/RED_2TB/storage/git/obsidian-vault.git && echo -n "bare: " && git log --oneline -1 main
|
||||
'
|
||||
```
|
||||
|
||||
На Mac: `cd ~/obsidian && git log --oneline -1`
|
||||
|
||||
**Рабочие деревья должны быть чистыми:** `git status --porcelain` → пусто.
|
||||
|
||||
---
|
||||
|
||||
## 6. Скрипт `sync-vault-taiga.sh` (локальная копия)
|
||||
|
||||
Локальная копия для чтения: `~/.hermes/hermes-whale/sync-vault-taiga.sh` (3342 б, 2026-05-29).
|
||||
Описание из шапки скрипта:
|
||||
- `taiga@hermes` — пушит Hermes-агент
|
||||
- `syncthing@hermes` — пушит телефон через SyncThing
|
||||
- `core.fileMode false` (иначе chmod-варнинги root vs UID 950 на ZFS)
|
||||
|
||||
**Что делает по шагам:**
|
||||
1. **taiga:** коммит локальных изменений → `git merge main` (сюда пушит Eagle) → коммит → push в bare.
|
||||
2. **syncthing:** коммит локальных (от телефона) → `git fetch origin main` → `merge origin/main` → `push origin main`.
|
||||
3. **syncthing-out:** финальный push.
|
||||
|
||||
Конфликты скрипт **не разрешает** — оставляет маркеры и коммитит (осознанное решение).
|
||||
|
||||
---
|
||||
|
||||
## Связанные
|
||||
|
||||
- [[family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage]] — разрыв синка из-за таймаутов LLM
|
||||
- [[family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure]] — потеря git-identity
|
||||
- [[family/documents/vault-sync/2026-08-31-syncthing-truenas-incident]] — инцидент SyncThing
|
||||
- [[family/how-to/truenas-infrastructure]] — инфраструктура TrueNAS
|
||||
Reference in New Issue
Block a user