[2026-05-13] obsidian sync docs: obsidian-sync.md created, kraken plan updated, truenas-infra + architecture cross-referenced
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
---
|
||||
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 (шаги 11–12)
|
||||
- [[truenas-infrastructure]] — TrueNAS инфраструктура, bare repo, ACL
|
||||
Reference in New Issue
Block a user