01a8155c5a
Design inputs: SPIKE-universal-iso-{1,2,3,4}-2026-07-31.md. Every choice below is a measurement.
NEW: scripts/iso/pkg/ — the felhom-bootstrap .deb, built from committed source.
Two files only (script + unit), NOT three: felhom-bootstrap.sh:91 reads /etc/felhom/bootstrap.env
only 'if [[ -r ]]', and its defaults at :95-96 are EXACTLY what the pairing env set
(build-felhom-iso.sh:257-258) — so shipping it would add a 0600 file to a public package to express
values the script already defaults to. NO dependencies: the binaries it calls run at FIRST BOOT,
not at postinst time, so SPIKE 4's open 'dpkg --configure -a' ordering question does not arise.
The postinst is structurally incapable of failing (no 'set -e', every statement guarded, ends
'exit 0'); build-deb.sh self-asserts G8/G9 and REFUSES to emit a package that violates them.
iso-repack.sh — two changes, both narrowing rather than deleting:
- R-155 guard: now applies to FELHOM_MENU=single ONLY. It protected the single-entry mode's promise
(one button labelled 'install' must not drop into a disk-picker); a release image carries no
auto-installer-mode.toml BY DESIGN (gate G1), so refusing it would be the guard firing on the
shape it describes rather than the one it prevents.
- the menu collapse now has a release mode: two INTERACTIVE entries, Graphical default, timeout 15.
Entry-count and banned-token gates are per-mode; the six-token list is UNCHANGED for single mode.
- .deb injection into /proxmox/packages/, with a skip-list collision check (a colliding name would
be dropped silently — the inert-payload class) and a post-remaster assertion that it landed in
final.iso, not merely in the extract tree.
build-felhom-iso.sh — --release: no profile, no root hash, no answer.toml, no prepare-iso at all.
Skipping prepare-iso is what removes the Automated entry by construction, since the stock grub.cfg
emits it only inside 'if [ -f auto-installer-mode.toml ]'.
R-128 RULING — FIXED, by correcting the claim rather than inventing an assertion for it. The comment
said ISO_VERSION 'aligns with SCRIPT_VERSION'; nothing evaluated it and the two had drifted. The
coupling does not exist: the ISO is frozen, felhom-host-install.sh is fetched at run time from main
(R-94/R-110), so an assertion would invent a constraint. Comment corrected, ISO_VERSION -> 1.26.0.
Release gate G6 AMENDED before the build, with its reasoning recorded in the runbook: the six-token
ban existed to keep users away from the manual installer, which the ruling makes the product.
'proxtui' (the TUI installer we ship) and 'nomodeset' (its graphics fallback) are dropped for
release images; proxdebug/Rescue Boot/memtest/fwsetup stay banned in both modes.
81 lines
2.9 KiB
Cheetah
81 lines
2.9 KiB
Cheetah
# Felhom PUBLIC RELEASE ISO — GRUB menu. GENERATED by iso-repack.sh (FELHOM_MENU=release).
|
|
#
|
|
# TWO entries, both INTERACTIVE, and that is the whole design.
|
|
#
|
|
# WHY NOT THE AUTOMATED ENTRY: SPIKE-universal-iso-1 measured that no udev property distinguishes an
|
|
# internal system disk from a customer's external backup drive (ID_BUS is `ata` for BOTH on a SATA
|
|
# drive in a USB caddy; no removability property is exposed at all; NVMe carries a different property
|
|
# set), and that a filter matching two disks does NOT fail safe — the installer silently picks one and
|
|
# wipes it, while validate-answer accepts the answer. There is therefore no safe automated disk
|
|
# selection for hardware nobody has seen. The stock installer already shows the target disk and a
|
|
# `Bootdisk(s)` summary before erasing, so the human doing the choosing is the safety mechanism.
|
|
#
|
|
# WHY THE GRAPHICAL ENTRY IS DEFAULT: a tester who boots the stick and walks away must not land on a
|
|
# destructive unattended path. The default is the one that waits for a person.
|
|
#
|
|
# WHY timeout=15: SPIKE-universal-iso-2 lost an entire probe to the installed system's 1-SECOND menu.
|
|
# A human reading two options on unfamiliar hardware needs longer than a machine does. Note
|
|
# `timeout_style` (underscore) — the stock PVE config writes `timeout-style`, which GRUB does not
|
|
# recognise as a variable name at all, so the stock menu's own timeout directive is inert.
|
|
#
|
|
# The `linux` / `initrd` lines are lifted VERBATIM by iso-repack.sh from the stock ISO's own Graphical
|
|
# and Terminal-UI entries, so a PVE version bump that changes the kernel path tracks automatically
|
|
# instead of silently diverging from a copy frozen here.
|
|
|
|
insmod gzio
|
|
insmod iso9660
|
|
insmod png
|
|
insmod gfxmenu
|
|
|
|
if [ x$feature_default_font_path = xy ] ; then
|
|
font=unicode
|
|
else
|
|
font=$prefix/unicode.pf2
|
|
fi
|
|
|
|
set gfxmode=1024x768,800x600,640x480
|
|
set gfxpayload=1024x768
|
|
|
|
if loadfont $font; then
|
|
if test "${grub_platform}" = "efi"; then
|
|
insmod efi_gop
|
|
insmod efi_uga
|
|
fi
|
|
insmod video_bochs
|
|
insmod video_cirrus
|
|
insmod all_video
|
|
insmod gfxterm
|
|
set theme=/boot/grub/felhomtheme/theme.txt
|
|
export theme
|
|
terminal_input console
|
|
terminal_output gfxterm
|
|
fi
|
|
|
|
insmod serial
|
|
insmod usbserial_common
|
|
insmod usbserial_ftdi
|
|
insmod usbserial_pl2303
|
|
insmod usbserial_usbdebug
|
|
if serial --unit=0 --speed=115200; then
|
|
terminal_input --append serial
|
|
terminal_output --append serial
|
|
fi
|
|
|
|
set timeout_style=menu
|
|
set timeout=15
|
|
set default=0
|
|
|
|
menuentry 'Felhom telepítés' --class felhom --class os {
|
|
echo 'A Felhom telepítése indul — válassza ki a lemezt a telepítőben...'
|
|
@@LINUX_GFX@@
|
|
echo 'Rendszerbetöltő betöltése...'
|
|
@@INITRD@@
|
|
}
|
|
|
|
menuentry 'Felhom telepítés (szöveges mód)' --class felhom --class os {
|
|
echo 'A Felhom telepítése indul szöveges módban...'
|
|
@@LINUX_TUI@@
|
|
echo 'Rendszerbetöltő betöltése...'
|
|
@@INITRD@@
|
|
}
|