Fix raw USB live boot and verify both installation media paths

This commit is contained in:
Codex
2026-10-14 07:37:24 +03:00
parent c26442f6f5
commit b54693be0c
11 changed files with 339 additions and 8 deletions
+5
View File
@@ -1,6 +1,11 @@
# Install Hydra OS
Hydra OS targets x86_64 UEFI systems. Disable Secure Boot for this first image.
For a USB flash drive, use the [2026-10-14 corrected ISO](releases/2026-10-14-usb-fix/README.md),
`hydra-os-usb-fixed.iso`. The original 0.2.0 ISO passed optical-media tests but has
a raw USB live-boot bug. Write the corrected image to the entire flash drive
using a host-native image writer; this erases that flash drive. Mounting it before
reboot is unnecessary. Physical firmware compatibility still requires testing.
Boot the ISO and enter `:shell` in the terminal VM menu. The live session uses a locked
`hydra-live` account with local sudo access; changes in the live filesystem are
volatile. The image provides no default SSH login or universal installed password.
@@ -0,0 +1,49 @@
# Hydra OS USB media correction — 2026-10-14
The original 0.2.0 ISO (`451e058228d7cbea87b5301ae6502b6be609cf7f52cc7c9e6fb477822501389b`)
boots as a virtual CD-ROM but fails when attached as raw USB storage. GRUB's HFS+
hybrid uses the same `HYDRA_OS` label as ISO9660; dracut then selects the HFS+
partition and fails to mount the live payload. This was reproduced under OVMF
with a read-only USB image and no physical disk access.
The corrected image adds native xorriso `-hfsplus off` to `grub-mkrescue`. It keeps
GPT, the EFI partition and El Torito boot information, and removes HFS+/APM.
The builder now rejects HFS+/APM in its inspection report.
- Local file: `build/artifacts/hydra-os-usb-fixed.iso`
- Size: 2,380,120,064 bytes
- SHA256: `3a126e1a1004ba24ead66971013ba4a8468508f6fac4dcaf04aa9770cb8df7e1`
- Frozen payload source: `ebeebc7fb1aed07a5f50bc62374365d614953dad`
- The ISO is local; this Git directory contains evidence, not an ISO download.
Kernel, live initramfs, squashfs and embedded build manifest match the original
ISO byte-for-byte. [Payload hashes](payload-comparison.json) were computed from
the actual original and corrected ISO extents. This is a media-layout repair,
not a new system payload or signed runtime update. The original artifact and
release evidence remain unchanged.
## Verification
`python3 -m unittest discover -s tests -q` passed **439 tests** inside Ubuntu with
Python 3.12 and OpenSSL available. Initial host runs failed in pre-existing
OpenSSL-dependent updater/signature tests because OpenSSL was absent or lost
from the test PATH; these were not reported as successful runs.
The same corrected ISO passed the real `dev/iso-smoke.py --live-only` checks in
both [USB](usb-live-acceptance.json) and [CD-ROM](cdrom-live-acceptance.json) modes:
KVM, UEFI live user and overlay root, readable squashfs, sudo, required tools,
NetworkManager and Hydra network services, active greetd/labwc/foot, and normal
shutdown. Each run used fresh OVMF variables and a disposable test disk. Neither
invoked the installer or accessed host disks. The earlier full installation and
recovery checks apply to the byte-identical system payload, not a newly repeated
full installation test of this repacked ISO.
The remaining FAT12 EFI partition is unchanged. OVMF successfully starts it via
USB; this does not certify detection by every physical firmware. ASUS boot-menu
visibility, USB port behavior and actual laptop live boot still need physical
confirmation. Secure Boot must remain disabled.
Reflash the corrected ISO using a host-native writer. For the existing NixOS
setup, GNOME Disks can be run temporarily; an Etcher process inside rootless
Distrobox could not elevate or write the raw USB device. Do not change SSD
partitions to repair an installation USB.
@@ -0,0 +1,32 @@
{
"schema": 1,
"status": "passed",
"scratch": "/tmp/hydra-iso-smoke-l7g8944d",
"iso": "/home/workspaces/ubuntu-dev/home/Projects/hydra-os/build/artifacts/usb-fix-nohfs/hydra-os.iso",
"iso_sha256": "3a126e1a1004ba24ead66971013ba4a8468508f6fac4dcaf04aa9770cb8df7e1",
"live_media": "cdrom",
"scope": "live-only",
"checks": {
"live_qmp_kvm": {
"status": "passed",
"output": "{\"enabled\": true, \"present\": true}"
},
"live_boot": {
"status": "passed",
"output": "/usr/bin/hydra\n/usr/bin/hydra-install\n/usr/bin/qemu-system-x86_64\n/usr/bin/qemu-img\n/usr/bin/remote-viewer\n/usr/bin/foot\n/usr/bin/labwc\nactive\nactive\nactive\n"
},
"live_graphical_session": {
"status": "passed",
"output": "active\n832\n854\n"
},
"live_poweroff": {
"status": "passed",
"output": "Live-only check completed without invoking the installer"
}
},
"physical_hardware": "pending",
"nested_scope": "Normal-user KVM VM launch, bridge helper and QMP; no nested guest OS boot",
"ovmf_code_sha256": "f3ff7e73448ed2845ee15356f394882f5618eb5dab92c9a30ec6ee0e1468553a",
"ovmf_vars_input_sha256": "6ed987af3a3c155be71665f510eae3e007eda9b8b94afd59d45e91c4a11565cc",
"completed_utc": "2026-10-14T04:35:22Z"
}
@@ -0,0 +1,26 @@
{
"vmlinuz": {
"size": 22666224,
"original": "bb77e0f760f1ce97d2f6e23acad1fb2bb3dccab6c1381bec0868327e110ec3a5",
"candidate": "bb77e0f760f1ce97d2f6e23acad1fb2bb3dccab6c1381bec0868327e110ec3a5",
"matches": true
},
"initramfs-live.img": {
"size": 83130912,
"original": "694778902d95bfc94da1d7566d371379fb4a60de95e49babb6500cf907509d8e",
"candidate": "694778902d95bfc94da1d7566d371379fb4a60de95e49babb6500cf907509d8e",
"matches": true
},
"squashfs.img": {
"size": 2254630912,
"original": "ca550eb444e05505f815f4820b28527c3f8e8aee425005b73b7f02e4e74f7fc8",
"candidate": "ca550eb444e05505f815f4820b28527c3f8e8aee425005b73b7f02e4e74f7fc8",
"matches": true
},
"build-manifest.json": {
"size": 142178,
"original": "126c66d84b7c2160a517cbd0c3649630982a4d734e113ecdd6ee48e0859f1630",
"candidate": "126c66d84b7c2160a517cbd0c3649630982a4d734e113ecdd6ee48e0859f1630",
"matches": true
}
}
@@ -0,0 +1,32 @@
{
"schema": 1,
"status": "passed",
"scratch": "/tmp/hydra-iso-smoke-arp78mfm",
"iso": "/home/workspaces/ubuntu-dev/home/Projects/hydra-os/build/artifacts/usb-fix-nohfs/hydra-os.iso",
"iso_sha256": "3a126e1a1004ba24ead66971013ba4a8468508f6fac4dcaf04aa9770cb8df7e1",
"live_media": "usb",
"scope": "live-only",
"checks": {
"live_qmp_kvm": {
"status": "passed",
"output": "{\"enabled\": true, \"present\": true}"
},
"live_boot": {
"status": "passed",
"output": "/usr/bin/hydra\n/usr/bin/hydra-install\n/usr/bin/qemu-system-x86_64\n/usr/bin/qemu-img\n/usr/bin/remote-viewer\n/usr/bin/foot\n/usr/bin/labwc\nactive\nactive\nactive\n"
},
"live_graphical_session": {
"status": "passed",
"output": "active\n855\n869\n"
},
"live_poweroff": {
"status": "passed",
"output": "Live-only check completed without invoking the installer"
}
},
"physical_hardware": "pending",
"nested_scope": "Normal-user KVM VM launch, bridge helper and QMP; no nested guest OS boot",
"ovmf_code_sha256": "f3ff7e73448ed2845ee15356f394882f5618eb5dab92c9a30ec6ee0e1468553a",
"ovmf_vars_input_sha256": "6ed987af3a3c155be71665f510eae3e007eda9b8b94afd59d45e91c4a11565cc",
"completed_utc": "2026-10-14T04:35:22Z"
}