4.6 KiB
Executable File
4.6 KiB
Executable File
tags, created, updated, status
| tags | created | updated | status | ||||
|---|---|---|---|---|---|---|---|
|
2026-05-13 | 2026-05-13 | 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 (контейнерный путь) |
Диагностика
# Проверить последний 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