Files
obsidian-vault/family/how-to/obsidian-sync.md
T

111 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- obsidian
- sync
- git
- how-to
created: '2026-05-13'
updated: '2026-05-13'
status: active
---
# Obsidian Sync — Eagle ↔ Taiga ↔ Kraken
**Статус:** ✅ работает на всех 3 узлах (протестировано 2026-05-13, двусторонний sync с конфликтами)
## Архитектура
```
Eagle (Mac, ~/obsidian — полный vault)
│ push/pull via SSH
TrueNAS bare repo
mallexxx.duckdns.org:/mnt/RED_2TB/storage/git/obsidian-vault.git
├── Taiga (sparse: personal/ family/)
│ vault: /mnt/RED_2TB/docker/hermes/vault
│ скрипт на хосте TrueNAS: ~/sync-vault.sh
└── Kraken (sparse: personal/ family/)
vault: ~/obsidian
скрипт: ~/scripts/sync-vault.sh
```
## Узлы
| Узел | Vault путь | Scope | Скрипт | Крон |
|------|-----------|-------|--------|------|
| Eagle | `~/obsidian` | full vault | `~/scripts/sync-vault.sh` | `0 * * * *` (Hermes cron job) |
| Kraken | `~/obsidian` | sparse: `personal/ family/` | `~/scripts/sync-vault.sh` | `0 * * * *` (crontab) |
| Taiga | `/mnt/RED_2TB/docker/hermes/vault` | sparse: `personal/ family/` | `~/sync-vault.sh` (на хосте!) | `0 * * * *` (Hermes cron job) |
> ⚠️ **Taiga**: скрипт запускается на **хосте TrueNAS** (не внутри контейнера hermes-taiga).
> Причина: ZFS ACL дают доступ к bare repo только пользователю `truenas_admin`.
> Vault примонтирован в контейнер как `/vault:rw` из `/mnt/RED_2TB/docker/hermes/vault`.
## Логика sync (одинакова на всех 3)
```
1. git stash (если есть локальные изменения)
2. git fetch origin main
3. git merge origin/main --no-edit
└─ при конфликте: git add -A, PULL_OK=conflict
4. git stash pop (если был stash)
└─ при конфликте pop: git add -A
5. git add -A && git commit (если есть изменения — staged ИЛИ unstaged ИЛИ untracked)
6. git push origin main
```
**Конфликты:** не теряются — остаются в файлах как conflict markers, коммитятся с пометкой `"conflict markers present"`. Ручного разрешения не требуется для текстовых заметок.
## Скрипты — детали
### Eagle: `~/scripts/sync-vault.sh`
- Дополнительно: генерирует commit message через `claude -p` (если claude доступен)
- Remote name: `nas` (не `origin`)
- git user: глобальный (`admin@eagle`)
### Kraken: `~/scripts/sync-vault.sh`
- git user задан в скрипте: `kraken@hermes` / `Kraken`
- Переменные: `VAULT_DIR` (default: `~/obsidian`), `REMOTE_URL` (default: `origin`)
- Sparse checkout: `personal/ family/` (задан при инициализации vault)
### Taiga: `~/sync-vault.sh`
- git user задан в скрипте: `taiga@hermes` / `Taiga`
- `git config core.fileMode false` — ZFS не сохраняет exec bits
- Hardcoded paths: vault=`/mnt/RED_2TB/docker/hermes/vault`, remote=`file:///mnt/RED_2TB/storage/git/obsidian-vault.git`
## SSH ключи
| Узел | Ключ | Добавлен в authorized_keys |
|------|------|--------------------------|
| Eagle | `~/.ssh/id_rsa` | ✅ TrueNAS (`truenas_admin`) |
| Kraken | `~/.ssh/id_rsa` | ✅ TrueNAS (`truenas_admin`) |
| Taiga | file:// (локальный) | — (не нужен) |
## Obsidian MCP
| Узел | Команда | Vault |
|------|---------|-------|
| Eagle | `/opt/homebrew/bin/obsidian-mcp ~/obsidian` | full |
| Kraken | `npx obsidian-mcp /home/kraken/obsidian` | sparse |
| Taiga | `npx obsidian-mcp /vault` | sparse (контейнерный путь) |
## Диагностика
```bash
# Проверить последний sync
ssh kraken@192.168.1.14 "tail -5 /tmp/vault-sync.log"
ssh truenas_admin@mallexxx.duckdns.org "tail -5 /tmp/vault-sync.log"
# Запустить sync вручную
ssh kraken@192.168.1.14 "bash ~/scripts/sync-vault.sh"
ssh truenas_admin@mallexxx.duckdns.org "bash ~/sync-vault.sh"
# Посмотреть историю коммитов в bare repo
ssh truenas_admin@mallexxx.duckdns.org "git -C /mnt/RED_2TB/storage/git/obsidian-vault.git log --oneline -10"
```
## Связанные заметки
- [[openmediavault-rpi5]] — Kraken NAS setup (шаги 1112)
- [[truenas-infrastructure]] — TrueNAS инфраструктура, bare repo, ACL