3.1 KiB
| title | order | category |
|---|---|---|
| Permission Content & Assets (Rootless Podman) | 16 | deployment |
Permission content/ & assets/ — Rootless Podman keep-id
Tanggal: 2026-10-26
Status: Aktif
Lokasi kode: podman-compose.yml, cli/commands.py, cli/runner.py
1. Masalah
Pada Podman rootless, container berjalan di user namespace sendiri. Secara
default uid 1000 di dalam container (app) dipetakan ke subuid host
(mis. 100999, tergantung isi /etc/subuid), bukan ke user yang menjalankan
Podman (a2nr, uid 1000). Akibatnya dua arah sama-sama rusak:
| Arah | Gejala |
|---|---|
| Container → host | File hasil publish/upload/create dimiliki host 100999; user a2nr tidak bisa menghapus/mengubahnya dari file manager tanpa sudo. |
| Host → container | File hasil ./elemes.sh init (milik host 1000) tampak sebagai root di container; proses app tidak bisa menulis → editor konten gagal (403). |
Tidak ada mekanisme penyelarasan permission di repo sebelum perbaikan ini.
2. Solusi: userns_mode: keep-id
Service elemes di podman-compose.yml kini memakai:
elemes:
userns_mode: keep-id
Dengan keep-id, uid container 1000 (app) dipetakan 1:1 ke host uid
1000 (user yang menjalankan compose). File yang dibuat backend otomatis
dimiliki user host, dan file milik user host bisa ditulis app.
⚠️
keep-idhanya untuk Podman rootless di Linux. Docker Desktop sudah memetakan user secara otomatis; opsi ini tidak diperlukan (dan tidak dikenali Docker Compose klasik).
3. Perbaikan deployment lama: ./elemes.sh fixperms
File yang terlanjur dimiliki subuid (100999) tidak berubah otomatis hanya
karena compose diubah. Perbaiki sekali dengan:
cd elemes
./elemes.sh fixperms
Perintah ini menjalankan:
podman unshare chown -R 0:0 ../content ../assets
Di namespace default podman unshare, uid 0 = user host. Jadi seluruh isi
content/ dan assets/ kembali dimiliki a2nr dan tetap terbaca sebagai
uid 1000 (app) di container keep-id.
Perintah bersifat idempotent: jika semua file sudah dimiliki user host,
tidak ada chown yang dijalankan. ./elemes.sh run, runbuild, dan
runclearbuild juga memanggil pemeriksaan yang sama secara otomatis sebelum
up -d.
4. Troubleshooting
| Gejala | Penyebab | Tindakan |
|---|---|---|
Tidak bisa hapus file di content//assets/ dari file manager |
File lama dimiliki subuid 100999 |
./elemes.sh fixperms, lalu cek ls -ln |
| Editor konten 403 / "Permission denied" saat simpan | Container tidak memakai keep-id, atau file milik root host |
Pastikan userns_mode: keep-id aktif, jalankan ulang ./elemes.sh runbuild |
fixperms bilang "Docker Desktop sudah memetakan user" |
Runtime terdeteksi Docker, bukan Podman | Tidak ada tindakan — permission Docker Desktop sudah benar |
podman unshare gagal |
Podman rootless belum dikonfigurasi / dijalankan sebagai root | Jalankan sebagai user biasa; cek /etc/subuid dan /etc/subgid |
Verifikasi cepat:
ls -ln ../content ../assets | head
# owner harus uid user Anda (mis. 1000), bukan 100999