From e2485c1a710aef6e2ec17f82bf9b3f528478df59 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 22 Sep 2026 20:11:07 +0600 Subject: [PATCH] [2026-09-22] eagle: family/how-to/vault-git-sync.md personal/tech/truenas-nfs4-acl-and-arrmultiuser.md --- family/how-to/vault-git-sync.md | 16 +++++++++++++++- .../tech/truenas-nfs4-acl-and-arrmultiuser.md | 11 ++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/family/how-to/vault-git-sync.md b/family/how-to/vault-git-sync.md index 2ec3790c..03240483 100644 --- a/family/how-to/vault-git-sync.md +++ b/family/how-to/vault-git-sync.md @@ -1,6 +1,6 @@ --- title: Vault Git Sync — Architecture & Scripts -updated: '2026-09-21' +updated: '2026-09-22' type: tech tags: - vault @@ -12,6 +12,20 @@ tags: # Vault Git Sync +> **✅ STATE 2026-09-22 — рецидив ACL закрыт перманентно.** Дефект вернулся (35 root-каталогов), +> push с Mac падал. Починено: **236/236 каталогов `INHERIT` + `WRITE`** через +> `midclt filesystem.setacl` (read-modify-write + ожидание job). **Наследование подтверждено +> ФАКТОМ** — `mkdir objects/zzz` → новый ACL унаследован (`INHERITED:True`), `touch` внутрь OK. +> End-to-end push: `ba3780c..8b831a8 main -> main` ✅. Поставлен **cron-сторож** (каждые 2 ч): +> `~/scripts/vault-acl-watchdog.py` на TrueNAS — SILENT когда всё ок, чинит + докладывает когда +> сломано. Скрипты: `/Users/admin/Developer/vault-tools/`. +> 🔴 **Корень НЕ устранён:** контейнер `hermes-taiga` работает от root +> (`HERMES_ALLOW_ROOT_GATEWAY=1`, `User:` пусто) → `mcpvault /vault` пишет root-owned объекты. +> Перманентный фикс — `user: "950:950"` в `taiga` service +> `/mnt/RED_2TB/docker/hermes/docker-compose.yml` (риск: образ может требовать root для `/opt/data`). +> Сторож пока закрывает последствия. Подробно: +> `family/documents/vault-sync/2026-09-21-bare-repo-push-permission-denied.md`. +> > **STATE 2026-09-21 — bare repo push починен (наследуемый ACL).** `git push nas` падал `Permission denied` на `objects/XX`: 28 каталогов были root-owned (создавал `mcpvault` **второго Hermes на TrueNAS, от root**), 13 каталогов без owner-`x`. Фикс: **полный dacl-REPLACE с `FILE_INHERIT`+`DIRECTORY_INHERIT`** через `midclt filesystem.setacl` — 291 каталог, 0 ошибок, без root-пароля. Push прошёл дважды, Mac=`nas`=`3b923d3`. ⚠️ Прямой write-тест `touch` в `objects/` **не выполнялся** → наследование подтвердит только следующий push root-инстанса. Подробно: `family/documents/vault-sync/2026-09-21-bare-repo-push-permission-denied.md`. > > **STATE 2026-09-02 (позднее обновление):** Eagle/bare repo снова **синхронны** (ahead=0/behind=0, `2fab879`). Ранее (см. ниже) git-sync стоял из-за битых прав `storage/git` — **починено** полной dacl-заменой (`family/documents/vault-sync/2026-09-02-restore-privilege-scope.md` §RESOLVED). diff --git a/personal/tech/truenas-nfs4-acl-and-arrmultiuser.md b/personal/tech/truenas-nfs4-acl-and-arrmultiuser.md index f9c30c3e..59b1898f 100644 --- a/personal/tech/truenas-nfs4-acl-and-arrmultiuser.md +++ b/personal/tech/truenas-nfs4-acl-and-arrmultiuser.md @@ -1,7 +1,7 @@ --- title: TrueNAS NFS4 ACL repair + cross-container media PUID created: 2026-09-02 -updated: 2026-09-21 +updated: 2026-09-22 type: tech namespace: personal tags: [truenas, nfs4, acl, midclt, arr, radarr, sonarr, jellyfin, transmission, docker, git] @@ -17,6 +17,15 @@ related: > Hard-won lessons from the 2026-08-31/09-01/09-02 TrueNAS restore-incident remediation. Mirror of skill `truenas-nfs4-acl-and-arrmultiuser`. Detailed incident log: `family/documents/vault-sync/2026-09-02-restore-privilege-scope.md`. > > **2026-09-21 addendum:** the same class of failure hit the **vault bare-git repo** (`/mnt/RED_2TB/storage/git/obsidian-vault.git`) — `git push` failed with `unable to write file ./objects/XX/…: Permission denied`. Root cause and the working midclt recipe are in the section «Bare git repo: push Permission denied» below. +> +> **2026-09-22 addendum (РЕЦИДИВ, закрыт):** дефект вернулся (35 root-каталогов). Починено: +> **236/236 каталогов `INHERIT` + `WRITE`**, push прошёл end-to-end, поставлен cron-сторож. +> 🔴 Ключевые уроки: `dacl` **с нуля собрать НЕЛЬЗЯ** (TrueNAS требует `id` в каждой ACE — +> только read-modify-write); флаги = `{"BASIC":"INHERIT"}`, НЕ булев dict; **`setacl` асинхронный — +> обязательно ждать job до `SUCCESS`**, иначе ложный провал. Рецепт и 4 питфолла — в секции +> «Durable fix with INHERITANCE» ниже. Инструменты: `/Users/admin/Developer/vault-tools/`. +> Хронология расследования: `family/documents/vault-sync/2026-09-21-bare-repo-push-permission-denied.md`. + ## Trigger Any "permission denied" / file not readable / git `loose object ... corrupt` / empty Jellyfin library on **TrueNAS SCALE** (acltype=nfsv4) after a zfs restore, OR wiring Prowlarr/Radarr/Sonarr/Jellyfin/Transmission so container-written files are readable by other containers.