gates / gates (push) Successful in 6m53s
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
140 lines
11 KiB
Markdown
140 lines
11 KiB
Markdown
# 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).
|