Files
felhom.eu/REPORT.md
T

133 lines
6.5 KiB
Markdown

# REPORT — TASK-G: arm the HP install ISO + assisted-picker filing (2026-07-21)
Baseline `0073691`, clean tree; ISO tooling unchanged since v1.22.0, so this is a **rebuild at
v1.22.0** with a new profile name (`hp-demo`), not a version bump.
| Part | Status |
|---|---|
| 1 — arm the ISO | **DONE**, filter verified from inside the built ISO |
| 2 — write it (gated) | **DONE**, byte-proven, and re-verified from the written stick |
| 3 — filing | **DONE****R-58** |
## Part 1 — the armed ISO
Built from an **uncommitted** working profile, `/mnt/5_hdd/felhom.eu/felhom-iso/hp-demo.profile`
(mode 0600, the `n100-demo.profile` precedent — a real target serial never goes in git). It is the
committed `profiles/hp.profile` with exactly one change: the placeholder serial replaced.
```
felhom-pve-9.2-1-v1.22.0-hp-demo-generic.iso
sha256 de693f622c4c628d75eade691b2e8cb008175231f3ed97e29535e61de12bbd0b
bytes 1 705 338 880
loader shim (stock MS-signed chain; Secure Boot OK) secret-bearing: no
```
`validate-answer` gated on its **output text**, not `$?` — log shows
`The answer file was parsed successfully, no errors found!` through `gate_validate_answer`.
### The filter, extracted from INSIDE the built ISO
Not read from the profile — from the artifact, via `osirrox`, comments stripped:
```
[disk-setup]
filesystem = "ext4"
filter-match = "all"
filter.ID_SERIAL_SHORT = "182195804614"
```
| assertion | result |
|---|---|
| pins the SanDisk X600 128GB (`sda`) `182195804614` | 1 occurrence |
| NVMe `58BS11AFT8MQ` present anywhere in the answer file | **0** |
| `REPLACE-WITH-TARGET-SSD-SERIAL` placeholder remaining | **0** |
| `filter.*` directives | exactly **1** |
| `disk-list =` directive | **0** |
`filter-match = "all"` with a single `ID_SERIAL_SHORT` is an exact-one-disk selector. **The 1TB NVMe
is outside the filter** and is not touched by the installer; it joins later through the normal
Tárhely flow.
*Method note:* my first sanity check grepped the whole profile and reported the NVMe serial as
present — it appears in a **comment** documenting what is excluded. Re-verified by sourcing the
profile and inspecting the consumed `FELHOM_DISK_SETUP` variable, then again from inside the ISO,
which is what actually ships. Grepping a file is not the same as reading what a tool consumes.
## Part 2 — the write
Same procedure as TASK-F, no shortcuts. Full evidence block on the Samsung stick
(`/dev/disk/by-id/usb-Samsung_Flash_Drive_0375123010001586-0:0``/dev/sdc`, 119.5 GiB):
| check | result |
|---|---|
| `ID_BUS=usb` | usb |
| `removable=1` | 1 |
| `findmnt` (device **and** every partition) | empty |
| `/etc/fstab` | 0 lines |
| LVM PV | 0 (only `/dev/sda3` is a PV) |
| ZFS | 0 pools on the host |
| guest configs referencing it | 0 |
| open handles | 0 |
Destroyed: the `hp-generic` **safety** ISO written in TASK-F. Excluded: `/dev/sdb`, the ADATA
HD710 PRO — mounted at `/mnt/hdd_1` and bind-mounted into guest 9201, i.e. **live customer data**;
it reports `ID_BUS=ata` and `removable=0`, so it fails both required positive checks despite a
`usb-…` by-id name. Operator confirmed the printed device; identity was **re-asserted at write
time** in case of re-enumeration since the confirm.
```
device sha256: de693f622c4c628d75eade691b2e8cb008175231f3ed97e29535e61de12bbd0b
iso sha256: de693f622c4c628d75eade691b2e8cb008175231f3ed97e29535e61de12bbd0b
RESULT: MATCH - byte-proven
```
`dd … oflag=direct conv=fsync`, then the ISO's exact byte-length read back from the device and
hashed. Customer data drive re-checked after the write: still mounted at both paths.
**Belt-and-braces:** the stick was then mounted read-only and the filter read back off the physical
device — `filter.ID_SERIAL_SHORT = "182195804614"`, NVMe serial absent. The profile is what I
intended, the ISO is what I built, and the stick is what you will boot; all three now agree.
Staged ISO copies removed from `felhom-pve:/root/` (71G free).
## Part 3 — R-58, assisted disk-picker install mode
Filed with your argument verbatim. Shape: a third ISO mode beside unattended-serial and
match-nothing-safety — enumerate candidates with size/model/serial, exclude the install media, take
a selection plus a confirm, proceed. Unattended+serial stays the appliance/factory mode.
**Slice 1 is the abort screen**, deliberately, because it is the same enumeration code and it
collapses the two-boot dance on its own: on filter-no-match, print the candidate table plus the
one-line hint naming which serial to put in the profile. Today the fail-safe is correct but mute —
which is exactly what made this task need a hand-read serial between two boots.
It matters most for the **BYO / reinstall** flow: a customer's existing hardware, or a rebuild of a
box whose disk layout nobody recorded, is precisely where the serial is unknown and a wrong guess is
destructive.
Also documented `scripts/iso/README.md` § **HP mini profile**: shim proven on this board by the
safety boot, the uncommitted-armed-profile pattern, verify-from-inside-the-ISO, and the prior-LVM
caveat below.
## For the operator — boot instruction
**Stick → HP, boot it, walk away.** It formats the SanDisk `sda`, installs, and reboots into day-0.
Secure Boot stays **ON** (this is the shim loader, proven on this board). Nothing else to press.
**One thing that could stop it, worth knowing before you walk away.** The Proxmox auto-installer does
not force-clear a pre-existing **LVM PV** signature. If that SanDisk carries a previous
Linux/Proxmox install, the install aborts at *"cannot init physical volume"* — safely, touching
nothing. A previous Windows/NTFS install is fine. If you see that message: wipe the target
(`blkdiscard -f /dev/sda` from any live environment) and boot **the same stick** again — the ISO does
not need rebuilding. This is documented behaviour (spike S2b), not a defect in this build.
## Remaining (unchanged from TASK-F unless noted)
- **Agent v0.93.0 is source-only** — committed, unbuilt, unpublished; rides the next agent train.
- **R-17** — deleting the `u629193-sub1` archive is an operator **console** action.
- **The full catalog resolvability table** is still owed (needs one `docker login` on DooPlex).
- **wanderer** was re-pinned to a 3-service upstream shape and has never been deployed.
- **`hidden` lifecycle state** has no catalog user yet; only `abandoned` is exercised end to end.
- **After the HP comes up:** bind it on the hub and run day-0; the 1TB NVMe is added afterwards
through the Tárhely flow, never through the installer.