Files
felhom.eu/documentation/audits/omv-vm-2026-10-15/README.md
T
admin 340804f9af
gates / gates (push) Successful in 6m53s
Felhom in a VM on OpenMediaVault 8 (KVM plugin): tried on an exact copy of the pilot's box; Hungarian guide; R-1068..R-1073; capability A23
On demo-hp: OMV 8.5.11-1 + openmediavault-kvm 8.3.4 in a VM, every OMV step done in its web pages
(headless browser). Public ISO 1.29.0 on the whole passed NVMe, BIOS firmware, bound and claimed as
throwaway customer Tester4, Vaultwarden + Jellyfin, local backups, two OMV restarts (clean guest
shutdown, AutoStart back in 1 min 52 s). Guest memory 7,863 MiB of 12 GiB.
Traps for the guide: the bridge changes OMV's IP; the plugin boots the disk first (wipe the NVMe);
the host-disk list offers OMV's own disk. Rows: one-disk Jellyfin refusal (R-1068), virtio disk not
formattable (R-1069), tunnel-less OS-update alarm (R-1070), NAS films for Jellyfin (R-1071, operator),
mixed formal/informal backup text (R-1072), no SMART in a VM (R-1073, operator). Register 157 -> 163.
Everything removed; Tester 1 back ONLINE. Customer Tester4 waits for the operator's delete.

Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-15 19:24:59 +02:00

140 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).