Entity: LXC Storage Node (lxc-storage-infra)

Overview

Standalone Terraform + Ansible project for a Proxmox LXC container with Samba and NFS-Ganesha file sharing. Data lives on the Proxmox host via bind mount. Container is unprivileged, CT 107, 1vCPU/1GB/10GB.

Repository

  • github.com/tazzo/lxc-storage-infra — standalone repo (not in ephemeral-castle)
  • /workspace/lxc-storage-infra/

Quick Facts

PropertyValue
CT ID107
Hostnamelxc-storage
IP192.168.1.207/24
OSUbuntu 24.04
Resources1 vCPU, 1 GB RAM, 10 GB rootfs
Storage poollocal-lvm
Bind mount/mnt/shared (host) → /mnt/shared (container)
Auto-startstart_on_boot=true
UID mappinglxc.idmap per UID 1000 passthrough
IPv6Disabilitato (UFW IPv4-only)

Servizi

ServizioPortaProtocolloImplementazione
Samba139/445SMB2/SMB3smbd (nmbd disabilitato)
NFS2049NFSv3/v4nfs-ganesha (user space)
WS-Discovery3702/udpWSDwsdd2 (Windows discovery)
mDNS5353/udpZeroconfavahi-daemon (macOS/Android)

Accesso

  • SMB: \\192.168.1.207\shared — utente storage, password in ~/secrets/ (o variabile SAMBA_PASSWORD)
  • NFS: mount -t nfs4 192.168.1.207:/nfs/shared /mnt/point
  • SSH: ssh root@192.168.1.207 con chiave pubblica iniettata
  • Firewall: UFW active, solo subnet 192.168.1.0/24

Canonical Starting Pages for Agents

CRISP Design

  • CRISP Project — 3 review cicli, 16 issue risolti, Opzione A (VSO template) per ca.crt

Code Structure

  • terraform/ — bpg/proxmox provider, container resource
  • ansible/roles/ — baseline, samba, nfs (NFS-Ganesha), avahi, wsdd
  • create.sh — 6 fasi: pre-flight, TF, wait SSH, Ansible, verify
  • destroy.sh — teardown with data preservation
  • setup-host.sh — one-time config su Proxmox host (subuid, lxc.idmap, bind mount)

Known Issues

  • Bind mount: richiede root@pam su host Proxmox (API token non basta). setup-host.sh da eseguire una tantum sull’host
  • Mount da CT 106: NFS/CIFS/FUSE non disponibili su container non privilegiato. Usare smbclient via script storage

Relationships

  • Host Proxmox: ephemeral-castle — condivide lo stesso hypervisor ma non è gestito da quel repo
  • Workspace container: CT 106 (tazpod-proxmox) — accede via SMB/smbclient
  • Cluster K8s: tazlab-k8s — non dipende dal cluster

See Also