# Felhom in a virtual machine on OpenMediaVault 8 (KVM plugin) — a copy of the pilot tester's box, 2026-10-15 **Why:** the first outside tester runs OMV 8 on an i3-8100T mini PC and wants Felhom in a VM on his NVMe, without wiping OMV. Nobody had tried Felhom under OMV's KVM plugin. This run built a copy of his machine on demo-hp (Tier 0), did every step through the OMV web interface (a headless Chromium in a throwaway LXC on demo-hp drove the pages; the screenshots are in `screens/`), installed Felhom from the public ISO, bound and claimed it as the throwaway customer **Tester4** (`tester4.test`, made by the operator in the browser — CC's token cannot make customers since decision 252), installed two apps, made a backup, restarted OMV twice, and removed everything. The guide that came out of it: `documentation/pilot/GUIDE-omv-kvm-hu.md`. Times are UTC. „Seen in the web page" = clicked in OMV's own pages by the headless browser; „not in the web page" = done with `omv-rpc`, `virsh` or the Felhom dashboard's own API calls (the endpoints the dashboard's buttons call). ## The copy (Part A) | Item | Ferenc's box | The copy (VM 9310 `omv-sim` on demo-hp) | |---|---|---| | OMV | 8.5.11-1 (Synchrony) | ISO 8.3.1 (newest ISO on SourceForge, sha256 matched) → `omv-upgrade` → **8.5.11-1** | | Kernel | 7.2.6+deb13-amd64 | the same — the 8.5 upgrade installs it (`A4-omv-installed.txt`) | | CPU | i3-8100T, 4 cores | 4 vCPU `cpu=host` on a Ryzen V1756B; nested KVM was already on (`kvm_amd nested=1`, untouched) | | Memory | 16 GB (planned) | 16 GiB | | OMV system disk | Samsung 128 GB SATA SSD | 32 GB virtual disk | | Felhom's disk | Samsung 980 500 GB NVMe with a films partition | 200 GB thin file shown as a **real NVMe device** (`-device nvme`, serial `S64DNF0R980500`) | | Old HDD | Toshiba 500 GB 2.5" | 20 GB virtual disk (added later, for the second-disk test) | | omv-extras / KVM plugin | listed 8.3.4 | omv-extras 8.0.3, **openmediavault-kvm 8.3.4** (same) | | „Films" | `nvme0n1p1` | ext4 on `nvme0n1p1`, shared folder `Filmek`, SMB share, 3 × 300 MB files | Tester 1 (VM 341) was stopped at 14:48 to free memory (15.6 → 23.4 GiB available); VM 300 did not exist. `A1-free-memory.txt`. ## What happened (Part B) | Step | Result | Minutes | Evidence | |---|---|---|---| | OMV install from ISO | OK | 6 | screens `omv-17/18/22` | | Upgrade to 8.5.11-1 + omv-extras | OK | 3 + 0.3 | `A4-omv-installed.txt` | | KVM plugin (Rendszer → Bővítmények → `kvm` → Telepítés, „Megerősítés" tick) | OK; menu „Szolgáltatások → KVM" appears; **the plugin pages are English** | 1.5 | `w05`, `w06`, `w08`, `w10` | | Pool (KVM → Pools → Add new pool, Directory, `/srv/felhom-iso`, then Állapot → Indítás) | OK; the pool is created **stopped** and must be started | 1 | `w12`, `w13`, `w15` | | Felhom ISO by URL with the sha256 (KVM → ISOs → Download ISO) | OK, „Checksum OK" | 1.5 | `w20`, `w22` | | Network bridge (Hálózat → Interfészek) | Works, but **OMV's address changed and the open page hung** — see below | — | `B1-*` | | Free the NVMe (SMB share → shared folder → Fájlrendszerek „Leválasztás" → Alkalmaz) | OK | 2 | `w46` | | VM (KVM → VMs → Add new VM: 4 CPU, 12 GiB, 1 GB throw-away disk, Felhom ISO, Modell `bridge`, Híd `br0`) | OK. Defaults: CPU `host-passthrough`, OS Debian 13, **firmware BIOS** (UEFI box empty), VNC+SPICE | 2 | `w52`–`w55`, `B2-felhom-vm-libvirt.xml.txt` | | Whole NVMe to the VM (Hard disk → Add host disk → `/dev/disk/by-id/nvme-…`), throw-away disk removed, AutoStart → Engedélyezés | OK. **The host-disk list also offers OMV's own system disk** | 2 | `w57`–`w63` | | First start | **HUNG at „Booting from Hard Disk…"** — the VM boots the disk first, and the old films partition table has no boot code | — | `f-02-boot.png` | | Wipe the NVMe (Tárolás → Lemezek → Törlés → Gyors), start again | Felhom installer starts. **BIOS firmware works; UEFI was not needed and not tried** | 1 | `w67`, `w68`, `f-03-boot2.png` | | Felhom installer 1.29.0 | target `/dev/vda` 200 GB; it **refuses** the prefilled e-mail and the default hostname (known, the volunteer guide covers both); VM got 192.168.0.129 from the router **through the bridge** | Install → pairing screen < 4½ | `f-05`…`f-20`, `B3-timeline-raw.txt` | | Bind (mailed link + pairing code + owner phrase) | „Sikeres összekötés"; host ONLINE 16:12:45; controller 0.313.0 → **0.314.0 by itself** at 16:14:21 | 1.5 to ONLINE, 3 to the controller | `B3-bind.txt`, `C-hub-events-Tester4.txt` | | Claim (setup code from the mail) | 302 → `/` | — | `B3-claim.txt` | | Vaultwarden | installed and running | < 1 | `B4-deploy.txt` | | Jellyfin, one disk | **refused**: „a(z) "Médiatár útvonal" (HDD_PATH) mező kitöltése kötelező" — no data drive registered (R-1068) | — | `B4-deploy.txt` | | Second disk via the plugin, bus `virtio` (default) | Felhom **refused to format it**: „device has no durable id" (R-1069). Bus `sata` works | — | `B4c-second-disk-format.txt` | | Second disk, bus `sata`, attached as „Filmlemez" | OK; Jellyfin then installed and ran | < 1 | `B4c-…`, `B4-deploy.txt` | **Memory.** The VM has 12 GiB; Proxmox inside it sees 11,960 MiB (`memory_total_bytes` 12,540,755,968); the installer rule (total − 4 GiB) gave the Felhom guest **7,863 MiB**. The sizing estimator (`/gepigeny`, `SIZING.md` §5) has no 12 GB size; by its own rule (fits well = peak × 1.5 ≤ guest) a 7.7 GB guest gives: the household set (peak 5.9 GB) **fits, but tight**; the household set without Immich **fits well**; Immich alone **fits well**. **Disk layout on the passed 200 GB disk** (the box's own report): host root `local` 62.8 GB, thin pool `local-lvm` 121.3 GB, the rest swap and boot. The guest's system data volume is mounted at `/mnt/sys_drive` (offered by the dashboard as an attachable store — see R-1068). **Backups on a one-disk box** (`B4-backup-pages.txt`, `B4-backup-run.txt`): | Tier | Works? | What the household sees | |---|---|---| | Whole-guest, local (`local` on the same disk) | yes — first archive 16:19, 645 MB | „A rendszermentés jelenleg ugyanazon a lemezen van, mint a rendszer — így hibás fájlok ellen véd, lemezhiba ellen nem. Csatlakoztass egy második meghajtót a teljes védelemhez." | | Per-app copy 1 (local) | yes — „Mentés most" ran in 4 s | „1. mentés helyi" | | Per-app copy 2 (another drive) | cannot exist | „Csak egy másolat készül (nincs második meghajtó) — a 3-2-1 mentéshez csatlakoztasson egy második meghajtót vagy offsite tárolót." and per app „Nincs 2. (off-drive) másolat" | | Off-site (restic) | not switched on for this test customer | „Felhom offsite tárhely — igényelhető szolgáltatás." | | PBS-DR | not provisioned for this customer | hub event `backup_tier_skipped` (warning, operator) | The two sentences mix „csatlakoztasson" (formal) and „Csatlakoztass" (informal) on one page (R-1072). ## The bridge (B1 — the trap for Ferenc) `B1-bridge-timeline.txt` has the minute-by-minute record. In short: 1. „Létrehozás → Híd" offers **no network card** while the card has its own setting: the card's setting must be deleted first (not applied), then the bridge made, then one „Alkalmaz". 2. 27 s after „Alkalmaz" the old address stopped answering; the page stayed on „Kérjük várjon…" for good. 3. The bridge took a **new hardware address and a new IP** (192.168.0.119 → .121). Copying the card's hardware address into the bridge's „MAC cím" did **not** bring the old IP back (→ .123): systemd-networkd asks the router with its own client ID. 4. OMV's own screen text kept showing the **old** address both times. 5. **What found it:** `http://omv-sim.local` (OMV's avahi answers) — or the router's device list. ## The restarts (B5) | Restart | Felhom VM before | OMV page back | Felhom dashboard back | How the VM stopped | Evidence | |---|---|---|---|---|---| | 1 — OMV power menu → Újraindítás | switched off | 26 s | 63 s (AutoStart) | — | `B5-omv-restart-1.txt` | | 2 — the same | **running**, Vaultwarden + Jellyfin | 72 s | **1 min 52 s** | clean shutdown, ~20 s: the plugin sets `ON_SHUTDOWN=shutdown`, `ON_BOOT=ignore` (the AutoStart flag starts it) | `B5-omv-restart-2.txt` | The household's „turn off" from the dashboard refuses for 10 minutes after a start („A gép most indult el. 10 perc múlva kapcsolhatod ki.") — by design, noted for the guide. Every dashboard power-off was recorded by the hub as deliberate (`host_deliberate_off`), so no alarm mail. ## An OMV share for Jellyfin (B6) — **No** Steps tried once: `openmediavault-sharerootfs`, a shared folder `TesztFilmek` with one file, SMB share, an OMV user `felhom`. Felhom „Hálózati tárhely" (`/api/storage/netstorage/add`, the page's call): - without a user name → refused „SMB-hez felhasználónév és jelszó szükséges"; - with a user, read-only share → refused „A megosztás csatolható, de az alkalmazások nem tudnak rá írni…"; - writable share → added and verified, mounted at `/mnt/felhom-drives/omv-filmek`. The household's „Újraindítás most" for media apps then bound **only the local drive** into Jellyfin (`per-drive binds 1 [/mnt/felhom-drives/filmlemez/userdata/media]`). A network share is browse-only by design (R-108, `media_library.go` skips `Kind == "network"`). Filed as R-1071 for the operator's decision. `B6-omv-share.txt`. ## Things this run caused, recorded so nobody reads them as product faults - `storage_disconnected` (error) for „Adatlemez" at 16:51 and 17:02: my own mistake — I first used the low-level disk calls (`/api/disks/format` + `/api/disks/assign` + `register-mounted`) instead of the dashboard's „Csatlakoztatás" (`/api/storage/attach`), so the drive was registered but not bound into the guest. Removed with „Végleges leszerelés"; the household path worked at once. - Two dashboard power-offs and a third at the end; all deliberate. ## Hub-side finding `os_update_health_failed` (error) at 16:30: „NOT healthy after 106 package(s) were installed (the tunnel is unknown)" — on a box that never had a tunnel. Filed as R-1070. `C-hub-events-Tester4.txt`. ## Clean-up (Part D) — three layers - **Machine:** Felhom VM switched off by the household path (17:15), then `omv-sim` destroyed with all its disks; `/mnt/hdd_1/images/9310` gone. `D1-poweroff.txt`, `D2-teardown-demo-hp.txt`. - **Host (demo-hp):** browser LXC 9311 destroyed; the OMV ISO deleted; nested setting untouched (it was on); Tester 1 started 17:16 and ONLINE on the hub at 17:16:54, its guest 9201 running (read over SSH too). - **Hub:** customer **Tester4** and its host record `Tester4-68d1d8` remain — **deleting them is the operator's browser-only act**. No tunnel or DNS name was made (placeholder domain). Nothing ran on ep0. ## Not checked - UEFI firmware (BIOS worked, so UEFI was not tried). - A real Samsung 980: its `/dev/disk/by-id` name will read `nvme-Samsung_SSD_980…` or `nvme-eui.…`, not the QEMU name. - Jellyfin on the one disk through the dashboard's `sys_drive` route (R-1068) — seen in the code and in the dashboard's candidate list, not pressed. - The noVNC console of the plugin (the installer was driven with `virsh send-key`; Ferenc will use the console page).