Container had been stopped since 2026-04-21 and was never re-enabled. pct destroy 109 --purge cleaned up vm-109-disk-0 on local-lvm and the config file. /mnt/library/syncthing subtree was already empty at the time of destruction and is retained as an empty dir (no real data to migrate or back up). - README.md, containers/index.md: removed row, moved to "recently destroyed" table - hosts/hubris.md: dropped from /mnt/library subtree list, updated containers/index summary line, added changelog entry - infrastructure/media-permissions.md: dropped from membership table and onboarding example, generalised pct-exec gotcha hostname, added changelog - vms/100-zimaos.md: dropped from "existing fleet" enumeration - containers/102-nfs-export.md: dropped from bind-mount sibling list (7 LXCs now, not 8) - containers/109-syncthing.md: deleted Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.6 KiB
100 — zimaos
ZimaOS (IceWhale / CasaOS-family NAS distro), installed as a Proxmox VM to evaluate it as a potential primary NAS frontend in front of /mnt/library — alongside the existing fleet (nextcloud (114), jellyfin (101), mule-images (120)).
At a glance
- Type: QEMU VM
- ZimaOS version:
v1.6.1(build 2026-04-21, kernel 6.12.25) - IP:
192.168.8.195(DHCP lease from the LAN router — see "Open items" below) - Hostname (LAN DNS):
zimaos.hubris.network→ caddy (121)192.168.8.175→ VM192.168.8.195:80. TLS terminates at Caddy (Let's Encrypt via IONOS DNS-01). - Resources: 4 vCPU, 8 GiB RAM (balloon min 2 GiB), 64 GiB OS disk on
local-lvm - BIOS / machine: OVMF (UEFI),
q35,virtio-scsi-pci - EFI disk: none — ZimaOS installer writes a removable-media fallback (
/EFI/BOOT/BOOTX64.EFI), so a persistent EFI vars disk isn't required. PVE warns "no efidisk configured! Using temporary efivars disk" on start; harmless. - ISO:
/var/lib/vz/template/iso/zimaos-x86_64-1.6.1_installer.iso(1.48 GB, fromIceWhaleTech/ZimaOSGitHub releases; upstream publishes SHA256 only for the.img/.raucbvariants, not the.iso)
Web UI
- LAN: https://zimaos.hubris.network (via caddy (121))
- Netbird mesh (off-LAN): same URL — works because hubris advertises
192.168.8.0/24into the mesh, and once a peer resolveszimaos.hubris.network → 192.168.8.175, the request tunnels home. DNS resolution from a mesh peer needs either a netbird Management nameserver group (hubris.networkmatch domain →192.168.8.180), or an/etc/hostsoverride on the peer (192.168.8.175 zimaos.hubris.network). See mesh. - Direct fallback: http://192.168.8.195 — backend ZimaOS bundles its own Caddy (
Server: Caddy,Via: ZimaOS-Gateway), which the front-end Caddy on LXC 121 reverse-proxies to. Two Caddys in series.
SSH
Disabled by default. To enable:
- Toggle SSH on in the ZimaOS web UI ("Settings → SSH"), OR
- From the VM console, switch to TTY2 with Alt+F2 and run
passwdto set a root password first.
Storage strategy
Initial assumption (didn't work). PVE 9's native virtiofs share with the host's existing library dir mapping (used by 108-haos) was the obvious path. Attaching it took one line — but ZimaOS's kernel ships without the virtiofs module (modinfo virtiofs → Module virtiofs not found). The kvm-side device was attached fine; the guest just can't mount it. Detached on 2026-05-14.
What we ended up with. A dedicated NFS re-export LXC 102-nfs-export bind-mounts /mnt/library from the host and serves it over NFSv4 to ZimaOS. Performance is within ~2% of host-served NFS (LXC adds namespace isolation only, not an IO hop), with the upside that no NFS/RPC daemons run on the bare-metal host. Read-only during evaluation; promote to rw once the UI test confirms behavior.
Filesystem layout inside ZimaOS. /etc/fstab lives on a writable overlay so persistent mounts via fstab DO survive reboots, but the standard path to add a network share is the ZimaOS Files UI (Connect Network Storage → NFS). UID/GID mapping is squashed at the server to www-data:media (33:10000) — the same identity Nextcloud and mule-images use — so any rw activity from ZimaOS records as a normal media-group write.
Caveats discovered during install.
- Root filesystem is squashfs / read-only; only
/DATAis writable. dtoroidentity isuid 999, gid 1000(samba), groups samba+wheel. Primary group issamba(notdtoro— that group doesn't exist). SSH key needschown dtoro:sambato satisfy sshd StrictModes.dtoro's home directory is literally/DATA(not/home/dtoro). Authorized keys go at/DATA/.ssh/authorized_keys./etcis a writable overlay rooted at/mnt/overlay/upper_etc. Mounts added to/etc/fstabpersist across reboots.mount.nfs4is a stripped busybox variant — rejects_netdev,nofail,actimeo=N. The working minimal fstab line:192.168.8.200:/mnt/library /DATA/library nfs ro,vers=4 0 0.- No
qemu-guest-agentis bundled —qm guest cmdcalls fail. IP discovery viaqm monitor+screendumpinstead. - No package manager at runtime — no
apt, noopkg. Apps come via ZimaOS's CasaOS-style appstore only.
The alternative (dedicated virtual data disk on the library lvmthin pool, e.g. qm set 100 --scsi1 library:1024) was rejected because it would start empty and force content migration; the NFS path keeps /mnt/library as the single source of truth shared with the existing 8 LXCs.
Open items
- DHCP lease, not a reservation.
192.168.8.195came from the LAN router; the LAN-side dnsmasq only does DNS, not DHCP. If the lease rotates, the Caddy upstream needs updating too (/etc/caddy/Caddyfileon caddy (121)). Better fix: pin a static lease on the LAN router or set a static config inside ZimaOS. - No Authentik wiring. authentik (124) isn't enforcing auth in front of ZimaOS yet — ZimaOS handles its own first-run wizard. The Caddyfile block uses bare
reverse_proxyrather than theimport authentikpattern used by e.g. artifacto; layer it in once the wizard is complete and a static admin user exists. - No PBS backup. No Proxmox Backup Server configured on hubris today; this VM is not backed up.
- qemu-guest-agent not installed. ZimaOS's installer doesn't bundle it, so
qm guest cmd 100 ...returns "QEMU guest agent is not running". IP discovery during this install was done via console screendump →qm monitor→screendump.
Related
- 108 —
haos-16.3— the existing VM, same q35/OVMF pattern; also a virtiofslibraryconsumer - DNS — split-horizon entry lives here
- Caddy (121) — would front this if/when promoted
- Media permissions — relevant when wiring
/mnt/library
Changelog
2026-05-14 — Mesh-reachable from netbird peers
Verified https://zimaos.hubris.network reachable from republic-laptop (100.122.78.140) through the existing hubris→netbird subnet advertisement (192.168.8.0/24). No new infrastructure required — the path was already wired by mesh. Open: configure a netbird Management nameserver group for hubris.network so peers don't need per-device /etc/hosts overrides.
2026-05-14 — Phase 2 promoted to rw
NFS export on nfs-export (102) flipped from ro to rw after Files UI evaluation passed. Verified the squash: a write from ZimaOS appears on hubris's /mnt/library as www-data:media (uid 33, gid 10000), matching the existing tree convention.
2026-05-14 — Phase 2: NFS mount via new LXC 102 (read-only)
Virtiofs path abandoned — ZimaOS kernel 6.12.25 ships without the virtiofs module (verified by modinfo virtiofs returning "Module not found"). Pivoted to NFSv4: built nfs-export (102) as a dedicated 512-MiB privileged Debian LXC bind-mounting /mnt/library and serving it on 192.168.8.200:2049 with ro,all_squash,anonuid=33,anongid=10000 to the LAN subnet. Detached the now-useless virtiofs0 from VM 100. ZimaOS-side mount via Files UI (NFS protocol, server 192.168.8.200, path /mnt/library). Promote export to rw after Files UI evaluation passes.
2026-05-14 — Wired through Caddy (HTTPS)
Added zimaos.hubris.network site block to /etc/caddy/Caddyfile on caddy (121): bare reverse_proxy 192.168.8.195 + IONOS DNS-01 TLS, same pattern as plato/jellyfin. dnsmasq entry repointed from 192.168.8.195 to 192.168.8.175. Let's Encrypt cert issued on first request. Caddy commit a219176 pending push to dtoro/caddy-conf.
2026-05-14 — VM created, ZimaOS 1.6.1 installed (Phase 1)
qm create 100 with q35/OVMF, no EFI disk, 4 vCPU / 8 GiB / 64 GiB on local-lvm. Installed via the official ISO (manual console install). Web UI verified at http://192.168.8.195. onboot=1, startup order=20. dnsmasq entry zimaos.hubris.network → 192.168.8.195 initially added direct-to-VM on authentik (124) (later repointed — see above). /mnt/library is not yet shared into the VM; Phase 2 (virtiofs) is gated on UI evaluation.