6.5 KiB
title, created, updated, tags
| title | created | updated | tags | |||||
|---|---|---|---|---|---|---|---|---|
| iPad — Obsidian vault sync | 2026-10-15 | 2026-10-15 |
|
iPad — Obsidian vault sync
Метод: прямой двусторонний Git-синк с существующим bare repo TrueNAS по SSH. Выбран после проверки family/how-to/vault-git-sync, family/how-to/obsidian-sync, family/how-to/syncthing-truenas-android и family/how-to/obsidian-android-sync. Он использует тот же source of truth, что Mac; Syncthing/Gitea и синк внутри редактора не нужны этому клиенту. Новый доступ не меняет синк существующих устройств.
Устройство: iPad mini1 iPad2,5, iOS9.3.5, jailbreak. Редактор — установленная Edhita2.3.0; в её файловом browser открыть Documents → ObsidianVault. Полный рабочий набор заметок клонирован неглубоко (depth1), чтобы не расходовать место на старую историю. Перед настройкой доступно335MB; после установки Git и clone —311MB. Ветка main, remote nas.
Пути
- Vault:
/private/var/mobile/Containers/Data/Application/27C12C43-7961-4D13-815E-29FB11A9AE57/Documents/ObsidianVault. - Script:
/var/mobile/Library/VaultSync/sync-vault.sh. - Git SSH wrapper:
/var/mobile/Library/VaultSync/bin/git-ssh. - SSH config/pinned host key:
/var/mobile/Library/VaultSync/ssh/config,known_hosts. - Dedicated private key:
/var/mobile/Library/VaultSync/ssh/id_ed25519— остаётся на iPad, владелец mobile, private directory700/key600. - Log:
/var/mobile/Library/Logs/ipad-vault-sync.log(bounded2MiB). - State:
/var/mobile/Library/VaultSync/state/last-result,last-attempt,last-success. - LaunchDaemon:
/Library/LaunchDaemons/local.ipad.obsidian-vault-sync.plist, labellocal.ipad.obsidian-vault-sync, UserName/GroupName mobile, RunAtLoad=true, StartInterval=300. - NAS repo:
ssh://vault-nas/mnt/RED_2TB/storage/git/obsidian-vault.git; SSH alias vault-nas = truenas_admin@mallexxx.duckdns.org:22. - Host sources/evidence:
/Users/admin/Developer/ipad-vault-sync/.
Vault в Documents принадлежит редактору. При удалении приложения его данные могут удалиться; переустановка с новым container UUID требует обновить VAULT path. Background job требует активного jailbreak; после reboot iPad сначала восстановить jailbreak. Исполнение строго раз в пять минут во время сна устройства не гарантируется; очередной tick после возобновления/доступности сети доставит сохранённые локальные commits.
Git и доступ
Установлены оригинальные Saurik packages: git2.8.1-5, curl7.33.0-9, expat2.0.1-3. Existing OpenSSL0.9.8 и OpenSSH6.7 не обновлялись. Package bytes сверены с MD5 опубликованного HTTPS Packages index; дополнительный SHA256 каждого download сохранён на Mac. Git2.8.1 реально запускается от mobile на iPad9.3.5.
Отдельный Ed25519 client key iPad→NAS сохранён через TrueNAS user.update; прежние SSH keys/options сохранены. Для этого ключа разрешены только git-upload-pack и git-receive-pack exact /mnt/RED_2TB/storage/git/obsidian-vault.git; shell, PTY, port/agent/X11 forwarding запрещены. Guard на NAS: /home/truenas_admin/.local/bin/ipad-vault-git. Home dataset NAS noexec, поэтому forced command вызывает /bin/sh guard, а не исполняет файл напрямую. NAS host key закреплён из доверенного Mac known_hosts. Mac→iPad login key отдельно; private Mac key не копировался на устройство.
Поведение
- Один запуск за раз; stale task lock снимается после проверки PID/boot.
- Local edits коммитятся до обращения к серверу.
- Fetch main → обычный merge → push без force.
- При unavailable remote локальные commits сохраняются, процесс возвращает75 и повторяет попытку на следующем tick.
- При конфликте sync останавливается с кодом4; локальная версия сохранена в Git, conflicting merge не пушится. После ручного разрешения/commit следующий tick продолжит синк.
- Успех отмечается только после совпадения local HEAD и remote main и отсутствия новых working-tree edits. core.fileMode=false; автоматический gc на маленьком flash отключён.
Внешние изменения открытой заметки могут потребовать Reload/переоткрытия в Edhita. Скрипт не изменяет поведение редактора.
Проверка и обслуживание
Ручной запуск на iPad от mobile:
bash /var/mobile/Library/VaultSync/sync-vault.sh
cat /var/mobile/Library/VaultSync/state/last-success
cat /var/mobile/Library/VaultSync/state/last-result
От root через SSH:
su mobile -c 'bash /var/mobile/Library/VaultSync/sync-vault.sh'
launchctl list local.ipad.obsidian-vault-sync
launchctl start local.ipad.obsidian-vault-sync
Изолированные тесты на настоящем Git2.8/Bash4 iPad прошли: push локальной заметки, pull peer-заметки, сохранение offline edits/retry, остановка на конфликте без изменения remote. Лог на Mac test-results.log; fixtures retained /var/mobile/Library/VaultSync/test-20261014T192932Z-3600. Первый production manual sync завершился успешно, local/NAS main совпали 9bc1a2847ef2fce0172ecf1f9f6ae87db7c68920. Проверка production roundtrip и работающего scheduler записывается ниже после завершения.