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
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
@@ -0,0 +1,75 @@
|
||||
# REPORT — Felhom in a virtual machine on OpenMediaVault 8, and a Hungarian guide for the pilot tester (2026-10-15)
|
||||
|
||||
Written in ASD-STE100 Simplified Technical English. Baselines read 16:25: felhom.eu `3263bb26bc`, felhom-controller
|
||||
`85f65c70d8` (v0.314.0), felhom-agent `d2053e7d47`. Read first: `runbooks/target-selection.md`, `operations/nodes.md`,
|
||||
`runbooks/day0-install.md`, `runbooks/VOLUNTEER-first-hour.md`, `architecture/15-media-library.md`,
|
||||
`architecture/07-backup-architecture.md` §7.5, R-548. Evidence: `documentation/audits/omv-vm-2026-10-15/`.
|
||||
|
||||
## What waits on you
|
||||
|
||||
1. **Send the guide to Ferenc.** Its first section is five lines for an e-mail: `documentation/pilot/GUIDE-omv-kvm-hu.md`.
|
||||
If you do nothing: he has no steps for the call.
|
||||
2. **Delete the test customer Tester4 in the hub** (browser only). The VM is gone; the host record stays until then.
|
||||
3. **Two decisions, no hurry:** R-1071 (should Jellyfin read films from a NAS share?) and R-1073 (Felhom in a VM cannot
|
||||
see disk health — is that acceptable?).
|
||||
|
||||
## 1. Did it work end to end? — Yes, on an exact copy
|
||||
|
||||
- I built a copy of his box on demo-hp: OMV 8.5.11-1, kernel 7.2.6, 16 GB, a small system disk, a fake Samsung NVMe,
|
||||
and the KVM plugin 8.3.4. All the same versions as on his screenshots.
|
||||
- I did every OMV step in OMV's own web pages, with a headless browser. Screenshots are in the evidence.
|
||||
- **Firmware:** the plugin's default (BIOS) boots our ISO. I did not need UEFI.
|
||||
- **The bridge:** it works, but OMV gets a **new address**, and the open page hangs. OMV's own screen shows the
|
||||
old address. `http://<name>.local` or the router finds it. Copying the card's hardware address did not keep the old
|
||||
address.
|
||||
- **Autostart:** I restarted OMV with Felhom running. OMV shut Felhom down cleanly and started it again by itself.
|
||||
The dashboard was back in 1 min 52 s.
|
||||
|
||||
## 2. Memory
|
||||
|
||||
- The VM has 12 GB. Felhom's guest got **7.7 GB** (7,863 MB). The rule „total minus 4 GB" held.
|
||||
- The estimator has no 12 GB size. By its own rule: the household set „fits, but tight"; without Immich „fits well".
|
||||
|
||||
## 3. Backups on a one-disk box
|
||||
|
||||
- Work: the whole-guest copy on the same disk (645 MB), and each app's first copy.
|
||||
- Cannot exist: the second copy on another drive.
|
||||
- The household sees: „Csak egy másolat készül (nincs második meghajtó)…" and „…így hibás fájlok ellen véd, lemezhiba
|
||||
ellen nem." Clear and true. The two sentences mix formal and informal Hungarian (R-1072).
|
||||
- Off-site was not switched on for this test customer.
|
||||
|
||||
## 4. Jellyfin reading an OMV share — No
|
||||
|
||||
- Felhom mounts the OMV share (it needs a user name and a writable share).
|
||||
- Jellyfin still gets only local drives. This is the design (R-108). Your decision: R-1071.
|
||||
|
||||
## 5. Problems Ferenc would meet, and what the guide does
|
||||
|
||||
| Problem | Guide |
|
||||
|---|---|
|
||||
| OMV's address changes after the bridge; the page hangs | says so before; `<name>.local`, router list, monitor steps |
|
||||
| The bridge form shows no network card | delete the card's setting first, apply once |
|
||||
| The VM hangs at „Booting from Hard Disk…" (old films partition) | wipe the NVMe in OMV first |
|
||||
| The disk list also offers OMV's own disk | „never `/dev/sda` or `/dev/sdb`" |
|
||||
| The plugin's default network is wrong | Modell = `bridge`, Híd = `br0` |
|
||||
| The pool starts stopped | Állapot → Indítás |
|
||||
| The installer refuses the default e-mail and hostname | the table says what to type |
|
||||
| Jellyfin refused on one disk (R-1068) | „call me, we do it together" |
|
||||
| A second disk on `virtio` cannot be formatted (R-1069) | use `sata` |
|
||||
| The plugin pages are English | the guide uses their English words |
|
||||
|
||||
## 6. Rows, commits, clean-up
|
||||
|
||||
- **Register: 157 → 163.** Opened 6 (R-1068 to R-1073), closed 0.
|
||||
- **Capability map:** new row A23, PARTIAL. `unproven.py`: unchanged (35 of 55 not walked).
|
||||
- **Clean-up:**
|
||||
- Machine: the Felhom VM was switched off from its dashboard, then `omv-sim` and all its disks were destroyed. Yes.
|
||||
- Host: the browser container and the OMV ISO are removed. The nested setting was on before; I did not touch it. Yes.
|
||||
- Tester 1: started 17:16, ONLINE on the hub at 17:16:54, its guest runs. Yes.
|
||||
- Hub: Tester4 remains (yours to delete). No tunnel or DNS name was made. Nothing on ep0.
|
||||
- **My mistake, recorded:** I first used low-level disk calls for the second disk. The box then sent two
|
||||
„Meghajtó váratlanul leválasztva" error events for Tester4. The dashboard's own „Csatlakoztatás" worked at once.
|
||||
- **No product code changed.** No changelog entry: this repo has changelogs only for hub, scripts, website and
|
||||
marketing, and this run changed none of them.
|
||||
- Secrets (passwords, the bind link, the codes, the owner phrase) stayed in the session's scratch folder. None is in a
|
||||
committed file.
|
||||
@@ -20,6 +20,8 @@
|
||||
- 65 apps in the catalog. New today: Prowlarr — you enter your download sources once, and Sonarr and Radarr get them, linked by the box with no button (the website lists 63 apps — R-1036). OS updates, the kernel lane too, run at night.
|
||||
- The hub is closed again after the 2026-10-12 security review; one box cannot read another's data.
|
||||
|
||||
- Felhom runs in a virtual machine on OpenMediaVault 8, tried on an exact copy of the first outside tester's box: install, bind, claim, apps, backup, and back by itself after an OMV restart. The Hungarian guide for him is `documentation/pilot/GUIDE-omv-kvm-hu.md`; open: one-disk Jellyfin (R-1068), NAS films for Jellyfin (R-1071, yours), no disk health in a VM (R-1073, yours). Waits on you: send the guide; delete test customer Tester4 in the hub.
|
||||
|
||||
## What is broken
|
||||
- Several root-level weaknesses wait on your four decisions below (R-954, R-971, R-982, R-985).
|
||||
- DooPlex: a failed disk with its alarms silenced (R-934); CI jobs still get lost (R-887); something sets the shared
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
| <a id="a20"></a>[A20](capability-map-detail/A.md#a20) | Customer RESET (middle lifecycle tier: host delete < RESET < customer Delete): one operator action → pre-first-install; all operational state destroyed, identity + basic config survive | hub v0.61.0, felhom-tenantsync v1.1.0 | **PROVEN-LIVE** | two real firings | `tests/VALIDATION-n100-rehearsal-2026-07-18.md` (2026-07-18) |
|
||||
| <a id="a21"></a>[A21](capability-map-detail/A.md#a21) | Customer DELETE cascade (top lifecycle tier): one guided operator action → `hosts → RESET → residue → purge`; host rows deleted (custody DEMOTED), full external teardown (Hetzner repo destroyed, PBS namespace/token revoked, tunnel + zone removed), then the customer record and ALL escrow ciphertext purged | hub v0.69.0 | **IMPLEMENTED** | written UNIT-PROVEN: live leg pending | hub unit tests `hub/internal/web/customer_delete_test.go` (outside `documentation/`) |
|
||||
| <a id="a22"></a>[A22](capability-map-detail/A.md#a22) | Uninstall: KEPT-vs-WIPED statement, secret purge, enrolled-drive handling | installer | **PARTIAL** | GL6-F2 open | `pilot/DRILL-GL6-2026-07-08.md` (2026-07-08); R-9 |
|
||||
| <a id="a23"></a>[A23](capability-map-detail/A.md#a23) | Felhom in a virtual machine on OpenMediaVault 8 (KVM plugin): the whole NVMe passed to the VM, installed from the public ISO, bound, claimed, apps, backup, and back by itself after an OMV restart | ISO 1.29.0, agent 0.156.1, controller 0.314.0, OMV 8.5.11-1 + openmediavault-kvm 8.3.4 | **PARTIAL** | live on an exact OMV copy (VM on demo-hp), not yet on the pilot's real hardware; one-disk Jellyfin not proven (R-1068); NAS films not usable by Jellyfin (R-1071); no SMART inside the VM (R-1073) | `audits/omv-vm-2026-10-15/README.md` (2026-10-15); guide `pilot/GUIDE-omv-kvm-hu.md` |
|
||||
|
||||
## B. Apps & catalog
|
||||
|
||||
|
||||
@@ -412,3 +412,29 @@ likewise silent. Evidence: `audits/DRILL-r361-2026-08-22/evidence/06-part3-decis
|
||||
**Gap / roadmap (as written):** Secret purge (GL6-F1 `.bak` residue) fixed v1.12.0; enrolled-drive `mnt-*.mount` units survive (GL6-F2, open); cluster-aware `felhom_guests` guard + saferemove cost warning missing → R-9
|
||||
|
||||
---
|
||||
|
||||
<a id="a23"></a>
|
||||
## A23 — Felhom in a virtual machine on OpenMediaVault 8 (KVM plugin)
|
||||
|
||||
*Map row: [A23](../00-capability-map.md#a23) · added 2026-10-15.*
|
||||
|
||||
**Scenario:** a household that already runs OMV 8 keeps it and gives Felhom a VM made with the `openmediavault-kvm`
|
||||
plugin, with one whole NVMe passed to the VM. Done through the OMV web pages on an exact copy of the pilot tester's box.
|
||||
|
||||
**Components:** public ISO 1.29.0, agent 0.156.1, controller 0.313.0 → 0.314.0 (auto-floor), OMV 8.5.11-1 with kernel
|
||||
7.2.6, openmediavault-kvm 8.3.4.
|
||||
|
||||
**Status:** **PARTIAL** (2026-10-15).
|
||||
|
||||
**Proven live on the copy:** plugin install; ISO download with sha256 inside the plugin; the bridge (with an IP change);
|
||||
the plugin's default BIOS firmware boots the ISO; whole-NVMe install; self-bind; auto-floor; claim; Vaultwarden;
|
||||
local whole-guest backup; a clean guest shutdown and AutoStart over an OMV restart (dashboard back in 1 min 52 s);
|
||||
Jellyfin after a second disk attached on bus `sata`. Guest memory 7,863 MiB of a 12 GiB VM.
|
||||
|
||||
**Gaps:** not on real hardware yet; one-disk Jellyfin (R-1068); virtio-bus second disk not formattable (R-1069); the
|
||||
tunnel-less OS-update alarm (R-1070); NAS films for Jellyfin (R-1071); no SMART in a VM (R-1073); UEFI and the
|
||||
plugin's noVNC console page not exercised.
|
||||
|
||||
**Evidence:** `audits/omv-vm-2026-10-15/README.md`; the guide `pilot/GUIDE-omv-kvm-hu.md`.
|
||||
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
2026-10-15T14:48:35Z
|
||||
before:
|
||||
Mem: 29994 14358 5781 211 10505 15635
|
||||
1
|
||||
stopped-341
|
||||
status: stopped
|
||||
Mem: 29994 6554 13463 211 10626 23440
|
||||
@@ -0,0 +1,20 @@
|
||||
args: -drive file=/mnt/hdd_1/images/9310/vm-9310-disk-2.raw,if=none,id=fakenvme,format=raw,cache=none -device nvme,drive=fakenvme,serial=S64DNF0R980500
|
||||
balloon: 0
|
||||
bios: ovmf
|
||||
boot: order=scsi0
|
||||
cores: 4
|
||||
cpu: host
|
||||
efidisk0: nvme-scratch:9310/vm-9310-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K
|
||||
ide2: none,media=cdrom
|
||||
machine: q35
|
||||
memory: 16384
|
||||
meta: creation-qemu=11.0.3,ctime=1792075878
|
||||
name: omv-sim
|
||||
net0: virtio=BC:24:11:69:24:25,bridge=vmbr0
|
||||
ostype: l26
|
||||
scsi0: nvme-scratch:9310/vm-9310-disk-1.raw,serial=OMVSYS128SSD,size=32G
|
||||
scsi1: nvme-scratch:9310/vm-9310-disk-3.raw,serial=TOSHIBAMQ01ABF050,size=20G
|
||||
scsihw: virtio-scsi-single
|
||||
smbios1: uuid=3a6fa3ec-75bf-4ae8-b493-f4abefc97c78
|
||||
vga: std
|
||||
vmgenid: d600eb5c-9218-47d1-ba87-a6682f8e87e1
|
||||
@@ -0,0 +1,33 @@
|
||||
Formatting '/mnt/hdd_1/images/9310/vm-9310-disk-0.raw', fmt=raw size=540672 preallocation=off
|
||||
transferred 0.0 B of 528.0 KiB (0.00%)
|
||||
transferred 528.0 KiB of 528.0 KiB (100.00%)
|
||||
transferred 528.0 KiB of 528.0 KiB (100.00%)
|
||||
efidisk0: successfully created disk 'nvme-scratch:9310/vm-9310-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K'
|
||||
Formatting '/mnt/hdd_1/images/9310/vm-9310-disk-1.raw', fmt=raw size=34359738368 preallocation=off
|
||||
scsi0: successfully created disk 'nvme-scratch:9310/vm-9310-disk-1.raw,serial=OMVSYS128SSD,size=32G'
|
||||
Formatting '/mnt/hdd_1/images/9310/vm-9310-disk-2.raw', fmt=raw size=214748364800 preallocation=off
|
||||
successfully created 'nvme-scratch:9310/vm-9310-disk-2.raw'
|
||||
update VM 9310: -args -drive file=/mnt/hdd_1/images/9310/vm-9310-disk-2.raw,if=none,id=fakenvme,format=raw,cache=none -device nvme,drive=fakenvme,serial=S64DNF0R980500
|
||||
args: -drive file=/mnt/hdd_1/images/9310/vm-9310-disk-2.raw,if=none,id=fakenvme,format=raw,cache=none -device nvme,drive=fakenvme,serial=S64DNF0R980500
|
||||
balloon: 0
|
||||
bios: ovmf
|
||||
boot: order=scsi0;net0
|
||||
cores: 4
|
||||
cpu: host
|
||||
efidisk0: nvme-scratch:9310/vm-9310-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K
|
||||
machine: q35
|
||||
memory: 16384
|
||||
meta: creation-qemu=11.0.3,ctime=1792075878
|
||||
name: omv-sim
|
||||
net0: virtio=BC:24:11:69:24:25,bridge=vmbr0
|
||||
ostype: l26
|
||||
scsi0: nvme-scratch:9310/vm-9310-disk-1.raw,serial=OMVSYS128SSD,size=32G
|
||||
scsihw: virtio-scsi-single
|
||||
smbios1: uuid=3a6fa3ec-75bf-4ae8-b493-f4abefc97c78
|
||||
vga: std
|
||||
vmgenid: d600eb5c-9218-47d1-ba87-a6682f8e87e1
|
||||
540K /mnt/hdd_1/images/9310
|
||||
total 536
|
||||
528 -rw-r----- 1 root root 540672 Oct 15 16:51 vm-9310-disk-0.raw
|
||||
4 -rw-r----- 1 root root 34359738368 Oct 15 16:51 vm-9310-disk-1.raw
|
||||
4 -rw-r----- 1 root root 214748364800 Oct 15 16:51 vm-9310-disk-2.raw
|
||||
@@ -0,0 +1,45 @@
|
||||
# Part A — omv-sim, read 2026-10-15T15:10:22Z
|
||||
--- os
|
||||
13.7
|
||||
7.2.6+deb13-amd64
|
||||
ii openmediavault 8.5.11-1 all openmediavault - The open network attached storage solution
|
||||
ii openmediavault-omvextrasorg 8.0.3 all OMV-Extras.org Package Repositories for OpenMediaVault
|
||||
--- cpu/mem
|
||||
4
|
||||
model name : AMD Ryzen Embedded V1756B with Radeon Vega Gfx
|
||||
4
|
||||
Mem: 15926 556 14125 10 1533 15369
|
||||
--- disks
|
||||
NAME SIZE MODEL SERIAL FSTYPE MOUNTPOINTS
|
||||
sda 32G QEMU HARDDISK OMVSYS128SSD
|
||||
├─sda1 976M vfat /boot/efi
|
||||
├─sda2 29.4G ext4 /
|
||||
└─sda3 1.7G swap [SWAP]
|
||||
sdb 20G QEMU HARDDISK TOSHIBAMQ01ABF050
|
||||
sr0 1024M QEMU DVD-ROM QM00003
|
||||
nvme0n1 200G QEMU NVMe Ctrl S64DNF0R980500
|
||||
└─nvme0n1p1 200G ext4 /srv/dev-disk-by-uuid-faf49e6e-b4fa-49cd-9849-69d549949d1f
|
||||
--- films
|
||||
total 921608
|
||||
drwxrwsrwx 2 root users 4096 Oct 15 17:10 .
|
||||
drwxr-xr-x 4 root root 4096 Oct 15 17:08 ..
|
||||
-rw-rw-rw- 1 root users 314572800 Oct 15 17:10 Csalad_nyaralas_2019.mkv
|
||||
-rw-rw-rw- 1 root users 314572800 Oct 15 17:10 Kedvenc_film.mkv
|
||||
-rw-rw-rw- 1 root users 314572800 Oct 15 17:10 Nagyi_szulinap.mkv
|
||||
--- network
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
ens18 UP 192.168.0.119/24 metric 100
|
||||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
network:
|
||||
ethernets:
|
||||
ens18:
|
||||
match:
|
||||
macaddress: "bc:24:11:69:24:25"
|
||||
dhcp4: yes
|
||||
dhcp4-overrides:
|
||||
use-dns: true
|
||||
use-domains: true
|
||||
dhcp6: no
|
||||
link-local: [ipv4]
|
||||
@@ -0,0 +1,5 @@
|
||||
done: SHA256:cbVrVDbsRvCMwwhMxuOa06NKQK/Nmm1LxACPbbCSkY0 root@omv-browser
|
||||
Creating SSH host key 'ssh_host_ed25519_key' - this may take some time ...
|
||||
done: SHA256:+yA1hWWI7N4alcnlx93fMu9Th6VwhMU2qA24MJqilZQ root@omv-browser
|
||||
lo UNKNOWN 127.0.0.1/8
|
||||
eth0@if23 UP 192.168.0.122/24
|
||||
@@ -0,0 +1,15 @@
|
||||
# B1 — the network bridge, done in the OMV web page (Hálózat → Interfészek), 2026-10-15 (UTC)
|
||||
15:27:42 before: ens18 DHCP 192.168.0.119 (MAC bc:24:11:69:24:25), in OMV's own list -> B1-network-before.txt
|
||||
15:28 Létrehozás → Híd: the „Interfészek" list was EMPTY while ens18 had its own setting (OMV offers only unused cards)
|
||||
15:29 ens18 deleted (Törlés, not applied) → the list then offered „ens18 [bc:24:11:69:24:25]"
|
||||
15:29 br0 saved: member ens18, IPv4 DHCP, MAC cím empty (the default)
|
||||
15:30:22 Alkalmaz pressed (with the Megerősítés tick)
|
||||
15:30:49 http://192.168.0.119 stopped answering (27 s later); the browser stayed on „Kérjük várjon a konfigurációs változások érvénybe lépéséig..." for good
|
||||
15:31-33 br0 got MAC 42:6a:75:de:79:02 (generated) and a NEW address 192.168.0.121 -> B1-network-after-bridge-nomac.txt
|
||||
the console banner still said „ens18: 192.168.0.119" (stale) -> screens/omv-30-after-bridge.png, omv-31-real-ip.png
|
||||
15:33:59 fix attempt: br0 edited, „MAC cím" = the card's MAC bc:24:11:69:24:25, Alkalmaz at 15:34:19
|
||||
15:34:25 .121 stopped answering; br0 then had the card's MAC but a THIRD address 192.168.0.123 (not .119)
|
||||
reason: systemd-networkd asks DHCP with its own client ID (DUID), not only the MAC, so the router sees a new client
|
||||
the console banner said „br0: 192.168.0.121" (stale again) -> screens/omv-32-after-mac.png
|
||||
15:46 http://omv-sim.local resolved to 192.168.0.123 (OMV's avahi answers mDNS) — the working way to find OMV again
|
||||
RESULT: the bridge works; OMV's address CHANGES; the old browser tab hangs; the screen text is stale; <name>.local or the router's list finds it.
|
||||
@@ -0,0 +1,2 @@
|
||||
15:29:08 119 web=up
|
||||
15:30:49 119 web=DOWN
|
||||
@@ -0,0 +1,2 @@
|
||||
15:33:37 119=000 121=200
|
||||
15:34:25 119=000 121=000
|
||||
@@ -0,0 +1,31 @@
|
||||
Warning: Permanently added '192.168.0.121' (ED25519) to the list of known hosts.
|
||||
--- after bridge (no MAC set) 15:33:48
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
ens18 UP
|
||||
lxcbr0 DOWN 10.0.3.1/24 fc42:5009:ba4b:5ab0::1/64
|
||||
br0 UP 192.168.0.121/24 metric 100
|
||||
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
|
||||
ens18 UP bc:24:11:69:24:25 <BROADCAST,MULTICAST,UP,LOWER_UP>
|
||||
lxcbr0 DOWN 10:66:6a:00:00:00 <NO-CARRIER,BROADCAST,MULTICAST,UP>
|
||||
br0 UP 42:6a:75:de:79:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
|
||||
== /etc/netplan/10-openmediavault-default.yaml
|
||||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
== /etc/netplan/60-openmediavault-br0.yaml
|
||||
network:
|
||||
ethernets:
|
||||
ens18:
|
||||
addresses: []
|
||||
dhcp4: false
|
||||
dhcp6: false
|
||||
bridges:
|
||||
br0:
|
||||
dhcp4: yes
|
||||
dhcp4-overrides:
|
||||
use-dns: true
|
||||
use-domains: true
|
||||
dhcp6: no
|
||||
link-local: []
|
||||
interfaces:
|
||||
- ens18
|
||||
@@ -0,0 +1,33 @@
|
||||
2026-10-15T15:27:42Z
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
ens18 UP 192.168.0.119/24 metric 100
|
||||
lxcbr0 DOWN 10.0.3.1/24 fc42:5009:ba4b:5ab0::1/64
|
||||
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
|
||||
ens18 UP bc:24:11:69:24:25 <BROADCAST,MULTICAST,UP,LOWER_UP>
|
||||
lxcbr0 DOWN 10:66:6a:00:00:00 <NO-CARRIER,BROADCAST,MULTICAST,UP>
|
||||
default via 192.168.0.1 dev ens18 proto dhcp src 192.168.0.119 metric 100
|
||||
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 linkdown
|
||||
192.168.0.0/24 dev ens18 proto kernel scope link src 192.168.0.119 metric 100
|
||||
192.168.0.1 dev ens18 proto dhcp scope link src 192.168.0.119 metric 100
|
||||
192.168.0.250 dev ens18 proto dhcp scope link src 192.168.0.119 metric 100
|
||||
10-openmediavault-default.yaml
|
||||
20-openmediavault-ens18.yaml
|
||||
== /etc/netplan/10-openmediavault-default.yaml
|
||||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
== /etc/netplan/20-openmediavault-ens18.yaml
|
||||
network:
|
||||
ethernets:
|
||||
ens18:
|
||||
match:
|
||||
macaddress: "bc:24:11:69:24:25"
|
||||
dhcp4: yes
|
||||
dhcp4-overrides:
|
||||
use-dns: true
|
||||
use-domains: true
|
||||
dhcp6: no
|
||||
link-local: [ipv4]
|
||||
[{"uuid":"06183855-37d0-422d-ae0a-2b6b0020937f","type":"ethernet","devicename":"ens18","method":"dhcp","address":"","netmask":"","gateway":"","routemetric":0,"method6":"manual","address6":"","netmask6":64,"gateway6":"","routemetric6":1,"dnsnameservers":"","dnssearch":"","mtu":0,"wol":false,"comment":"","altmacaddress":"","slaves":[],"bondprimary":"","bondmode":1,"bondmiimon":0,"bonddowndelay":0,"bondupdelay":0,"bondtransmithashpolicy":"layer2","vlanid":1,"vlanrawdevice":"","band":"auto","wpassid":"","wpapsk":"","keymanagement":"psk","hidden":false,"_used":false,"_readonly":false}]
|
||||
|
||||
{"total":1,"data":[{"uuid":"06183855-37d0-422d-ae0a-2b6b0020937f","type":"ethernet","devicename":"ens18","method":"dhcp","address":"","netmask":"","gateway":"","routemetric":0,"method6":"manual","address6":"","netmask6":64,"gateway6":"","routemetric6":1,"dnsnameservers":"","dnssearch":"","mtu":0,"wol":false,"comment":"","altmacaddress":"","slaves":[],"bondprimary":"","bondmode":1,"bondmiimon":0,"bonddowndelay":0,"bondupdelay":0,"bondtransmithashpolicy":"layer2","vlanid":1,"vlanrawdevice":"","band":"auto","wpassid":"","wpapsk":"","keymanagement":"psk","hidden":false,"_used":false,"_readonly":false}]}
|
||||
@@ -0,0 +1,249 @@
|
||||
<domain type='kvm' id='2'>
|
||||
<name>felhom</name>
|
||||
<uuid>c0da5af7-2366-4cd5-b0d0-7340cf18984e</uuid>
|
||||
<metadata>
|
||||
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
|
||||
<libosinfo:os id="http://debian.org/debian/13"/>
|
||||
</libosinfo:libosinfo>
|
||||
</metadata>
|
||||
<memory unit='KiB'>12582912</memory>
|
||||
<currentMemory unit='KiB'>12582912</currentMemory>
|
||||
<vcpu placement='static'>4</vcpu>
|
||||
<resource>
|
||||
<partition>/machine</partition>
|
||||
</resource>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
<boot dev='cdrom'/>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
<apic/>
|
||||
<vmport state='off'/>
|
||||
</features>
|
||||
<cpu mode='host-passthrough' check='none' migratable='off'/>
|
||||
<clock offset='utc'>
|
||||
<timer name='rtc' tickpolicy='catchup'/>
|
||||
<timer name='pit' tickpolicy='delay'/>
|
||||
<timer name='hpet' present='no'/>
|
||||
</clock>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<pm>
|
||||
<suspend-to-mem enabled='no'/>
|
||||
<suspend-to-disk enabled='no'/>
|
||||
</pm>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
|
||||
<source dev='/dev/disk/by-id/nvme-nvme.1b36-533634444e463052393830353030-51454d55204e564d65204374726c-00000001' index='2'/>
|
||||
<backingStore/>
|
||||
<target dev='vdb' bus='virtio'/>
|
||||
<alias name='virtio-disk1'/>
|
||||
<address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
|
||||
</disk>
|
||||
<disk type='file' device='cdrom'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source file='/srv/felhom-iso/felhom-installer-1.29.0-pve9.2-1.iso' index='1'/>
|
||||
<backingStore/>
|
||||
<target dev='sda' bus='sata'/>
|
||||
<readonly/>
|
||||
<alias name='sata0-0-0'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
|
||||
<alias name='usb'/>
|
||||
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pcie-root'>
|
||||
<alias name='pcie.0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='1' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='1' port='0x10'/>
|
||||
<alias name='pci.1'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
|
||||
</controller>
|
||||
<controller type='pci' index='2' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='2' port='0x11'/>
|
||||
<alias name='pci.2'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='pci' index='3' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='3' port='0x12'/>
|
||||
<alias name='pci.3'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='4' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='4' port='0x13'/>
|
||||
<alias name='pci.4'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
|
||||
</controller>
|
||||
<controller type='pci' index='5' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='5' port='0x14'/>
|
||||
<alias name='pci.5'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
|
||||
</controller>
|
||||
<controller type='pci' index='6' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='6' port='0x15'/>
|
||||
<alias name='pci.6'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
|
||||
</controller>
|
||||
<controller type='pci' index='7' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='7' port='0x16'/>
|
||||
<alias name='pci.7'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
|
||||
</controller>
|
||||
<controller type='pci' index='8' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='8' port='0x17'/>
|
||||
<alias name='pci.8'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
|
||||
</controller>
|
||||
<controller type='pci' index='9' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='9' port='0x18'/>
|
||||
<alias name='pci.9'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
|
||||
</controller>
|
||||
<controller type='pci' index='10' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='10' port='0x19'/>
|
||||
<alias name='pci.10'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='pci' index='11' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='11' port='0x1a'/>
|
||||
<alias name='pci.11'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='12' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='12' port='0x1b'/>
|
||||
<alias name='pci.12'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
|
||||
</controller>
|
||||
<controller type='pci' index='13' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='13' port='0x1c'/>
|
||||
<alias name='pci.13'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
|
||||
</controller>
|
||||
<controller type='pci' index='14' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='14' port='0x1d'/>
|
||||
<alias name='pci.14'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
|
||||
</controller>
|
||||
<controller type='sata' index='0'>
|
||||
<alias name='ide'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<alias name='virtio-serial0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:3e:aa:ea'/>
|
||||
<source bridge='br0'/>
|
||||
<target dev='vnet1'/>
|
||||
<model type='virtio'/>
|
||||
<alias name='net0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
</interface>
|
||||
<serial type='pty'>
|
||||
<source path='/dev/pts/0'/>
|
||||
<target type='isa-serial' port='0'>
|
||||
<model name='isa-serial'/>
|
||||
</target>
|
||||
<alias name='serial0'/>
|
||||
</serial>
|
||||
<console type='pty' tty='/dev/pts/0'>
|
||||
<source path='/dev/pts/0'/>
|
||||
<target type='serial' port='0'/>
|
||||
<alias name='serial0'/>
|
||||
</console>
|
||||
<channel type='unix'>
|
||||
<source mode='bind' path='/run/libvirt/qemu/channel/2-felhom/org.qemu.guest_agent.0'/>
|
||||
<target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
|
||||
<alias name='channel0'/>
|
||||
<address type='virtio-serial' controller='0' bus='0' port='1'/>
|
||||
</channel>
|
||||
<channel type='spicevmc'>
|
||||
<target type='virtio' name='com.redhat.spice.0' state='connected'/>
|
||||
<alias name='channel1'/>
|
||||
<address type='virtio-serial' controller='0' bus='0' port='2'/>
|
||||
</channel>
|
||||
<input type='tablet' bus='usb'>
|
||||
<alias name='input0'/>
|
||||
<address type='usb' bus='0' port='1'/>
|
||||
</input>
|
||||
<input type='mouse' bus='ps2'>
|
||||
<alias name='input1'/>
|
||||
</input>
|
||||
<input type='keyboard' bus='ps2'>
|
||||
<alias name='input2'/>
|
||||
</input>
|
||||
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
|
||||
<listen type='address' address='0.0.0.0'/>
|
||||
</graphics>
|
||||
<graphics type='spice' port='5901' autoport='yes' listen='0.0.0.0'>
|
||||
<listen type='address' address='0.0.0.0'/>
|
||||
<image compression='off'/>
|
||||
</graphics>
|
||||
<audio id='1' type='spice'/>
|
||||
<video>
|
||||
<model type='virtio' heads='1' primary='yes'/>
|
||||
<alias name='video0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
||||
</video>
|
||||
<redirdev bus='usb' type='spicevmc'>
|
||||
<alias name='redir0'/>
|
||||
<address type='usb' bus='0' port='2'/>
|
||||
</redirdev>
|
||||
<redirdev bus='usb' type='spicevmc'>
|
||||
<alias name='redir1'/>
|
||||
<address type='usb' bus='0' port='3'/>
|
||||
</redirdev>
|
||||
<watchdog model='itco' action='reset'>
|
||||
<alias name='watchdog0'/>
|
||||
</watchdog>
|
||||
<memballoon model='none'/>
|
||||
<rng model='virtio'>
|
||||
<backend model='random'>/dev/urandom</backend>
|
||||
<alias name='rng0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
|
||||
</rng>
|
||||
</devices>
|
||||
<seclabel type='dynamic' model='dac' relabel='yes'>
|
||||
<label>+64055:+64055</label>
|
||||
<imagelabel>+64055:+64055</imagelabel>
|
||||
</seclabel>
|
||||
</domain>
|
||||
|
||||
Id: 2
|
||||
Name: felhom
|
||||
UUID: c0da5af7-2366-4cd5-b0d0-7340cf18984e
|
||||
OS Type: hvm
|
||||
State: running
|
||||
CPU(s): 4
|
||||
CPU time: 117.8s
|
||||
Max memory: 12582912 KiB
|
||||
Used memory: 12582912 KiB
|
||||
Persistent: yes
|
||||
Autostart: enable
|
||||
Autostart Once: disable
|
||||
Managed save: no
|
||||
Security model: none
|
||||
Security DOI: 0
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Felhom — Doboz összekötése :root { --navy:#0A2540; --ink:#0A2540; --muted:#5b6b7d; --line:#d8e0e8; --brand:#0083D8; --exc:#c0392b; --bg:#f4f7fa; } * { box-sizing: border-box; } body { margin:0; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; background:var(--bg); color:var(--ink); line-height:1.5; } .wrap { max-width:460px; margin:3rem auto; padding:0 1rem; } .card { background:#fff; border:1px solid var(--line); border-radius:2px; padding:1.75rem; } h1 { font-size:1.25rem; margin:0 0 .25rem; color:var(--navy); } h1 span { color:var(--brand); } .lead { color:var(--muted); font-size:.92rem; margin:.25rem 0 1.25rem; } label { display:block; font-weight:600; font-size:.9rem; margin:1rem 0 .35rem; } .hint { color:var(--muted); font-size:.8rem; margin:.15rem 0 0; } input[type=text] { width:100%; padding:.6rem .7rem; border:1px solid var(--line); border-radius:2px; font-size:1rem; } input.code { text-transform:uppercase; letter-spacing:.12em; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; } button { margin-top:1.5rem; width:100%; padding:.7rem; background:var(--brand); color:#fff; border:none; border-radius:2px; font-size:1rem; cursor:pointer; } button:hover { background:#006cb0; } .banner { border:1px solid var(--exc); color:var(--exc); background:#fbeae8; border-radius:2px; padding:.6rem .75rem; font-size:.88rem; margin:0 0 1rem; } .note { border-top:1px solid var(--line); margin-top:1.5rem; padding-top:1rem; color:var(--muted); font-size:.82rem; } .foot { text-align:center; color:var(--muted); font-size:.75rem; margin-top:1.25rem; } .ok { color:#1e7e34; } Felhom doboz összekötése Sikeres összekötés. A doboz kb. egy percen belül folytatja a telepítést. Ezt az oldalt bezárhatod — a beállítás a háttérben befejeződik, és a vezérlőpultod hamarosan elérhető lesz. Felhom.eu
|
||||
@@ -0,0 +1,4 @@
|
||||
HTTP/2 302
|
||||
date: Thu, 15 Oct 2026 16:24:25 GMT
|
||||
location: /
|
||||
location: /
|
||||
@@ -0,0 +1,4 @@
|
||||
install pressed 16:06:52
|
||||
pairing screen seen 16:11:07
|
||||
bind posted 16:11:08
|
||||
claim posted 16:24:25
|
||||
@@ -0,0 +1,183 @@
|
||||
===== /backups (16:33:03)
|
||||
Biztonsági mentés — Felhom.eu
|
||||
if(!el||el.dataset.fcOpen)return;
|
||||
el.dataset.fcOpen='1';
|
||||
wrap.appendChild(q);wrap.appendChild(yes);wrap.appendChild(no);
|
||||
el.style.display='none';el.parentNode.insertBefore(wrap,el.nextSibling);
|
||||
no.addEventListener('click',close);
|
||||
if(!btn)return;
|
||||
e.preventDefault();
|
||||
if(!btn)return;
|
||||
if(!group)return;
|
||||
g.classList.remove('is-open');
|
||||
if(t)t.setAttribute('aria-expanded','false');
|
||||
Indítópult
|
||||
Vezérlőpult
|
||||
Alkalmazások
|
||||
Tárhely
|
||||
Meghajtók
|
||||
Hálózati tárhely
|
||||
Biztonsági mentés
|
||||
Áttekintés
|
||||
Távoli mentés
|
||||
Alkalmazások
|
||||
Visszaállítás
|
||||
Megosztás
|
||||
Hálózati megosztás
|
||||
Rendszermonitor
|
||||
Hibakeresés
|
||||
Beállítások
|
||||
Rendszer
|
||||
Értesítések
|
||||
Biztonság és hozzáférés
|
||||
0.314.0
|
||||
Magyar
|
||||
English
|
||||
Kijelentkezés ↗
|
||||
Biztonsági mentés
|
||||
tester4.test
|
||||
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.
|
||||
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.
|
||||
Tárhely áttekintés
|
||||
Rendszer
|
||||
1,19 GB / 68,7 GB (2%)
|
||||
DB mentések
|
||||
–
|
||||
Rendszermentés (teljes mentés)
|
||||
A teljes szerver — alkalmazások, beállítások és adatbázisok együtt — időszakos mentése, amelyből az egész készülék visszaállítható. Ezt a host-ügynök készíti és kezeli.
|
||||
✓
|
||||
Utolsó teljes mentés
|
||||
2026. 10. 15. 18:19 (13 perce)
|
||||
645,2 MB
|
||||
Helyi tároló (local)
|
||||
Naprakész
|
||||
Következő mentés
|
||||
az előző 0 órája készült — a mentési időn belül
|
||||
–
|
||||
Visszaállítás ellenőrizve
|
||||
Még nem futott
|
||||
Helyi tároló (local)
|
||||
✓ Utolsó sikeres mentés: 2026. 10. 15. 18:19 (13 perce) · 645,2 MB
|
||||
Naprakész
|
||||
===== /backups/apps (16:33:03)
|
||||
Biztonsági mentés — Alkalmazások — Felhom.eu
|
||||
if(!el||el.dataset.fcOpen)return;
|
||||
el.dataset.fcOpen='1';
|
||||
wrap.appendChild(q);wrap.appendChild(yes);wrap.appendChild(no);
|
||||
el.style.display='none';el.parentNode.insertBefore(wrap,el.nextSibling);
|
||||
no.addEventListener('click',close);
|
||||
if(!btn)return;
|
||||
e.preventDefault();
|
||||
if(!btn)return;
|
||||
if(!group)return;
|
||||
g.classList.remove('is-open');
|
||||
if(t)t.setAttribute('aria-expanded','false');
|
||||
Indítópult
|
||||
Vezérlőpult
|
||||
Alkalmazások
|
||||
Tárhely
|
||||
Meghajtók
|
||||
Hálózati tárhely
|
||||
Biztonsági mentés
|
||||
Áttekintés
|
||||
Távoli mentés
|
||||
Alkalmazások
|
||||
Visszaállítás
|
||||
Megosztás
|
||||
Hálózati megosztás
|
||||
Rendszermonitor
|
||||
Hibakeresés
|
||||
Beállítások
|
||||
Rendszer
|
||||
Értesítések
|
||||
Biztonság és hozzáférés
|
||||
0.314.0
|
||||
Magyar
|
||||
English
|
||||
Kijelentkezés ↗
|
||||
Biztonsági mentés — Alkalmazások
|
||||
tester4.test
|
||||
Alkalmazás-mentések (adatbázis + konfiguráció)
|
||||
Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.
|
||||
Ütemezés
|
||||
Adatbázis mentés
|
||||
02:30
|
||||
Következő: holnap 02:30
|
||||
Utolsó adatbázis mentés:
|
||||
2026. 10. 15. 18:31 (1 perce)
|
||||
<button class="btn btn-sm btn-primary" onclick="triggerBackupFromPage()" id="backup-page-btn"
|
||||
>
|
||||
Mentés most
|
||||
Adatbázisok
|
||||
A telepített alkalmazások beágyazott adatbázist használnak (pl. SQLite) — adatbázisuk a fájl- és kötetmentés része, külön adatbázis-kiírás nem szükséges.
|
||||
Alkalmazások mentési állapota
|
||||
<img class="app-row-icon" src="/static/assets/vaultwarden-logo.svg" alt="" data-fallback="/static/app-placeholder.svg"
|
||||
Vaultwarden
|
||||
Konfig + Adatok
|
||||
▶
|
||||
1. mentés
|
||||
Auto
|
||||
helyi
|
||||
Utolsó: 1 perce
|
||||
—
|
||||
===== /backups/remote (16:33:03)
|
||||
Biztonsági mentés — Távoli mentés — Felhom.eu
|
||||
if(!el||el.dataset.fcOpen)return;
|
||||
el.dataset.fcOpen='1';
|
||||
wrap.appendChild(q);wrap.appendChild(yes);wrap.appendChild(no);
|
||||
el.style.display='none';el.parentNode.insertBefore(wrap,el.nextSibling);
|
||||
no.addEventListener('click',close);
|
||||
if(!btn)return;
|
||||
e.preventDefault();
|
||||
if(!btn)return;
|
||||
if(!group)return;
|
||||
g.classList.remove('is-open');
|
||||
if(t)t.setAttribute('aria-expanded','false');
|
||||
Indítópult
|
||||
Vezérlőpult
|
||||
Alkalmazások
|
||||
Tárhely
|
||||
Meghajtók
|
||||
Hálózati tárhely
|
||||
Biztonsági mentés
|
||||
Áttekintés
|
||||
Távoli mentés
|
||||
Alkalmazások
|
||||
Visszaállítás
|
||||
Megosztás
|
||||
Hálózati megosztás
|
||||
Rendszermonitor
|
||||
Hibakeresés
|
||||
Beállítások
|
||||
Rendszer
|
||||
Értesítések
|
||||
Biztonság és hozzáférés
|
||||
0.314.0
|
||||
Magyar
|
||||
English
|
||||
Kijelentkezés ↗
|
||||
Biztonsági mentés — Távoli mentés
|
||||
tester4.test
|
||||
Felhom offsite tárhely — igényelhető szolgáltatás. Titkosított, házon kívüli másolat a mentéseidről. Érdeklődj az üzemeltetőnél.
|
||||
Távoli mentés (3. mentés) — titkosított, offsite
|
||||
Az alkalmazás-mentések titkosított másolata egy távoli tárolóra — saját NAS vagy Felhom offsite tárhely — restic + SFTP kapcsolaton. A tároló csak titkosított adatot lát. Ez a 3-2-1 szabály „1 off-site" lába — független a helyi másodpéldánytól és a teljes rendszermentéstől.
|
||||
Még nincs beállítva távoli mentési cél.
|
||||
Távoli mentési cél beállítása
|
||||
Cél címe (IP vagy hosztnév — NAS vagy SFTP-kiszolgáló)
|
||||
SSH port
|
||||
Felhasználó
|
||||
Tároló útvonala a célgépen
|
||||
Napi automatikus távoli mentés engedélyezve
|
||||
SSH privát kulcs
|
||||
A kulcsot 0600-as fájlba írjuk; sosem naplózzuk és nem tároljuk a beállításokban.
|
||||
A célgép ismert-host sora (known_hosts)
|
||||
A host-kulcs rögzítése (no blind TOFU). Lekérdezhető: ssh-keyscan -p <port> <host>
|
||||
Mentés
|
||||
if(!d) return;
|
||||
sawRunning = true; quiet = 0;
|
||||
text.textContent = 'Adatbázisok mentése a pillanatképhez…';
|
||||
bar.style.width = '100%';
|
||||
box.className = 'alert alert-info'; box.style.display = '';
|
||||
return;
|
||||
text.textContent = 'Karbantartás: régi mentések rendezése a távoli tárolón…';
|
||||
bar.style.width = '100%';
|
||||
@@ -0,0 +1,8 @@
|
||||
--- tiers before 16:31:35
|
||||
404 page not found
|
||||
|
||||
|
||||
--- run 16:31:36
|
||||
200
|
||||
{"ok":true,"message":"Mentés elindítva"}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
jellyfin deploy 16:25:21
|
||||
400
|
||||
{"ok":false,"error":"a(z) \"Médiatár útvonal\" (HDD_PATH) mező kitöltése kötelező"}
|
||||
|
||||
vaultwarden deploy 16:25:21
|
||||
202
|
||||
{"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
|
||||
register-mounted 16:51:11
|
||||
200
|
||||
{"data":{"registered":true,"where":"/mnt/felhom-drives/adatlemez"},"ok":true}
|
||||
|
||||
jellyfin deploy 2 16:51:12
|
||||
202
|
||||
{"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
|
||||
jellyfin deploy 3 17:06:33
|
||||
202
|
||||
{"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
|
||||
17:07:03 True running False
|
||||
@@ -0,0 +1,14 @@
|
||||
poweroff posted 16:34:57
|
||||
202
|
||||
{"data":{"powering_off":true},"ok":true}
|
||||
|
||||
VM shut off 16:35:44
|
||||
poweroff 2 posted 16:40:32
|
||||
409
|
||||
{"data":{"code":"too_soon_after_boot"},"error":"A gép most indult el. 10 perc múlva kapcsolhatod ki.","ok":false}
|
||||
|
||||
poweroff 3 posted 16:46:43
|
||||
202
|
||||
{"data":{"powering_off":true},"ok":true}
|
||||
|
||||
VM shut off 16:47:20
|
||||
@@ -0,0 +1,43 @@
|
||||
format 16:37:23
|
||||
500
|
||||
{"error":"agentapi: format: HTTP 409: format refused: device has no durable id to bind the format to (path-only formats are not permitted)","ok":false}
|
||||
|
||||
404 page not found
|
||||
format (sata) 16:50:07
|
||||
200
|
||||
{"data":{"vmid":9201,"device":"/dev/sda","formatted":true,"data_bearing":false,"reason":"blank device formatted ext4","durable_id":"byid:ata-QEMU_HARDDISK_QM00003","fs_uuid":"9a262222-1d94-4e1f-bf90-68f7b9b495d9"},"ok":true}
|
||||
|
||||
local local attached system False 62822084608
|
||||
local-lvm lvmthin attached system False 121269911552
|
||||
assign 16:50:32
|
||||
200
|
||||
{"data":{"uuid":"9a262222-1d94-4e1f-bf90-68f7b9b495d9","where":"/mnt/felhom-drives/adatlemez"},"ok":true}
|
||||
|
||||
register-mounted 16:51:11
|
||||
200
|
||||
{"data":{"registered":true,"where":"/mnt/felhom-drives/adatlemez"},"ok":true}
|
||||
|
||||
jellyfin deploy 2 16:51:12
|
||||
202
|
||||
{"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
|
||||
reconnect 17:01:59
|
||||
200
|
||||
{"data":{"reenrolled":false,"restarted":null,"where":"/mnt/felhom-drives/adatlemez"},"ok":true}
|
||||
|
||||
decommission stale 17:05:48
|
||||
409
|
||||
{"error":"ez az egyetlen használható tárhely — a leszerelés megtagadva (előbb adj hozzá vagy állíts be másik alapértelmezett meghajtót)","ok":false}
|
||||
|
||||
attach (household page) 17:05:54
|
||||
500
|
||||
{"error":"regisztráció sikertelen: storage path \"/mnt/felhom-drives/adatlemez\" already registered","ok":false}
|
||||
|
||||
attach as filmlemez 17:06:02
|
||||
200
|
||||
{"data":{"registered":true,"where":"/mnt/felhom-drives/filmlemez"},"ok":true}
|
||||
|
||||
decommission stale 2 17:06:22
|
||||
200
|
||||
{"data":{"decommissioned":true,"stopped_apps":null,"where":"/mnt/felhom-drives/adatlemez"},"ok":true}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
omv reboot pressed 16:48:56
|
||||
16:48:36 omv=200 felhom=000
|
||||
16:48:56 omv=000 felhom=000
|
||||
16:49:17 omv=200 felhom=000
|
||||
16:49:54 omv=200 felhom=200
|
||||
@@ -0,0 +1,28 @@
|
||||
running
|
||||
|
||||
enabled
|
||||
omv reboot 2 pressed 17:03:03 (Felhom VM running)
|
||||
17:02:44 omv=200 felhom=200
|
||||
17:03:33 omv=000 felhom=200
|
||||
17:03:42 omv=000 felhom=000
|
||||
17:04:11 omv=200 felhom=000
|
||||
17:04:51 omv=200 felhom=200
|
||||
Oct 15 19:03:52 omv-sim libvirt-guests.sh[1255]: Waiting for guest felhom to shut down, 280 seconds left
|
||||
Oct 15 19:03:53 omv-sim libvirt-guests.sh[1473]: error: failed to connect to the hypervisor
|
||||
Oct 15 19:03:53 omv-sim libvirt-guests.sh[1473]: error: Cannot recv data: Connection reset by peer
|
||||
Oct 15 19:03:53 omv-sim libvirt-guests.sh[1482]: error: failed to connect to the hypervisor
|
||||
Oct 15 19:03:53 omv-sim libvirt-guests.sh[1482]: error: Cannot recv data: Connection reset by peer
|
||||
Oct 15 19:03:53 omv-sim libvirt-guests.sh[1489]: Shutdown of guest felhom complete.
|
||||
Oct 15 19:03:53 omv-sim systemd[1]: libvirt-guests.service: Deactivated successfully.
|
||||
Oct 15 19:03:53 omv-sim systemd[1]: Stopped libvirt-guests.service - libvirt guests suspend/resume service.
|
||||
---
|
||||
Oct 15 19:04:12 omv-sim systemd[1]: Starting libvirt-guests.service - libvirt guests suspend/resume service...
|
||||
Oct 15 19:04:12 omv-sim libvirt-guests.sh[690]: libvirt-guests is configured not to start any guests on boot
|
||||
Oct 15 19:04:12 omv-sim systemd[1]: Finished libvirt-guests.service - libvirt guests suspend/resume service.
|
||||
total 8
|
||||
drwxr-xr-x 2 libvirt-qemu libvirt-qemu 4096 Oct 15 17:15 .
|
||||
drwxr-x--- 9 libvirt-qemu libvirt-qemu 4096 Oct 15 19:04 ..
|
||||
ON_BOOT="ignore"
|
||||
ON_SHUTDOWN="shutdown"
|
||||
if [ "x$ON_BOOT" != xstart ]; then
|
||||
if [ "x$ON_SHUTDOWN" = xshutdown ]; then
|
||||
@@ -0,0 +1,42 @@
|
||||
netstorage add 17:08:17
|
||||
400
|
||||
{"error":"SMB-hez felhasználónév és jelszó szükséges","ok":false}
|
||||
|
||||
17:10:50 {"data":{"phase":"none"},"ok":true}
|
||||
netstorage add (user felhom) 17:11:44
|
||||
200
|
||||
{"data":{"name":"omv-filmek","started":true},"ok":true}
|
||||
|
||||
17:11:49 {"data":{"category":"not_writable","detail":"uid-1000 write probe: create/write refused |","message":"A megosztás csatolható, de az alkalmazások nem tudnak rá írni. NFS esetén kapcsold be a NAS-on a „minden felhasználó leképezése” (map all users / all squash) beállítást a megosztáson — vagy állítsd a fájlok tulajdonosát a(z) 101000 azonosítóra. SMB esetén ellenőrizd, hogy a felhasználónak írási joga van a megosztáson.","name":"omv-filmek","path":"","phase":"failed","started_at":"2026-10-15T17:11:44.425220338Z","updated_at":"2026-10-15T17:11:48.118148128Z","warn":""},"ok":true}
|
||||
netstorage add (writable) 17:12:25
|
||||
200
|
||||
{"data":{"name":"omv-filmek","started":true},"ok":true}
|
||||
|
||||
17:12:31 {"data":{"category":"","detail":"","message":"","name":"omv-filmek","path":"/mnt/felhom-drives/omv-filmek","phase":"done","started_at":"2026-10-15T17:12:25.971968221Z","updated_at":"2026-10-15T17:12:28.861974064Z","warn":""},"ok":true}
|
||||
--- media status 17:12:38
|
||||
{"data":{"pending":true,"drives":[{"path":"/mnt/felhom-drives/adatlemez","label":"Adatlemez","change":"removed","changed_at":"2026-10-15T16:51:25.776164694Z","restarted":false}],"apps":["jellyfin"],"wiring":[{"app":"folders","state":"done"},{"app":"jellyfin","state":"household","detail":"no Jellyfin API key named „felhom” — one step on the Jellyfin page"}],"wired_at":"2026-10-15T17:07:34Z"},"ok":true}
|
||||
|
||||
|
||||
17:11:44 INFO [web] network storage add started: omv-filmek (smb 192.168.0.123:TesztFilmek)
|
||||
17:11:44 INFO [web] netstorage add "omv-filmek" started (smb 192.168.0.123:TesztFilmek, mapped_uid=1000)
|
||||
17:11:48 INFO [web] netstorage add "omv-filmek" rolled back (probe failed)
|
||||
17:11:48 WARN [web] netstorage add "omv-filmek" failed: category=not_writable detail=uid-1000 write probe: create/write refused | (3692ms)
|
||||
17:12:25 INFO [web] network storage add started: omv-filmek (smb 192.168.0.123:TesztFilmek)
|
||||
17:12:25 INFO [web] netstorage add "omv-filmek" started (smb 192.168.0.123:TesztFilmek, mapped_uid=1000)
|
||||
17:12:28 INFO [settings] Added storage path: /mnt/felhom-drives/omv-filmek
|
||||
17:12:28 INFO [web] network storage added + verified: omv-filmek (smb 192.168.0.123:TesztFilmek) → /mnt/felhom-drives/omv-filmek (warn="") in 2889ms
|
||||
--- restart media apps (household button) 17:12:46
|
||||
400
|
||||
{"error":"érvénytelen csatlakoztatási pont","ok":false}
|
||||
|
||||
--- media restart (household button) 17:13:44
|
||||
200
|
||||
{"data":{"failed":null},"ok":true}
|
||||
|
||||
17:13:44 INFO [stacks] Restarting stack: jellyfin
|
||||
17:13:44 INFO [stacks] media_library jellyfin: per-drive binds 1 [/mnt/felhom-drives/filmlemez/userdata/media]; drives not bound: []
|
||||
17:13:45 INFO [stacks] Stack jellyfin: started again: jellyfin 2026-10-15T17:06:33.946301809Z → 2026-10-15T17:13:45.154456154Z
|
||||
17:13:45 INFO [stacks] Stack jellyfin restarted successfully (took 1.2s)
|
||||
17:13:46 INFO [media] media apps restarted (the household's „restart now"); failed: []
|
||||
17:13:48 INFO [stacks] Stack jellyfin post-start status:
|
||||
17:13:48 INFO [stacks] jellyfin jellyfin/jellyfin:10.11.11 running Up 3 seconds (health: starting)
|
||||
@@ -0,0 +1,34 @@
|
||||
2026-10-15 14:36:04 | selfbind_link_sent | info | hub | Self-bind link e-mailed (customer creation)
|
||||
2026-10-15 16:11:08 | appliance_bound | info | customer_selfbind | Az ügyfél saját maga kötötte össze az új eszközt (bare-metal telepítés); a hozzáférést a doboz a következő lekérdezéskor megkapja.
|
||||
2026-10-15 16:11:31 | appliance_credential_delivered | info | hub | Új eszköz (bare-metal telepítés) megkapta a hozzáférést és megkezdi a beállítást.
|
||||
2026-10-15 16:14:12 | controller_started | info | controller | Controller elindult (0.313.0)
|
||||
2026-10-15 16:14:21 | controller_updated | info | controller | Controller frissítve: 0.313.0 → 0.314.0
|
||||
2026-10-15 16:14:26 | controller_started | info | controller | Controller elindult (0.314.0)
|
||||
2026-10-15 16:19:22 | backup_tier_skipped | warning | controller | Whole-guest backup tier felhom-pbs skipped: its storage does not exist on the host (never provisioned or removed). No app was stopped for it.
|
||||
2026-10-15 16:23:00 | os_update_applied | info | hub | System security fixes installed on the box (51 package(s)).
|
||||
2026-10-15 16:25:21 | app_deploy_started | info | controller | Alkalmazás telepítése elindult: Vaultwarden
|
||||
2026-10-15 16:25:29 | app_deployed | info | controller | Alkalmazás telepítve: Vaultwarden
|
||||
2026-10-15 16:30:03 | os_update_applied | info | hub | System security fixes installed on the box's base system (106 package(s)).
|
||||
2026-10-15 16:30:03 | os_update_health_failed | error | hub | OS update (host) on Tester4-68d1d8: NOT healthy after 106 package(s) were installed (the tunnel is unknown). Nothing was undone automatically; put a host packag
|
||||
2026-10-15 16:35:00 | host_deliberate_off | info | hub | Switched off by the household at 2026-10-15 16:34 UTC — silence alarms held for 14 days
|
||||
2026-10-15 16:36:45 | host_deliberate_off_ended | info | hub | Reporting again after the household's power-off of 2026-10-15 16:34 UTC
|
||||
2026-10-15 16:37:02 | controller_started | info | controller | Controller elindult (0.314.0)
|
||||
2026-10-15 16:41:57 | backup_tier_skipped | warning | controller | Whole-guest backup tier felhom-pbs skipped: its storage does not exist on the host (never provisioned or removed). No app was stopped for it.
|
||||
2026-10-15 16:46:50 | host_deliberate_off | info | hub | Switched off by the household at 2026-10-15 16:46 UTC — silence alarms held for 14 days
|
||||
2026-10-15 16:49:42 | host_deliberate_off_ended | info | hub | Reporting again after the household's power-off of 2026-10-15 16:46 UTC
|
||||
2026-10-15 16:49:58 | controller_started | info | controller | Controller elindult (0.314.0)
|
||||
2026-10-15 16:51:12 | app_deploy_started | info | controller | Alkalmazás telepítése elindult: Jellyfin
|
||||
2026-10-15 16:51:25 | storage_disconnected | error | controller | Meghajtó váratlanul leválasztva: Adatlemez
|
||||
2026-10-15 16:51:45 | app_deploy_failed | warning | controller | Alkalmazás telepítése nem sikerült: Jellyfin — exit code 1
|
||||
stderr: ...jellyfin_config Creating
|
||||
Volume jellyfin_jellyfin_config Creating
|
||||
Volume jellyfin_jell
|
||||
2026-10-15 16:54:53 | backup_tier_skipped | warning | controller | Whole-guest backup tier felhom-pbs skipped: its storage does not exist on the host (never provisioned or removed). No app was stopped for it.
|
||||
2026-10-15 17:02:24 | storage_disconnected | error | controller | Meghajtó váratlanul leválasztva: Adatlemez
|
||||
2026-10-15 17:04:51 | storage_reconnected | info | controller | Meghajtó újra csatlakoztatva: Adatlemez
|
||||
2026-10-15 17:04:55 | controller_started | info | controller | Controller elindult (0.314.0)
|
||||
2026-10-15 17:06:33 | app_deploy_started | info | controller | Alkalmazás telepítése elindult: Jellyfin
|
||||
2026-10-15 17:06:34 | app_deployed | info | controller | Alkalmazás telepítve: Jellyfin
|
||||
2026-10-15 17:09:50 | backup_tier_skipped | warning | controller | Whole-guest backup tier felhom-pbs skipped: its storage does not exist on the host (never provisioned or removed). No app was stopped for it.
|
||||
2026-10-15 17:15:03 | host_deliberate_off | info | hub | Switched off by the household at 2026-10-15 17:14 UTC — silence alarms held for 14 days
|
||||
[('Tester4-68d1d8', '2026-10-15T17:14:57Z')]
|
||||
@@ -0,0 +1,5 @@
|
||||
final poweroff posted 17:14:57
|
||||
202
|
||||
{"data":{"powering_off":true},"ok":true}
|
||||
|
||||
VM shut off 17:15:29
|
||||
@@ -0,0 +1,22 @@
|
||||
2026-10-15T17:16:16Z
|
||||
purging VM 9310 from related configurations..
|
||||
ls: cannot access '/mnt/hdd_1/images/9310': No such file or directory
|
||||
purging CT 9311 from related configurations..
|
||||
ls: cannot access '/mnt/hdd_1/images/9311': No such file or directory
|
||||
felhom-installer-1.27.1-pve9.2-1.iso
|
||||
felhom-installer-1.28.0-pve9.2-1.iso
|
||||
felhom-installer-1.29.0-pve9.2-1.iso
|
||||
started-341
|
||||
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
|
||||
341 night1004-tester1 running 8192 200.00 673786
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
9401 stopped upgrade-harness
|
||||
Mem: 29994 6691 16530 209 7420 23303
|
||||
/dev/nvme0n1 938G 197G 694G 23% /mnt/hdd_1
|
||||
/dev/mapper/pve-root 39G 24G 14G 63% /
|
||||
17:16:54 hub /hosts: tester-1-d70be4 Tester 1 0.156.1 floor: declared MinAgent 9.2.2 7.0.14-22-pve ONLINE 0/2 0%
|
||||
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
|
||||
VMID Status Lock Name
|
||||
9201 running tester-1
|
||||
@@ -0,0 +1,139 @@
|
||||
# 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).
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 88 KiB |
@@ -124,7 +124,7 @@ stopping line that lies.
|
||||
| **R-494** | Install & onboarding | P4 | **NARROWED 2026-09-14 by operator ruling → [P3-LOW] the hub COULD create the tunnel at customer creation, for a domain already on Cloudflare. Not blocking: every customer has their own domain and the operator creates the tunnel per day-0 A.1 (`architecture/01-topology-and-trust.md`).** *Original finding, kept:* **[P1-HIGH] A new customer's dashboard has NO reachable address unless the operator hand-makes a Cloudflare tunnel — the link in the setup-code mail is dead.** MEASURED 2026-09-14 on a fresh install from the public ISO (drill intervention **I1**): the claim mail points at `https://felhom.drill0242.felhom.eu`; that name has **no A and no AAAA** record (`dig @1.1.1.1`, control `felhom.enkisfelhom.hu` resolves); the hub has **no tunnel- or DNS-creation code** (`hub/internal/cloudflare/` holds only geo-rule removal; `cf_tunnel_token` is a pasted, optional form field, `configs.go:1478`) — day-0 runbook A.1 makes it a manual Cloudflare-dashboard step that nothing on the customer-create page asks for; the box's own split-horizon resolver on the appliance LAN IP answered `google.com` but not the dashboard name at 13:27:39Z; the agent applied the record at **13:27:44Z** (`lanresolver: applied split-horizon record … ip=192.168.0.158`, 3 m 46 s after the controller started), so the box CAN answer the name — **but only to a device that uses the box as its DNS server, and no document, screen or mail tells a household to do that**; the router and the installer-offered DNS answer nothing. The page was reachable only at the guest's LAN address with the name forced (`curl --resolve …:443:192.168.0.158`). **A volunteer could not have done that.** **What it needs:** an operator ruling — the hub creates the tunnel and DNS at customer creation, or the product gives a household a LAN address that works with no DNS change. | **READY — rank P3-LOW; owner: CC** **Re-ranked 2026-10-03: P3→P4: operator-side automation; the operator creates the tunnel by hand per the day-0 runbook.** | — | — | CC |
|
||||
| **R-504** | Install & onboarding | P4 | **[P3-LOW] `iso.felhom.eu` cannot show an index page on its own — its root returns 404, and the download page lives on the website instead.** MEASURED 2026-09-14: `https://iso.felhom.eu/` and `/index.html` → 404; only named objects answer. The host is an R2 bucket behind a custom domain; whether R2 would serve an uploaded `index.html` at `/` was **not measured** (uploading anything to the public bucket is a publication). The ISO v1.27.0 task puts the Hungarian download page at `felhom.eu/letoltes` (published with the ISO, after the operator's yes). **Remaining:** a redirect from `iso.felhom.eu/` to that page needs a Cloudflare rule the session has no credential for. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator (Cloudflare rule)** **Re-ranked 2026-10-03: P3→P4: households are sent to the website's download page; the bare address is cosmetic.** | — | — | operator |
|
||||
|
||||
## Apps & catalog — 15 rows (P2 1, P3 8, P4 6)
|
||||
## Apps & catalog — 16 rows (P2 1, P3 9, P4 6)
|
||||
|
||||
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -137,6 +137,7 @@ stopping line that lies.
|
||||
| **R-1029** | Apps & catalog | P3 | **Plex's folder picker shows the drives as identical „media” folders.** With one bind per drive at the same path (`/mnt/felhom-drives/<drive>/userdata/media`), the leaf of every library folder is `media`; the drive's name sits two levels up, so in Plex's picker the household sees several folders all called „media” (reported by the operator during the 2026-10-14 test on Tester 1). It conflicts with `15` §2 reason 2 (the same path everywhere). | **READY** — filed 2026-10-14 | the layout decision (STATUS D9) | Decide in `15` §2: the players (`:ro`, never linked) may get a readable path per drive (e.g. `/media/<drive label>`) without breaking the hardlink rule, which binds only the download/library apps | CC |
|
||||
| **R-1036** | Apps & catalog | P3 | **The apps page lags the catalog by two apps.** `app-catalog-felhom.eu/templates/` holds **64** apps; `/alkalmazasok` and `/en/apps` render **63** cards, one of which (`filebrowser`) is built in and not a catalog template — so **62 catalog apps are listed**. Missing: **`plant-it`** and **`wger`**, both in the catalog since 2026-10-06/08. Their website assets are ALREADY present (`plant-it-logo.svg` + 3 screenshots, `wger-logo.png` + 3 screenshots, renamed to the catalog slug by `a3507761`, 2026-10-08) — only the cards were never written, so this is not a new-asset job. Found 2026-10-14 while reconciling the app count for the „felhő tárhely” page, where four places said **60** and the rest said **62**. **Done in that session:** every stated count on the site set to **62** (`index.html`, `szolgaltatasok.html`, `en/services.html` were 60), which is what the apps page actually shows — so no visitor can count the cards and find the number wrong. **62 is still not the catalog's number.** **To close:** write the two cards on both apps pages (gate 15 keeps the two pages' app sets equal, so they move together), then raise every stated count 62 → 64 in the same commit. **The operator chose this split at the 2026-10-14 STOP** over doing it inside the SEO change. **2026-10-15 (R-1048):** Prowlarr's card added on both pages and every stated count 62 → 63 (the media group 19 → 20), so the site still states what it shows; the two owed cards would make it 65. **Note before writing them:** `wger` is `lifecycle: hidden` and `plant-it` `lifecycle: abandoned` — neither is offered for a new install, so a card would advertise an app the wizard refuses. | **OPEN** | — | write the `plant-it` + `wger` cards on both apps pages, then 62 → 64 everywhere, one commit | CC |
|
||||
| **R-1065** | Apps & catalog | P3 | **After the Plex claim the box does not set Plex's libraries until the next wiring run.** The claim handler (`felhom-controller` `internal/web/media_events.go` `appPlexClaimHandler`) opens the gate when Plex says claimed and returns; the wiring runs only when a `media_library` app comes up, on a drive event, or on „Bekötés most". Plex's own install ran it while Plex was unclaimed (`plex=household(0)`), so a freshly claimed Plex has no libraries until one of those happens — the shape of R-1058. Read from code 2026-10-15; to be measured on the N100 when the operator claims Plex (the sheet asks for „Bekötés most" only if no library appears). | **OPEN** — filed 2026-10-15 | — | Run the wiring (RunMediaWiringSoon) after a successful claim; a test; measure on the N100's claim | CC |
|
||||
| **R-1071** | Apps & catalog | P3 | **Jellyfin cannot use films that sit on a NAS share (the pilot's OMV), and the pilot's wish is exactly that.** MEASURED 2026-10-15: an OMV SMB share added as „Hálózati tárhely” mounts and verifies (`/mnt/felhom-drives/omv-filmek`) — but only with a user name AND a WRITABLE share (read-only → refused „az alkalmazások nem tudnak rá írni”) — and the household's „Újraindítás most” binds only local drives into Jellyfin (`per-drive binds 1 [/mnt/felhom-drives/filmlemez/userdata/media]`). By design: R-108 (a NAS is browse-only, never an app's namespace); `media_library.go` skips `Kind == "network"`. A design decision, not a defect (R-370). Evidence: `audits/omv-vm-2026-10-15/B6-omv-share.txt`. | WAITING-ON-OPERATOR | Operator: should a media app read a NAS share read-only (a new bind kind), or is the answer „put the films on a drive the box owns”? | Operator rules; if yes, a design note in `15-media-library.md` first. | Operator |
|
||||
| **R-76** | Apps & catalog | P4 | **FileBrowser-created folders break the setgid chain, and a drop-zone's mode is not stable** **MIGRATED FROM `ROADMAP.md` 2026-08-22 (R-369) — originally filed 2026-07-26, size S, roadmap state `idea (surfaced by the R-75 spike, 2026-07-26)`.** Moved verbatim; nothing added or reinterpreted. The roadmap keeps its copy as history, marked moved. | **OPEN — migrated from ROADMAP 2026-08-22, rank unchanged** **2026-10-06 night: not a catalog fix** — the setgid chain is set by the controller's FileBrowser setup; a controller row. | — | Two related findings from `audits/SPIKE-catalog-data-paths-2026-07-26.md` P3/P5, both **pre-existing** and deliberately left alone by that spike. **(a)** FileBrowser Quantum 1.3.3 creates files `0644` and folders `0755` and does **not** propagate the setgid bit — even though the entrypoint wrapper's `umask 002` really is in effect (`/proc/1/status` `Umask: 0002`). Group inheritance itself works (a file uploaded into a 2775 group-100 dir landed group 100, not the process gid 1000), so the convention's *group* half holds and only its *mode* half is lost. The consequence is proven with a control: inside a UI-created `0755` folder a gid-1000 process's file landed group **1000**, while the identical write into the 2775 parent landed group **100**. So **any folder a customer creates through FileBrowser breaks the shared-group chain one level down.** Latent today — every userdata-touching catalog app that declares an identity declares uid/gid **1000**, the same uid FileBrowser runs as, so owner permissions mask it; it bites the day a content app runs as a different non-root uid with gid 1000. The comment at `infra/infra.go:156` is right that the image ignores `-e UMASK` but does not say t | CC |
|
||||
| **R-707** | Apps & catalog | P4 | **[P2] 37 apps still start with a login a stranger can take (`09` §3 decision 45).** Audit of all 53 apps: `app-catalog-felhom.eu/FIRST-ADMIN.md` (class, fix route, status, measured or read). Open: **3 hard-coded defaults** — calibre-web (`admin / admin123`, measured working on demo-hp and 9202; its own `cps.py -s` route needs a generated password WITH a special character — our generator is letters+digits, a controller change), mealie (`changeme@example.com / MyPassword`), wger (`admin / adminadmin`); **34 open first-run screens** (the first visitor creates the admin: actualbudget, adventurelog, audiobookshelf, calcom, docmost, emby, ghost, gitea, gramps-web, home-assistant, homebox, immich, jellyfin, komga, n8n, navidrome, opengist, outline, papra, plant-it, radarr, rallly, recipe-importer, romm, seerr, sonarr, sparkyfitness, tandoor, termix, uptime-kuma, vikunja, wanderer, wishlist, zipline). **Stale notes:** romm's `default_creds` `admin / admin` answers 401 on demo-hp (like a wrong password) — the page now warns with a login that does not exist; zipline's looks stale too. **Measured on demo-hp 2026-09-28 (read-only):** bookstack's default still logs in on the INSTALLED app (the fix is for new installs; the page now warns). Each fix: route (a) env or (b) the app's own CLI/API via `after_install:`, proven on 9202 with the default failing and the generated password working; route (c) a page sentence. Several sessions (operator, 2026-09-28). **2026-09-29 (controller v0.280.0, catalog `d0e7e2e`):** every class-3 app fixed — mealie, wger, calibre-web by `after_install` (calibre-web with the new `password:24:special`), proven on 9202 fresh installs (`audits/login-gate-2026-09-29/D/`); the setup gate (decision 46, spike PASSED) built and live on immich, n8n, audiobookshelf (probes measured) and uptime-kuma (button) (`…/C/`); romm's and zipline's stale notes removed. **Left: 30 class-4 apps** — gate each (probe measured on 9202 where one exists — 11 upstream candidates listed in `…/B/B-VERDICT.md` §3; the button otherwise). **2026-09-29 afternoon (controller v0.281.0, catalog `6faf432`):** 28 more class-4 apps gated — 32 of 34 — each proven on 9202 (`audits/gate-rollout-2026-09-29/`B): stranger → gate page / 401, household reached the first-setup screen, the gate opened (9 by a measured probe, the rest by the press), the app answered after. seerr, outline, rallly: gated, their opening needs a media server / e-mail (not proven). **Left:** wanderer (R-714); plant-it is not installable. | **NARROWED** (2026-10-03 triage: the row's verdict was finished, but it names open work no other row carries — seerr, outline and rallly are gated, but the gate OPENING is not proven (needs a media server / e-mail)) — **CLOSED — 2026-09-29 (the rest → R-714)** | — | — | CC |
|
||||
| **R-905** | Apps & catalog | P4 | **wger's collected style files (283 MB) go into every wger backup, though the app rebuilds them at every start.** Since R-762's fix (`DJANGO_DEBUG=False` + `collectstatic`, catalog `cf1ed43`) the static files sit in a named volume that the backup legs copy like data (measured 283 MB, `audits/design-build-2026-10-06/`); `collectstatic` regenerates them, so they are rebuildable bytes in every Tier-1 unit, Tier-2 copy and off-site snapshot. wger is `lifecycle: hidden` and no box runs it (hub read 2026-10-08). Options to weigh: a non-backed-up volume class for regenerable data, or an anonymous volume. Found by the R-762 helpers 2026-10-08. | **OPEN — needs a design before wger is shown** | — | Design the „regenerable volume" exclusion (catalog + controller backup legs) | CC |
|
||||
@@ -154,7 +155,7 @@ stopping line that lies.
|
||||
| **R-683** | App updates | P3 | **[P3-LOW] Watch: after a power cut during an update's health check, the hold named an HOUR-OLD second-drive copy, not the one the update's own backup should have just made.** 2026-09-24 chaos round 3 (nextcloud, `backup_max_age: 1m`): no `backing-up` phase was seen and the hold named Tier 2 at 13:04 for an update pressed at 14:04; the pre-cut controller log was lost with the container (the runner now saves it at arm time — R-320). Round 11, the same action without a power cut, named a fresh 14:34 copy and logged the Tier-2 copy. The sentence was TRUE (it named the copy it offered); the question is why the update did not back up first. Not reproduced; watch the next power-cut drill. `audits/night-2026-09-24/E/round-03*.json`, `E/round-11-controller-pre.log` | **OPEN — P3; owner: CC (watch)** | — | — | CC |
|
||||
| **R-785** | App updates | P3 | **[P3-LOW] SparkyFitness is pinned 11 releases and a major behind upstream (v0.17.3; upstream v1.7.3, v1.6.0 dated 2026-07-24).** READ 2026-10-01 (`audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt`). **Needs:** an update walk 0.17 → 1.x through the ladder (bench + box), after R-784 is decided. | **OPEN — rank P3-LOW; owner: CC (after R-784)** | — | — | CC |
|
||||
|
||||
## Backup & restore — 30 rows (P2 3, P3 17, P4 10)
|
||||
## Backup & restore — 31 rows (P2 3, P3 17, P4 11)
|
||||
|
||||
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -188,11 +189,15 @@ stopping line that lies.
|
||||
| **R-832** | Backup & restore | P4 | **ep0's copy in a place outside both Hetzner and the operator's home (roadmap).** Today DooPlex (the operator's home) holds it (decision 71). A Hetzner Storage Box would share a provider with ep0 and with every household's file backups, and cannot run PBS, so the copy could not be verified or restored from directly. | **DEFERRED — later, if the product grows** | — | — | operator |
|
||||
| **R-878** | Backup & restore | P4 | **A catch-up (R-871) runs the database-dump leg in the DAY, and that leg stops an app with a volume for its copy — the household may notice the stop, and a large volume makes it longer.** MEASURED 2026-10-05 on demo-felhom: the catch-up at 08:25:02 stopped opengist, copied 182.5 KB, started it again — about 1 s, then a few seconds of `health: starting`; the night does exactly the same, unseen. Nothing measured for a large volume. Fix direction (if it matters): skip the volume copy of a running app in a DAYTIME catch-up and leave it to the next night, or warn. `audits/catchup-2026-10-05/partA/live-demo-felhom.txt` | **READY — owner: CC** **2026-10-05 (burn-down night): NEEDS A LIVE MEASUREMENT** — a timed catch-up on 9202 for an app with a multi-GB volume, then the skip-or-warn choice. | — | measure a large volume first | CC |
|
||||
| **R-32** | Backup & restore | P4 | **[P2-HIGH] RESET must purge the customer base dir; the orphan card must stay honest; unattributed bytes must be visible.** The rehearsal's S7 said in advance that an orphan card would BE a finding — and one appeared (16:58:14). Cause: RESET's `"hetzner":"ok"` leg destroys the sub-account, but **a Hetzner sub-account is an access-control object, not a data object** — its directory survives, so re-enabling offsite recreated an account over the previous lifecycle's ciphertext, encrypted under a key that same RESET had destroyed. **MIGRATED FROM `ROADMAP.md` 2026-08-22 (R-369) — originally filed 2026-07-21, size M, roadmap state `idea`.** Moved verbatim; nothing added or reinterpreted. The roadmap keeps its copy as history, marked moved. | **OPEN — migrated from ROADMAP 2026-08-22, rank unchanged** **2026-10-06 night: design written** (`audits/night-burndown-2026-10-06/design-R-32.md`) — pick A: purge the repo + set-aside copies through the sub-account's own password login BEFORE deleting it (no main-account credential); the „repo data destroyed" comment at `hub/internal/offsite/offsite.go:276-280` is false for the shared tier; part (3) waits on a read-only measurement (`du` on port 23). Operator: agree to route A. **2026-10-07 07:58: `09` §3 decision 167 — option A yes, and delete the old RESET leftovers once.** **2026-10-07 (Part D step 2, read only):** the hub shows bx11 holding 3.3 GB of data while the four live customers account for ~0.6 GB → **~2.7 GB belongs to no live customer**; no live customer shows a set-aside folder, so the leftovers are in homes whose sub-account is gone, reachable only by the pool box's MAIN account. **The one-time clean-up is STOPPED:** no main-account login for bx11 is held on DooPlex (the API token in the credentials file sees no box). Needs: the main-account login, or the operator lists and deletes in the Hetzner console (`audits/day-2026-10-07/D/D2-listing-readonly.txt`). **2026-10-07: option A DELIVERED (hub 0.142.0):** RESET purges the repo and every `.orphaned-*` through the sub-account's own login before deleting it, and keeps the sub-account if the purge fails (red-proved, `audits/day-2026-10-07/D/`). Not yet seen live (no scratch RESET today). **The one-time clean-up of the ~2.7 GB of leftovers is STOPPED:** it needs the pool box's main-account login (see above). **2026-10-07 14:43 — `09` §3 decision 173: leave the ~2.7 GB of old leftovers for now; re-ranked P2 → P4.** Option A itself is delivered (hub 0.142.0). What stays open is ONLY the leftovers: they were computed (box total minus live customers), never listed, and deleting them needs the pool box's MAIN login, which reaches every customer's data. **Blocker: a safe main-account path.** | — | **Ruling from the run (three parts, deliberately separate):** (1) because RESET destroys custody, the ciphertext it leaves behind is unrecoverable **BY DESIGN** → RESET gains a **main-account purge of the customer base dir** (the existing operator ack already covers it); (2) the **move-aside guard STAYS** for reinstall-*without*-RESET — there custody survives and the card's "history recoverable" promise is true (R-26 depends on exactly that); (3) the operator **Restic tab shows per-customer directory bytes vs attributed snapshot bytes**, so dead data cannot hide. Measured on the pool box that night: **49 M attributed** (2 snapshots, 48.717 MiB) against **1.4 G + 3.0 M unattributed** across TWO `.orphaned-*` dirs. Evidence `restic-and-pool.txt` | CC |
|
||||
| **R-1072** | Backup & restore | P4 | **The backup page speaks to the household in two registers in one card: „csatlakoztasson” (formal) and „Csatlakoztass” (informal).** MEASURED 2026-10-15 on controller 0.314.0, one-disk box, `/backups`: „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.” next to „… Csatlakoztass egy második meghajtót a teljes védelemhez.” The product's voice is informal (tegezés). Small; not fixed here because this run allowed no product change. Evidence: `audits/omv-vm-2026-10-15/B4-backup-pages.txt`. | READY | — | Change the first string to „csatlakoztass” (and „offsite tárolót” → „távoli tárhelyet”) in the controller's i18n file; the copy gates run. | CC |
|
||||
|
||||
## Storage & devices — 6 rows (P3 3, P4 3)
|
||||
## Storage & devices — 9 rows (P3 6, P4 3)
|
||||
|
||||
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| **R-1068** | Storage & devices | P3 | **On a box with one disk, a media app's (or any data-folder app's) Install is refused with a raw field error, and the way through is nowhere near the button.** MEASURED 2026-10-15 on the OMV-VM copy of the pilot's box (one passed NVMe, controller 0.314.0): `POST /api/stacks/jellyfin/deploy` with DOMAIN+SUBDOMAIN → **400 „a(z) "Médiatár útvonal" (HDD_PATH) mező kitöltése kötelező”** — the env var name reaches the household. R-1031's default-drive rule finds no drive because none is registered. The box DOES offer one: `/api/disks/candidates` listed `/mnt/sys_drive` (the installer's data volume, `already_mounted`), and `handleStorageRegisterMounted` (R-280) registers it — **seen in the candidate list and the code, NOT pressed** (the box was removed). With a second disk attached through „Csatlakoztatás”, the same Install succeeded in 30 s. Evidence: `audits/omv-vm-2026-10-15/README.md` „What happened”, `B4-deploy.txt`. | OPEN | — | Prove the `sys_drive` route live on a one-disk box (Tester 1 or a scratch VM); then make the Install refusal name it in household words (a link to Meghajtók), or register `sys_drive` by default on a one-disk box. | CC |
|
||||
| **R-1069** | Storage & devices | P3 | **A disk passed into a Felhom VM on a virtio bus cannot be formatted, and the household reads the agent's raw English refusal.** MEASURED 2026-10-15 (OMV KVM plugin, „Add host disk”, default Bus `virtio`): `POST /api/disks/format` → 500 „agentapi: format: HTTP 409: format refused: device has no durable id to bind the format to (path-only formats are not permitted)”. A virtio-blk disk without a serial has no `/dev/disk/by-id` link inside the guest, so the anti-retarget guard refuses — correct and safe. The same disk on Bus `sata` got `byid:ata-QEMU_HARDDISK_QM00003` and formatted. Affects every hypervisor that passes disks as virtio without a serial (OMV KVM, Proxmox without `serial=`). The pilot guide says `sata`. Evidence: `audits/omv-vm-2026-10-15/B4c-second-disk-format.txt`. | OPEN | — | Translate the refusal for the household („Ezt a lemezt a Felhom nem tudja biztonságosan azonosítani — a virtuális gépben állítsd a lemez buszát SATA-ra”); optionally fall back to a filesystem-UUID binding after a blank-format. | CC |
|
||||
| **R-1073** | Storage & devices | P3 | **Felhom in a virtual machine sees no disk health: SMART is UNKNOWN for its own system disk and any passed disk.** MEASURED 2026-10-15 on the OMV-VM copy: every storage target reported `smart.health = UNKNOWN`, all counters null (the guest sees QEMU disks). On the pilot's box the NVMe and the „old, not stable” Toshiba would be watched by OMV only, and Felhom's drive-health alarms (R-330/R-332's whole point) cannot fire. Evidence: the host report in `audits/omv-vm-2026-10-15/README.md` (memory/disk section) and `C-hub-events-Tester4.txt`. | WAITING-ON-OPERATOR | Operator: is a VM install a supported shape, and if so, is „OMV watches SMART” acceptable or must Felhom say on the dashboard that it cannot watch the disks? | Operator rules; then CC adds a household line on the Meghajtók page when SMART is unavailable. | Operator |
|
||||
| **R-1062** | Storage & devices | P4 | **The N100's USB drive cannot be split in two without losing the box's whole-guest backup target.** The operator asked (2026-10-15 16:31) for two halves for multi-drive tests. Read first (`audits/n100-lived-in-2026-10-15/B/`): no family files — 2.7 GB nightly vzdumps of guest 9201 (`dump/`, PVE storage `felhom-backup` = the whole-guest backup target), 3.1 GB app backups + an off-site restore copy, 422 MB leftover app data of removed apps, empty media folders. The agent refuses a decommission of a backup target (`refuseIfBackupTarget`) and the N100 has no other drive to move that role to. Nothing changed. | **WAITING-ON-OPERATOR** — filed 2026-10-15 | operator decision | Keep one drive (CC's pick: the lived-in box keeps its local whole-guest backup), or give a word to drop that backup leg / add a second drive first | operator |
|
||||
| **R-1063** | Storage & devices | P3 | **„Végleges leszerelés" leaves a half-state when the agent refuses: the dashboard marks the drive decommissioned first and never undoes it.** `handleStorageDecommission` → `finalizeDecommissionWith` calls `settings.SetDecommissioned` (and may move the default) BEFORE `agent.Decommission`; on the agent's 403 (protected role) or 409 (whole-guest backup target) it returns the error and keeps the mark — the dashboard would show a retired drive the agent kept serving. Read from code 2026-10-15 (`felhom-controller` `internal/web/storage_handlers.go`); NOT pressed on the lived-in N100 on purpose. | **OPEN** — filed 2026-10-15 | — | Measure on demo-hp (a backup-target drive), then: ask the agent first (or undo the mark and the default on a refusal); a test with a refusing agent seam, red first | CC |
|
||||
| **R-1064** | Storage & devices | P4 | **Removing a storage path does not mention the cross-drive backup copies it holds.** demo-hp 2026-10-15: `/mnt/sizing-bench` removed through `/settings/storage/remove` (302, „Adattároló eltávolítva") while calibre-web's and paperless-ngx's `cross_drive.destination_path` pointed at it; the copies stay on disk, the records still name the removed path. The in-use check counts HDD_PATH only (`appsUsingPath`). | **OPEN** — filed 2026-10-15 | — | Read what tonight's tier-2 run (01:30) does with the two records; then: name the copies in the removal's confirmation (or count them as in use) | CC |
|
||||
@@ -244,10 +249,11 @@ stopping line that lies.
|
||||
| **R-1061** | Box system & updates | P4 | **A per-customer floor reached Tester 1 only at its next 15-minute report, not in seconds.** Set 2026-10-15 12:55:51 UTC for tester-1, demo-hp and demo-felhom together (hub 0.153.0, CC's token): demo-hp and demo-felhom ran 0.314.0 within 13 s (the hub's wake); Tester 1 moved at 13:09:35, its regular report (`audits/gate-restore-2026-10-15/release/03-boxes-move.txt`). It had restarted at 12:54:29 onto rc.1 and logged „hub wait channel active". Why the wake did not reach it is not read (the wake line is DEBUG). No harm: the floor arrived. | **OPEN** — filed 2026-10-15 | — | Read Tester 1's DEBUG ring at the next floor change; compare with the hub's bump log | CC |
|
||||
|
||||
|
||||
## Monitoring & notifications — 10 rows (P2 1, P3 6, P4 3)
|
||||
## Monitoring & notifications — 11 rows (P2 1, P3 7, P4 3)
|
||||
|
||||
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| **R-1070** | Monitoring & notifications | P3 | **A box with no Cloudflare tunnel gets an ERROR after its host OS update: „NOT healthy … (the tunnel is unknown)”.** MEASURED 2026-10-15 16:30 on Tester4-68d1d8 (throwaway customer, placeholder domain `tester4.test`, so no tunnel token): hub event `os_update_health_failed` (error) „OS update (host) on Tester4-68d1d8: NOT healthy after 106 package(s) were installed (the tunnel is unknown). Nothing was undone automatically; put a host package back by hand…”. The box was healthy (dashboard 200, apps installing). A tunnel that never existed is read as a failed health check. Would hit every test customer and any box whose tunnel is not set yet. Evidence: `audits/omv-vm-2026-10-15/C-hub-events-Tester4.txt`. | OPEN | — | Find the health verdict's tunnel input (hub os-update health); treat „no tunnel configured” as not-applicable, not as unhealthy; red-proof with a no-tunnel fixture. | CC |
|
||||
| **R-1020** | Monitoring & notifications | P4 | **`app_repaired_after_crash` reports a duration of 0 s, and the controller log says „in 0s".** `RunAfterUncleanBoot` sets `res.Duration` in a deferred func after the result is already returned (no named result), so the caller sees 0; the `app.yaml` record is right (10,172 ms on demo-hp 2026-10-14, `audits/immich-repair-2026-10-14/D/`). Small, but the controller release for this session is spent (v0.311.0). | **OPEN** — filed 2026-10-14 | — | CC: a named result (or set the duration before return), with a test on the returned value; ride the next controller release | CC |
|
||||
| **R-1001** | Monitoring & notifications | P3 | **Every hub restart re-mails the operator about a box that is already known to be down.** MEASURED 2026-10-13 18:33 UTC (hub v0.149.0 rollout, R-998 session): Tester 2, silent 216 h, got a fresh `host_down` and `restore_test_stale` mail. `monitor/host_staleness.go` leaves a down host unseeded on start so the first Check emits (F2), and its comment says „the dispatcher's 1h cooldown dedups the re-emit" — but host liveness events bypass that cooldown (`dispatcher.go` `nodeLivenessEvents`, 5-min dedupe only); `restore_test_stale` keeps its edge state in memory. The comment states an invariant the code does not provide. | **READY** — filed 2026-10-13 | — | Seed a host silently when a `host_down`/`host_stale` event for it is newer than its last report; the same for the restore-test edge; a test that restarts the checker | CC |
|
||||
| **R-528** | Monitoring & notifications | P2 | **[P2-MEDIUM] Docker does not report an OOM kill inside a Felhom LXC guest: `OOMKilled` stays false and no `oom` event fires, so the v0.243.0 OOM line is not proven live.** MEASURED 2026-09-15 on scratch 9202 (Docker 29.8.0): Paperless capped at 128M restarted 11 times with `OOMKilled=false` and zero `docker events --filter event=oom`; a memory hog inside the running container was killed (rc 137) with the same silence (`E2-oom-signal-measure-9202.txt`). BIGNIGHT VM 333 did read `oomkilled=true`, so the shape differs by case. **Fix shape:** the agent reads the guest container cgroups' `memory.events oom_kill` counters (host-side, reliable), or the controller alarms on a restart-count trend **RE-MEASURED 2026-09-16 on the DRILL box (fresh install, nested VM 334, Docker in an LXC guest, controller 0.243.0), so the finding is not a property of one machine:** the Paperless webserver was capped at 128 M with `docker update --memory`; it restarted 9-10 times, and all three signals stayed silent - `OOMKilled=false` on every inspect, `docker events --filter event=oom` EMPTY for the whole window, the container's cgroup not visible from inside the guest, and `dmesg` unreadable there. Identical to scratch 9202. So the v0.243.0 OOM line cannot fire on ANY Felhom box as shipped, on either host. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-m1-oom.txt`. | **WATCHING** — **2026-10-12: the built part is released** (agent v0.150.0 carries the Docker-approval memory-kill check; the boxes run 0.154.0; hub 0.140.0+ requires a passing `oom_check` before a Docker set is approved). Per decision 157 nothing else is built; the row watches for a box whose Docker reports a false OOM flag. Dated look: 2026-11-12. **READY — rank P2-MEDIUM; owner: CC** **2026-09-17 (chaos night): an OOM WAS detected on a fresh box, and named precisely.** On `tester-1-022354` (controller 0.245.0, guest 9201, 6 GB RAM) immich’s Postgres was killed by the memory limit during its reverse-geocoding import, and the controller pushed `app_oom` (warning, operator-only): „Alkalmazás memóriája elfogyott: immich (immich-postgres) — egy folyamatát a memóriakorlát leállította” — naming the app AND the exact container. The visible consequence was `write CONNECTION_CLOSED immich-postgres:5432` and twelve restarts of immich-server. So on THIS box the OOM scan works and was the fastest route to the diagnosis; recorded here rather than filed as a new row. Evidence: `audits/evidence-chaos-night-2026-09-17/round-2.txt`. **2026-10-05 (burn-down night): a one-page design proposal (no code) is in `audits/night-burndown-2026-10-05/design-R-528.md`** — for the operator. **2026-10-06: STOPPED BEFORE ANY CODE — the measurement contradicted the design** (decision 155 said A then C). On scratch 9202, Docker 29.8.2, the `OOMKilled` flag was TRUE in all four shapes tried: a child process killed while the container kept running (`oom_kill` 0 → 3, flag true) and three main-process kills (exit 137, flag true); an `oom` event each time. The false flags of 2026-09-15 were on Docker 29.8.0. Cost read for the record: one exec read of 21 containers on demo-hp = 1.6 s. `audits/design-build-2026-10-06/`C/. **2026-10-06 18:24: operator ruling, option A (decision 157):** nothing is built; the row stays open as a WATCH for a box whose Docker reports a false flag. **Added:** a Docker engine set may not be approved until it reports a memory kill correctly on the boxes that ran it (built in this row's next session). **2026-10-06 (night): the Docker-approval memory-kill check is BUILT** — hub v0.140.0 (LIVE: the approval waits for a passing `oom_check` on every ring-0 box; a failed, errored or missing one blocks) and the agent's wrapper (`felhom-agent` `acccb66`, unreleased — ships as v0.150.0 after the 2026-10-07 read-back). Proven by hand on demo-hp's guest: `OOMKilled=true`, exit 137, the `oom` event — seen only with an events window ending after the run (the wrapper waits 2 s). `audits/readback-2026-10-07/`F/. | — | 2026-11-12: read the hub for any failed `oom_check` or an `app_oom` with no restart reason since 2026-10-12; none → close | CC |
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
# Felhom virtuális gépben, OpenMediaVault 8 alatt — útmutató
|
||||
|
||||
*Készült 2026-10-15-én, egy pontos másolaton kipróbálva (OMV 8.5.11-1, 7.2.6-os kernel, KVM bővítmény 8.3.4,
|
||||
Felhom telepítő 1.29.0). A próba jegyzőkönyve: `documentation/audits/omv-vm-2026-10-15/README.md`.*
|
||||
|
||||
## Röviden (ezt lehet e-mailben elküldeni)
|
||||
|
||||
1. Tedd be a 16 GB memóriát, kapcsold be a BIOS-ban a virtualizációt (Intel VT-x), és **mentsd le a filmeket az NVMe-ről** — az NVMe-n minden törlődik.
|
||||
2. Az OMV-ben telepítsd a `openmediavault-kvm` bővítményt, és csinálj egy hálózati hidat (`br0`). Utána az OMV **új címet kaphat**: `http://<gépnév>.local` vagy a router listája megtalálja.
|
||||
3. Az OMV-ben szabadítsd fel az NVMe-t (megosztás, mappa, fájlrendszer le), majd töröld a lemezt („Gyors").
|
||||
4. A KVM bővítményben csinálj egy `felhom` nevű gépet: 4 CPU, 12 GB memória, a teljes NVMe, a `br0` híd, a Felhom telepítő mint CD, automatikus indítás bekapcsolva.
|
||||
5. Indítsd el, a telepítőben kövesd a szokásos Felhom útmutatót, és a párosító kód után szólj nekem.
|
||||
|
||||
---
|
||||
|
||||
## Mielőtt elkezded
|
||||
|
||||
**A) A memória.** Tedd be a 16 GB-ot. A Felhom gépe 12 GB-ot kap; az OMV-nek a maradék 4 GB bőven elég.
|
||||
|
||||
**B) A virtualizáció a BIOS-ban.** E nélkül a virtuális gép el sem indul.
|
||||
|
||||
1. Kapcsold be a gépet, és nyomd a BIOS gombját (a legtöbb mini PC-n **F2**, **F10** vagy **Del**; a gép az
|
||||
indításkor kiírja).
|
||||
2. Keresd az **Advanced** → **CPU Configuration** (vagy **Processor**, **Security**) menüt.
|
||||
3. Az **Intel Virtualization Technology** (más néven **VT-x**) legyen **Enabled**.
|
||||
4. Mentsd el (általában **F10**), és indítsd újra.
|
||||
|
||||
**C) Mentsd le a filmeket az NVMe-ről.** Az NVMe (`/dev/nvme0n1`, Samsung 980) **teljes egészében** a Felhomé lesz.
|
||||
A rajta lévő minden fájl **törlődik**. Másold át a filmeket máshová (például a Toshiba lemezre vagy egy külső
|
||||
lemezre), és nézd meg, hogy a másolat megnyílik-e. **Csak ezután menj tovább.**
|
||||
|
||||
**D) Mire lesz még szükséged:** az e-mail fiókod; a **Tulajdonosi jelmondat** (5 szó, tőlem kapod, telefonon);
|
||||
egy monitor és billentyűzet a mini PC-hez arra az esetre, ha az OMV oldala eltűnne.
|
||||
|
||||
---
|
||||
|
||||
## 1. A KVM bővítmény telepítése (~2 perc)
|
||||
|
||||
1. Lépj be az OMV webes felületére.
|
||||
2. **Rendszer → Bővítmények**.
|
||||
3. A jobb felső keresőbe írd: `kvm`.
|
||||
4. Kattints az **openmediavault-kvm** sorra (sárga lesz).
|
||||
5. Kattints a **lefelé mutató nyílra** (Telepítés).
|
||||
6. A kérdésnél pipáld be a **Megerősítés** négyzetet, majd **Igen**.
|
||||
7. Várd meg a végét („END OF LINE"), majd **Bezárás**.
|
||||
8. Frissítsd a böngészőt (**Ctrl + Shift + R**). Megjelenik a **Szolgáltatások → KVM** menü.
|
||||
|
||||
> A KVM bővítmény saját oldalai **angolul** vannak (VMs, Pools, ISOs …). Az útmutató ezeket a szavakat írja.
|
||||
|
||||
## 2. Egy tároló a telepítőnek (~1 perc)
|
||||
|
||||
1. **Szolgáltatások → KVM → Pools**.
|
||||
2. **+** (Add new pool).
|
||||
3. **Név:** `felhom` · **Típus:** Directory · **Path:** `/srv/felhom-iso`
|
||||
4. **Hozzáadás**.
|
||||
5. Jelöld ki a `felhom` sort, kattints az **Állapot** gombra, majd **Indítás**. (Alapból „Inactive"-ként jön létre.)
|
||||
6. Ha megjelenik a sárga sáv („**Függő konfigurációs változások**"), kattints a jobb oldali **pipára** (Alkalmaz),
|
||||
pipáld be a **Megerősítés** négyzetet, majd **Igen**.
|
||||
|
||||
## 3. A Felhom telepítő letöltése (~2 perc)
|
||||
|
||||
1. **Szolgáltatások → KVM → ISOs**.
|
||||
2. Kattints a **Download ISO** gombra.
|
||||
3. **Storage Pool:** `felhom`
|
||||
4. **URL:** `https://iso.felhom.eu/felhom-installer-1.29.0-pve9.2-1.iso`
|
||||
5. **Checksum:** `dceacae5da247d76cad065bf6c0d3bbefac8d8a5f8e571db2fd8449a97e94829`
|
||||
6. **Letöltés**. A végén ezt kell látnod: „**Checksum OK.**" Ha nem ezt látod, szólj.
|
||||
|
||||
*(Ha addig újabb telepítő jelenik meg a `felhom.eu/letoltes` oldalon, akkor azt töltsd le, az ott írt ellenőrző
|
||||
összeggel.)*
|
||||
|
||||
## 4. A hálózati híd — ez a kényes lépés (~5 perc)
|
||||
|
||||
A Felhom gépe csak egy **hídon** keresztül kerül a lakás hálózatára. A híd elkészítésekor az OMV hálózata újraindul,
|
||||
és **az OMV-nek szinte biztosan új címe lesz**. Ez várható, nem hiba. Mielőtt elkezded:
|
||||
|
||||
- Nézd meg és **írd fel az OMV gépnevét** (a webes felület jobb felső sarkában látszik, például `omv-sim.internal`
|
||||
— ebből a `omv-sim` rész a gépnév).
|
||||
- Készítsd elő a monitort és a billentyűzetet.
|
||||
|
||||
Lépések:
|
||||
|
||||
1. **Hálózat → Interfészek**.
|
||||
2. Jelöld ki a hálózati kártya sorát (például `enp1s0` vagy `eno1`), és kattints a **Törlés** gombra → **Igen**.
|
||||
**Még NE kattints a sárga sáv pipájára.** (Amíg a kártyának saját beállítása van, a híd nem tudja használni.)
|
||||
3. Kattints a **Létrehozás** (+) gombra, és válaszd a **Híd** lehetőséget.
|
||||
4. **Interfészek:** válaszd ki a hálózati kártyát.
|
||||
5. **IPv4 → Módszer:** **DHCP**. A többit hagyd üresen.
|
||||
6. **Mentés**.
|
||||
7. Most kattints a sárga sáv **pipájára** (Alkalmaz) → **Megerősítés** → **Igen**.
|
||||
8. Az oldal a „Kérjük várjon…" feliratnál **megáll**. Ez várható: az OMV közben új címet kapott.
|
||||
9. Várj 2 percet, majd nyisd meg: `http://<gépnév>.local` (például `http://omv-sim.local`).
|
||||
Ha ez nem nyílik meg, nézd meg a routered eszközlistájában az OMV gépet és az új címét.
|
||||
10. Lépj be újra. A **Hálózat → Interfészek** oldalon most egy `br0` sor van, rajta a cím.
|
||||
|
||||
**Ha az OMV oldala nem jön vissza** — lásd lent: „Ha valami nem megy", 1. pont.
|
||||
|
||||
> Ha Windows-on hálózati meghajtóként csatoltad az OMV megosztásait a régi címmel, azokat a gépnévvel csatold újra
|
||||
> (`\\<gépnév>\...`).
|
||||
|
||||
## 5. Az NVMe felszabadítása (~3 perc)
|
||||
|
||||
**Ismét: ezután az NVMe-n lévő minden adat elveszik. Csak akkor kezdd el, ha a filmek máshol is megvannak.**
|
||||
|
||||
1. **Szolgáltatások → SMB/CIFS → Megosztások**: jelöld ki az NVMe-n lévő megosztás(oka)t → **Törlés** → **Igen**.
|
||||
2. **Tárolás → Megosztott mappák**: jelöld ki az NVMe-n lévő mappá(ka)t → **Törlés** → **Igen**.
|
||||
3. **Tárolás → Fájlrendszerek**: jelöld ki a `/dev/nvme0n1p1` sort → **Leválasztás** (a lecsatolás ikon) → **Igen**.
|
||||
4. Sárga sáv **pipája** (Alkalmaz) → **Megerősítés** → **Igen**.
|
||||
5. **Tárolás → Lemezek**: jelöld ki a `/dev/nvme0n1` sort (Samsung 980) → **Törlés** → pipáld be a
|
||||
**Megerősítés** négyzetet → **Igen** → **Gyors**.
|
||||
6. Várd meg a végét, majd **Bezárás**.
|
||||
|
||||
> Miért kell törölni? A virtuális gép először a lemezről próbál indulni. Ha a lemezen még ott a régi partíció, a gép
|
||||
> megáll a „Booting from Hard Disk…" feliratnál, és a telepítő el sem indul. (A próbán pontosan ez történt.)
|
||||
|
||||
## 6. A Felhom virtuális gép (~5 perc)
|
||||
|
||||
1. **Szolgáltatások → KVM → VMs** → **Add new VM**.
|
||||
2. Töltsd ki így (ami nincs a listában, azt hagyd, ahogy van):
|
||||
|
||||
| Mező | Érték |
|
||||
|---|---|
|
||||
| VM name | `felhom` |
|
||||
| OS | Debian 13 (alapból ez) |
|
||||
| UEFI | **üresen hagyni** (a próbán így működött) |
|
||||
| CPUs | `4` |
|
||||
| Memória | `12` GiB |
|
||||
| Volume | Create new disk (alapból ez) |
|
||||
| Pool | `felhom` |
|
||||
| Méret | `1` Gigabytes *(ideiglenes lemez, a 4. lépésben töröljük)* |
|
||||
| Optical disk | `/srv/felhom-iso/felhom-installer-1.29.0-pve9.2-1.iso` |
|
||||
| Modell | **`bridge`** *(az alapértelmezett „virtio" NEM jó)* |
|
||||
| Híd | `br0` |
|
||||
|
||||
3. **Mentés**.
|
||||
4. Jelöld ki a `felhom` sort → **Hard disk** → **Add host disk**:
|
||||
- **Disk:** a `/dev/disk/by-id/nvme-…` kezdetű sor. **Semmiképp ne a `/dev/sda` vagy a `/dev/sdb`** — az az OMV
|
||||
saját lemeze, illetve a Toshiba.
|
||||
- **Bus:** `virtio` (alapból ez).
|
||||
- **Hozzáadás**.
|
||||
5. Jelöld ki a `felhom` sort → **Hard disk** → **Remove disk** → válaszd a `vda :: /srv/felhom-iso/felhom_d1.qcow2`
|
||||
sort → **Remove**.
|
||||
6. Jelöld ki a `felhom` sort → **AutoStart** → **Engedélyezés**. (Így az OMV újraindítása után a Felhom magától elindul.)
|
||||
|
||||
## 7. A Felhom telepítése (~15 perc)
|
||||
|
||||
1. Jelöld ki a `felhom` sort → **Állapot** → **Indítás**.
|
||||
2. Jelöld ki → **Console**. Megnyílik a gép képernyője a böngészőben. *(Ezt a gombot a próbán nem nyomtuk meg — a
|
||||
képernyőt más úton néztük.)*
|
||||
3. A telepítő képernyői angol nyelvűek. Ugyanúgy kell kitölteni, mint a szokásos Felhom útmutatóban:
|
||||
|
||||
| Képernyő | Mit csinálj |
|
||||
|---|---|
|
||||
| End User License Agreement | **I agree** |
|
||||
| Target Harddisk | Hagyd: `/dev/vda` (kb. 465 GB) → **Next** |
|
||||
| Country / Time zone / Keyboard | Hagyd: Hungary, Europe/Budapest, Hungarian → **Next** |
|
||||
| Password / Confirm | Egy jelszó (a Felhom később lecseréli) |
|
||||
| Email | **A saját e-mail címed** (a `mail@example.invalid`-ot nem fogadja el) |
|
||||
| Hostname (FQDN) | `felhom.<a te domained>` (a tőlem kapott domain; az alapértelmezettet nem fogadja el) → **Next** |
|
||||
| Summary | **Install** |
|
||||
|
||||
4. Kb. 4 perc után a gép magától újraindul. A CD-t nem kell kivenni.
|
||||
5. A képernyőn megjelenik: „**Felhom — a doboz készen áll, és a párosításra vár. Párosító kód: …**"
|
||||
Írd fel a kódot, és **szólj nekem**. Innen a szokásos útmutató 4–7. pontja jön (a „Kösd össze a Felhom dobozodat"
|
||||
e-mail, a jelmondat, majd a „beállító kód" e-mail).
|
||||
|
||||
## 8. Amit tudni érdemes utána
|
||||
|
||||
- **Az OMV újraindítása:** a Felhom gépét az OMV szépen leállítja, és újraindulás után magától elindítja. A próbán
|
||||
a Felhom vezérlőpultja kb. 2 perc múlva újra elérhető volt.
|
||||
- **A Felhom memóriája:** a 12 GB-os gépen a Felhom alkalmazásai kb. 7,7 GB-ot kapnak. Ez elég egy háztartás
|
||||
szokásos alkalmazásaihoz (fényképek nélkül bőven, a fényképkezelővel együtt szűkösen).
|
||||
- **Mentések:** egy lemezen a Felhom a saját mentéseit ugyanarra a lemezre teszi. Ez véd a véletlen törlés és a hibás
|
||||
fájlok ellen, de **nem véd az NVMe meghibásodása ellen**. Ezt a Felhom vezérlőpultja ki is írja. Ehhez kell egy
|
||||
második meghajtó vagy a távoli mentés — ezt beszéljük meg.
|
||||
- **Jellyfin (filmek):** egy lemezzel a Jellyfin telepítése most egy plusz lépést kér a vezérlőpulton (egy adattároló
|
||||
kijelölését). **Ezt a hívás közben együtt csináljuk.** A Felhom Jellyfinje az OMV hálózati megosztását ma **nem**
|
||||
tudja filmforrásként használni.
|
||||
- **A Toshiba lemez** az OMV-nél marad. Ha később mégis a Felhomnak adnád, a **Bus** legyen **`sata`** (a `virtio`-t
|
||||
a Felhom nem tudja biztonságosan azonosítani). A Felhom egy virtuális gépen belül nem látja a lemezek
|
||||
állapotjelzőit (SMART) — azokat az OMV figyeli.
|
||||
|
||||
## Ha valami nem megy
|
||||
|
||||
1. **Az OMV oldala eltűnt a híd után, és a `<gépnév>.local` sem nyílik meg.**
|
||||
- Várj még 2 percet, és nézd meg a router eszközlistáját.
|
||||
- Monitorral: az OMV képernyőjén **régi cím is állhat** — erre ne hagyatkozz. Lépj be `root`-ként, és írd be:
|
||||
`ip -br a` — a `br0` sor mutatja a valódi címet.
|
||||
- Ha a `br0` sorban nincs cím: írd be `omv-firstaid`, és válaszd a hálózati interfész beállítását (a kártyát,
|
||||
DHCP-vel). *(Ezt a próbán nem kellett használni, így nem ellenőriztük.)* Utána hívj.
|
||||
2. **„Létrehozás → Híd"-nál üres az „Interfészek" lista.** A kártyának még van saját beállítása: előbb töröld a
|
||||
kártya sorát (4. rész, 2. lépés), és csak utána csináld a hidat.
|
||||
3. **A Felhom gép képernyője „Booting from Hard Disk…"-nál megáll.** A lemezen régi adat maradt. Állítsd le
|
||||
(**Állapot → Force**), töröld a lemezt (5. rész, 5. lépés), majd indítsd újra.
|
||||
4. **A „Hard disk" gomb szürke.** Lemezt csak kikapcsolt gépnek lehet adni vagy elvenni. Kapcsold ki a gépet.
|
||||
Ha a Felhom már fut, a vezérlőpult „Kikapcsolás" gombjával — ez **indulás után 10 percig nem engedi**
|
||||
(„A gép most indult el. 10 perc múlva kapcsolhatod ki."); ez szándékos.
|
||||
5. **A pool „Inactive".** Jelöld ki → **Állapot** → **Indítás**.
|
||||
6. **A telepítő nem enged tovább:** „Please enter a valid Email address" vagy „Hostname does not look like a valid
|
||||
fully qualified domain name" → írd át az e-mail címet, illetve a gépnevet (7. rész táblázata).
|
||||
7. **A Felhom vezérlőpultján a Jellyfin telepítése ezt írja: „a(z) "Médiatár útvonal" (HDD_PATH) mező kitöltése
|
||||
kötelező".** Ez egy lemezes gépen várható. Ne próbálkozz tovább — hívj, együtt megcsináljuk.
|
||||
8. **A virtuális gép el sem indul, és hibát ír a virtualizációról (KVM).** A BIOS-ban nincs bekapcsolva a VT-x
|
||||
(„Mielőtt elkezded", B).
|
||||
|
||||
---
|
||||
|
||||
## Note for the operator (English)
|
||||
|
||||
**What worked:** the whole path, on an exact OMV 8.5.11-1 copy driven through its own web pages: the KVM plugin
|
||||
installs in 1.5 min; the Felhom ISO downloads inside the plugin with its sha256; the VM boots our ISO with the
|
||||
plugin's **default BIOS firmware**; the passed NVMe installs in < 4½ min; bind → ONLINE 1.5 min, and the box moved
|
||||
itself to the floor (0.314.0); claim, Vaultwarden, a local whole-guest backup (645 MB) and per-app copy all work;
|
||||
**OMV restart with Felhom running is clean** (the plugin shuts the guest down and AutoStart brings it back, dashboard
|
||||
in 1 min 52 s). The Felhom guest gets **7.7 GB** of the 12 GB VM. **What did not / risks for Ferenc:** (1) the bridge
|
||||
step **changes OMV's IP and hangs the page**, and OMV's own console text shows the old address — the guide sends him
|
||||
to `<hostname>.local` or the router, with monitor steps as the fallback; (2) the plugin boots the disk first, so an
|
||||
un-wiped NVMe **hangs the VM** — the guide wipes it; (3) the host-disk list **offers OMV's own system disk** next to
|
||||
the NVMe — one wrong click destroys OMV; (4) **on one disk Jellyfin's install is refused with a raw field error**
|
||||
(R-1068) — the dashboard's way out (register `/mnt/sys_drive`) is real in the code but was not pressed here, so do that
|
||||
step with him on the call; (5) **Jellyfin cannot use the OMV films share** (network storage is browse-only by design,
|
||||
R-108 → R-1071 for your decision); (6) Felhom inside a VM **sees no SMART** for the NVMe (R-1073) and a second disk on
|
||||
the plugin's default `virtio` bus **cannot be formatted** by Felhom (R-1069; `sata` works); (7) one backup copy only, on
|
||||
the same NVMe, until a second drive or off-site is added. Not checked: UEFI, the plugin's noVNC console page, the real
|
||||
Samsung by-id name, `omv-firstaid`.
|
||||