Files
oikos/knowledge/wiki/containers/134-romm.md
dtoro 8a6422bd7d docs: move narrative wiki under knowledge/wiki/ (phase 3)
Problem: node and cross-cutting narratives lived at the repo root
(containers/, vms/, infrastructure/, host .md files), interleaved with the
machine-readable substrate.

Change:
- Move containers/ -> knowledge/wiki/containers/, vms/ -> knowledge/wiki/vms/,
  infrastructure/ -> knowledge/wiki/infrastructure/, hosts/{hubris,strong}.md ->
  knowledge/wiki/hosts/, infrastructure/references/ -> knowledge/sources/references/,
  GLOSSARY.md -> knowledge/GLOSSARY.md.
- Add knowledge/{index.md,log.md,sources/index.md} scaffolding.
- Rewrite all relative links repo-wide via a path-resolving mapper (inbound +
  outbound + between-moved-files), including .hermes/, runbooks, operations,
  investigations, plans, README, AGENTS.
- Repoint inventory.yaml doc_page fields and regenerate hosts/*.yaml (which
  embed doc_page); update oikos/gen-topology.py output path, candidate doc
  paths, and footer links; update code-comment doc paths.

Substrate untouched in place: inventory.yaml, hosts/*.yaml (regenerated,
idempotent), oikos/ code, mcp/, secrets/, bin/.

Verification:
- Logical broken-link set identical to pre-move baseline (net 128 -> 127; the
  topology regen fixed one, introduced none). Remaining are pre-existing refs
  to destroyed/archived nodes, out of scope for this move.
- gen-topology.py --check exit 0 (in sync); cards carry knowledge/wiki/ doc paths.
- build_host_files.py idempotent; all inventory doc_page targets resolve.
- MCP contract verified: get_page/search_docs/get_changelog resolve moved pages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:35:23 +02:00

2.7 KiB

134 — romm

Self-hosted ROM manager (RomM). Browse, search, and play your retro game library from the browser. Runs on Docker Compose with a MariaDB sidecar.

At a glance

  • Hostname: romm
  • IP: 192.168.8.249/28 (static, vmbr1 on strong)
  • Privilege: privileged
  • Resources: 1 core / 2 GiB RAM / 16 GiB rootfs (Debian 13, ludo-lvm)
  • Mounts: /mnt/media_local/mnt/library
  • Public hostname: roms.hubris.network

Service / port map

Service Listen Notes
RomM 192.168.8.249:80 HTTP (Caddy terminates TLS)
MariaDB internal only Sidecar in the same compose stack

Compose

Located at /opt/romm/docker-compose.yml. Key points:

  • Image: rommapp/romm:latest
  • DB sidecar: mariadb:latest with healthcheck
  • ROM library: /mnt/library/roms/romm/library (writable)
  • Resources (covers, etc.): Docker named volume romm_resources/romm/resources
  • Saves/states: /opt/romm/assets/romm/assets
  • Config: /opt/romm/config/romm/config
  • Auth key: auto-generated, stored in /opt/romm/.env

Environment (/opt/romm/.env):

  • DB_ROOT_PASSWD / DB_PASSWD — MariaDB credentials
  • DB_USER=romm-user / DB_NAME=romm
  • ROMM_AUTH_SECRET_KEY — auto-generated

ROM library structure

RomM expects /mnt/library/roms/<platform>/<game>/<rom>. Create platform directories as needed:

/mnt/media_local/roms/
├── gba/
│   └── Pokemon - Emerald/
│       └── Pokemon Emerald.gba
├── snes/
│   └── Super Mario World/
│       └── Super Mario World.sfc
└── psx/
    └── Final Fantasy VII/
        └── Final Fantasy VII.bin

Media permissions

The /mnt/media_local/roms directory is owned root:media with mode 2775 (setgid). New files inherit the media GID (10000). The LXC is privileged so no idmap block is needed — in-container UID/GID matches the host. Docker containers within the LXC run as-is (read-only mount).

Changelog

2026-07-05 — provisioned

LXC 134 created on strong (Debian 13, privileged, 192.168.8.249/28). Docker + Compose installed. RomM stack deployed at /opt/romm/. Created /mnt/media_local/roms with setgid media:GID=10000 mode 2775. Caddy roms.hubris.network192.168.8.249:80. DNS roms A 192.168.8.175 added to Technitium. Hubris /32 route for .249 added to 50-strong-route.