[2026-09-02] eagle: family/documents/vault-sync/2026-09-02-restore-privilege-scope.md family/how-to/arr-stack-taiga.md family/how-to/obsidian-sync.md family/how-to/truenas-infrastructure.md family/how-to/vault-git-sync.md
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
---
|
||||
tags: [truenas, restore, incident, git, media, arr, permission]
|
||||
created: 2026-09-02
|
||||
status: diagnosed
|
||||
updated: 2026-09-02
|
||||
status: in-progress (бэкап сделан; правка transmission compose на PUID=950 ждёт подтверждения Alex)
|
||||
---
|
||||
|
||||
# Incident 2026-09-02: Поломка прав uid 921/0000 после restore — масштаб и влияния
|
||||
@@ -129,6 +130,62 @@ ssh truenas_admin@mallexxx.duckdns.org 'bash /tmp/fix-storage-nfs4-acl.sh'
|
||||
- Transmission-контейнер работает **как root** (`docker exec transmission id` → uid 0), поэтому права медиа для него некритичны; но данные Transmission (downloadDir `/mnt/storage/Downloads`) док описывал под `transdamon`/911. Решено ставить единообразно **950** (нужно для git/arr/serving). Если нужен и доступ transdamon/911 — добавить явный ACE `GROUP` на 911.
|
||||
- Альтернатива владельцу 950 — общая группа `nas_users` (3000, члены: truenas_admin, transmission, nas и др.). Эталон obsidian = 950.
|
||||
|
||||
---
|
||||
|
||||
## 5. ⭐ РЕШЕНИЕ от 2026-09-02: ВАРИАНТ А — единый PUID/PGID=950 + рекурсивный фикс прав
|
||||
|
||||
**Контекст:** вопрос «будут ли файлы, созданные transmission, читаться jellyfin?» вскрыл, что простой смены владельца верхних папок на 950 **НЕДОСТАТОЧНО** — нужно согласовать межсервисную читаемость контента + фикс вглубь файлов. Выбран **Вариант A** (одобрен Alex, стоп-правило: root-команды выполняет Alex, обязательный бэкап перед изменениями).
|
||||
|
||||
### Факты, на которых строится решение
|
||||
- **Все linuxserver-образы загружены локально на TrueNAS** (проверено `docker images`): `radarr`, `sonarr`, `jellyfin`, `transmission`, `prowlarr`. Контейнеры (кроме transmission) **ещё не созданы** из них.
|
||||
- **Проверен механизм PUID/PGID** в linuxserver: Entrypoint=`[/init]`, есть `/etc/s6-overlay` (s6-based). → `PUID`/`PGID` обрабатываются штатно s6-stage2-hook. Нативный механизм.
|
||||
- **Дефолт без PUID:** у текущего transmission `PUID` не задан → контейнер работает **root** (подтверждено `docker exec transmission id` → root). Медиа-образы без явного PUID разъехались бы по разным uid → не видят файлы друг друга.
|
||||
- **Масштаб поломки вглубь** (подсчёт через transmission-root, `find -printf '%u'`):
|
||||
- `Movies`: **257 908** файлов, из них **257 751 → uid 921** (+157 → 950).
|
||||
- `Downloads`: mix 518→911, 380→921, 7→1001.
|
||||
- `series`: 94 → 921; `Music`: 8484; `git`(bare): 3430; `work`: 26180; `Cartoons`: 1009.
|
||||
- Глубокие `.mkv`/`.avi`/`.iso` тоже `921:921 mode 0000` — поломка НЕ только каталоги, а каждый inode.
|
||||
|
||||
### Целевая модель Варианта А
|
||||
Все медиа/arr/jellyfin контейнеры работают под **единым uid 950:950** (`truenas_admin`, как obsidian-эталон), тогда transmission→(radarr→jellyfin) взаимно читают:
|
||||
- transmission (станет 950) качает → файлы 950
|
||||
- radarr/sonarr (950) импортируют → 950
|
||||
- jellyfin (950) читает → ✅
|
||||
|
||||
### Этапы (рабочий статус на 2026-09-02)
|
||||
- ✅ **Этап 0 — БЭКАП выполнен** → `/home/truenas_admin/variantA_bk/`:
|
||||
`transmission.docker-compose.yml` (оригинал), `arr.docker-compose.yml` (оригинал), `transmission_settings.json` (2982 б), ACL топ-папок (Cartoons Downloads Movies Music git work series books shared) + README.txt.
|
||||
> ⚠️ **Питфолл бэкапа:** `/mnt/RED_2TB/backup` — root-owned (`drwxrwxr-x root root`), `truenas_admin` туда **писать не может** → бэкап сделан в домашку `~truenas_admin`. Файл `docker/transmission/docker-compose.yml` на хосте владеет uid 911 (`drwx------ 911 911`) → прочитан/скопирован **через root-контейнер** `docker exec transmission cat /config/docker-compose.yml`.
|
||||
- ⏸ **Этап 1 — правка compose на PUID/PGID=950.** Новая версия transmission compose подготовлена (`~/transmission-new-compose.yml` на маке = `/tmp/transmission-new-compose.yml` на хосте), добавлено `PUID=950` + `PGID=950`. Шаг `docker cp` в `/config/docker-compose.yml` **заблокирован ожиданием подтверждения Alex** (правка живого контейнера) — НЕ выполнен, файл НЕ перезаписан. Лежит в `/tmp/transmission-new-compose.yml`.
|
||||
- ⬜ **Этап 2 — пересоздать transmission под 950** (root/влияние на рабочий сервис → выполняет Alex):
|
||||
```bash
|
||||
cd /mnt/RED_2TB/docker/transmission && docker compose up -d # пересоздаст с PUID=950
|
||||
docker exec transmission id # ожидаем uid=950
|
||||
```
|
||||
- ⬜ **Этап 3 — рекурсивный фикс прав вглубь** (root → выполняет Alex, масштаб ~257k+ файлов): рекурсивно вернуть владельца 950:950 + снять 0000 на файлах/папках (`find ... -exec chown -R 950:950 {} +`, `chmod u+rw,g+r` для файлов, `u+rwX,g+rwX` для каталогов). Или через UI `Apply recursively`.
|
||||
|
||||
### Точное содержание transmission compose (оригинал, важно для пересоздания)
|
||||
```yaml
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Asia/Novosibirsk
|
||||
- USER=transmission_admin
|
||||
- PASS=E$%p3En4a%R6
|
||||
- WHITELIST=172.16.*.*
|
||||
volumes:
|
||||
- /mnt/RED_2TB/storage:/mnt/storage
|
||||
- /mnt/RED_2TB/docker/transmission:/config
|
||||
ports:
|
||||
- 9091:9091
|
||||
- 51413:51413
|
||||
- 51413:51413/udp
|
||||
```
|
||||
(в compose НЕ было PUID/PGID → контейнер root; transmission монтирует `storage` → `/mnt/storage`, download-dir `/mnt/storage/Downloads`)
|
||||
|
||||
## Связанные заметки
|
||||
- [[2026-08-31-syncthing-truenas-incident]] — вызвавший инцидент + фикс syncthing
|
||||
- [[arr-stack-taiga]] — acquisition-стек на TrueNAS
|
||||
|
||||
Reference in New Issue
Block a user