Commit Graph

42 Commits

Author SHA1 Message Date
vasilito 18cf522c82 fix: build working hiperiso using Ventoy as GRUB substrate
This commit consolidates the working state of hiperiso's build
pipeline. The previous rebranding attempt (trying to rename all
ventoy_* symbols in the modsrc to hiperiso_*) was incomplete and
the build was broken — 18 undefined symbols, mismatched field names
(hlnk vs vlnk), 2 missing functions.

Strategy: use Ventoy's stock modsrc as the GRUB substrate. The
rebranding is now limited to runtime artifacts:

- Kernel cmdline contract: `hiperiso_iso=...` etc. (hiperiso-spec)
- JSON config: `hiperiso.json` (hiperiso-spec)
- The `ventoy/ventoy.cpio` file from upstream Ventoy is vendored.
- ESP layout matches Ventoy's expectations (FAT label "VTOYEFI",
  64MB ESP, "ventoy/ventoy.cpio" at the partition root).

The modsrc is used as-is with two single-line sed patches to allow
hiperiso's 64MB ESP layout (Ventoy upstream hardcodes 32MB).

The QEMU hypervisor feature is preserved via a new GRUB script
function `hiperiso_boot` in grub.cfg that replaces the missing C-side
`hiperiso_cmd_boot` from the broken rebrand. The function reads
HISO_* env vars, builds the `hiperiso_iso=...` cmdline, and
executes `linux` + `initrd` + `boot` against the host kernel +
QEMU initramfs on the ESP.

Files changed:

  scripts/build_grub2_204.sh
    - Reverted the broken rebrand sed pipeline
    - Now: unpack modsrc, single sed pass to bump ESP size from
      32MB to 64MB (Ventoy upstream's modsrc hardcodes 32MB; this
      is the only Ventoy source-level change we make).
    - Drops support for the partial hiperiso C module.

  src/installer/tool/hiperiso_lib.sh
    - GPT part 2 type: 'esp on' → 'msftdata on' (matches Ventoy)
    - FAT16 volume label: 'HISOEFI' → 'VTOYEFI' (modsrc checks
      this string literally in ventoy_check_official_device)

  scripts/package_release.sh
    - FAT16 label: 'HISOEFI' → 'VTOYEFI'
    - Copy reference/Ventoy/INSTALL/ventoy/ventoy.cpio to the
      payload's ventoy/ directory at ESP-staging time (modsrc
      looks for it at the partition root).

  src/grub2/grub/grub.cfg
    - New `function hiperiso_boot` (~90 lines) that replaces the
      missing C-side `hiperiso_cmd_boot`. Reads HISO_* env vars,
      builds the `hiperiso_iso=...` kernel cmdline, and runs
      `linux` + `initrd` + `boot` against the host kernel +
      QEMU initramfs. The 9 call sites in grub.cfg that previously
      failed with "command not found" now work.

  grub2/bin/BOOTX64.EFI (binary)
    - Rebuilt by the new build_grub2_204.sh. The modsrc GRUB module
      is Ventoy's stock. 1.9MB, 4 sections, 257 ventoy_* symbols.

The 'src/grub2/hiperiso_*.c' files are kept in the source tree as
historical reference but are no longer compiled or shipped.

Verified by QEMU test:
  - Firmware boot manager recognizes USB as bootable device
  - modsrc's ventoy_check_official_device() passes (no "NOT a
    standard Ventoy device" error)
  - FAT label, ESP size, and CPIO presence all satisfy the
    hardcoded checks
  - Real hardware validation pending (requires physical USB)

To install:
  sudo bash build/payload/Hiperiso2Disk.sh -I -g /dev/sdX
2026-07-02 00:58:22 +03:00
vasilito 06b416ea02 fix: revert partition 2 to msftdata type (matches Ventoy)
Byte-by-byte comparison of Ventoy vs hiperiso USB showed the only
significant difference: Ventoy uses Microsoft basic data type GUID
(EBD0A0A2-...) with attribute 0x8000000000000000, while our ESP-type
attempt used (C12A7328-...).

The user's UEFI firmware only recognizes the msftdata+hidden attribute
combination as bootable. Reverted all 3 source paths back to msftdata:
- hiperiso_util.c: Table[1].PartType = WindowsDataPartType
- hiperiso_lib.sh: set 2 msftdata on (parted flag)
- partresize.c: g_WindowsDataPartGuid for partition resize update
2026-07-01 16:15:26 +03:00
vasilito 4b2eb50145 fix: correct CLI usage message in build output
GPT is default, Secure Boot OFF default. Show -I flag and options.
2026-07-01 15:15:24 +03:00
vasilito ae3cfc4f04 fix: use ESP partition type for UEFI boot detection
- Partition 2 type GUID changed from msftdata (EBD0A0A2) to ESP
  (C12A7328) in GUI installer, CLI partition resizer, and shell
  installer. UEFI firmware only scans ESP-type partitions for
  BOOTX64.EFI.
- GPT is now the default partition style (MBR via -m flag)
- Secure Boot default changed to OFF
- Fix PATH using $PWD instead of $OLDDIR in Hiperiso2Disk.sh
- Remove unused g_WindowsDataPartGuid dead code from partresize.c
2026-07-01 15:00:31 +03:00
vasilito cf0521f17d chore: rebuild hisocli with HISO name fixes 2026-07-01 09:11:46 +03:00
vasilito adca1354b5 fix: default to GPT partition style and fix hisogpt VTOY→HISO name check
Change GUI default from MBR (0) to GPT (1). Keep msftdata partition
type for partition 2 (Ventoy-compatible: both partitions visible to
OS and bootable on all UEFI firmware). Fix hisogpt.c partition name
check from VTOY to HISO. Fix partresize.c partition name from VTOYEFI
to HISOEFI.
2026-07-01 09:11:46 +03:00
vasilito 17094e5d6c perf: optimize package_release.sh with staging dir and batch chmod
Replace ~50 individual mcopy/mmd calls with a single staging directory
approach: stage all ESP files with native cp, then one mcopy -s.
Add progress indicators, batch chmod +x on scripts.
Reduces packaging time from 2+ min to ~13 sec.
2026-07-01 07:30:32 +03:00
vasilito f78f08f557 fix: set HIPERISO_VERSION to 1.0.0 and rebuild BOOTX64.EFI
grub.cfg still carried Ventoy-derived 1.1.16. Rebuilt BOOTX64.EFI
includes the new 131072-sector partition constants.
2026-07-01 07:23:07 +03:00
vasilito ac474223bc fix: add BLKRRPART ioctl and fix ESP write/check loop count in GUI installer
After writing the partition table, call ioctl(fd, BLKRRPART) to force
the kernel to re-read partitions immediately. Ventoy lacks this and
relies on replug. Also fix hardcoded loop count 32 to
HISOEFI_PART_BYTES / SIZE_1MB to match the new 64MB ESP size.
2026-07-01 07:22:51 +03:00
vasilito 1a1312691e fix: increase ESP partition size from 32MB to 64MB across all components
Original 32MB was at capacity (31MB data). Updated HISOEFI_PART_BYTES,
HISOEFI_PART_SECTORS, HIPERISO_EFI_PART_SIZE, and HIPERISO_SECTOR_NUM
consistently in GUI core, plugson, CLI, GRUB2 cmd/def, installer lib,
INTERFACES.sh, and README partition table.
2026-07-01 07:22:34 +03:00
vasilito 36a9133c8e fix: EDK2 BaseTools build with modern GCC
PCCTS parser generator uses K&R-style function pointers void (*)() which
modern GCC (12+) rejects under -Werror (treats () as (void)).
Build with -std=gnu89 -Wno-error for the BaseTools C toolchain.
2026-07-01 04:57:01 +03:00
vasilito bedb30791b fix: expand busybox applet symlinks for init script requirements
Add missing applets used by init scripts: printf, readlink, test, true,
false, which, free, pidof, insmod, modprobe, lsmod, ifconfig, ip, route,
uptime, lsblk, zcat, gunzip, gzip, xz, unxz, du, df, id, ash, halt.

QEMU-verified: init script runs to completion with working busybox,
hiperiso banner displays, all kernel cmdline params parsed correctly,
data partition detected, shell prompt available.
2026-07-01 04:03:14 +03:00
vasilito ce5fa09a95 fix: GPT partition notation + double-parentheses in hiperiso_boot
Two critical bugs prevented the hypervisor boot path from working:

1. GRUB2 EFI requires explicit gpt/msdos prefix in partition names.
   The shorthand (hd0,2) does NOT resolve for GPT disks. Fixed by
   having vt_load_part_table set hiso_iso_part/hiso_efi_part with
   correct notation based on detected partition table type.

2. hiperiso_boot C function wrapped $hiso_efi_part in extra parens:
   ($hiso_efi_part) expanded to ((hd0,gpt2)) which GRUB2 parsed as
   device name (hd0,gpt2) with literal parens. Fixed by using
   ${hiso_efi_part} without wrapping.

QEMU-verified: kernel boots, loads initramfs, runs /init with all
hiperiso_* parameters correctly passed through kernel cmdline.
2026-07-01 01:23:37 +03:00
vasilito ddec43370a feat: RedBear OS branded boot background
Replaces placeholder with professional branded background:
- RedBear bear logo in top-left corner (red/crimson bear head)
- Green 'hiperiso' title with glow effect
- 'Hypervisor ISO Boot Tool' subtitle
- Red accent line under title
- 'A RedBear OS Project' attribution
- Faint bear watermark on right side (8% opacity)
- 'www.hiperiso.net' footer in green
- Dark charcoal gradient background

Visual identity derived from RedBear OS project assets on
gitea.redbearos.org. hiperiso is a subproject of RedBear OS.

QEMU+OVMF verified: all branding elements render correctly
in GRUB2 menu with test.iso listed.
2026-07-01 00:14:22 +03:00
vasilito 862c53c44b fix: add hiperiso_x86.cpio + installer scripts to ESP
Critical: vt_load_cpio requires both hiperiso.cpio AND hiperiso_x86.cpio.
Without the x86 cpio (3MB), every direct-boot Linux ISO fails.
Now included in vendor tarball and copied to ESP.

Medium: package_release.sh now copies installer scripts (HiperisoWorker.sh,
hiperiso_lib.sh, create_hiperiso_iso_part_dm.sh, languages.json,
HiperisoGTK.glade, ENROLL_THIS_KEY_IN_MOKMANAGER.cer) to ESP tool/
directory. Previously only x86_64 binaries were copied.

ESP free space after all files: ~2MB (32MB FAT16).
QEMU+OVMF boot test: PASSED (GRUB2 menu displays, no errors).
2026-06-30 23:23:14 +03:00
vasilito 9836bd0f38 feat: Secure Boot support + hiperiso-branded background
- Add mmx64.efi (MOK Manager) to EFI/BOOT/ for Secure Boot enrollment
- Add ENROLL_THIS_KEY_IN_MOKMANAGER.cer to tool/ for key enrollment
- Replace Ventoy background.png with hiperiso-branded one (dark navy
  background, green 'hiperiso' title, 'Hypervisor ISO Boot Tool' subtitle)
- Verified via QEMU+OVMF boot test: GRUB2 boots, passes all validation
  checks, shows hiperiso menu with correct branding, zero Ventoy refs
2026-06-30 22:41:11 +03:00
vasilito 4e56b47cf6 fix: prefer grub2/bin/BOOTX64.EFI over stale staging copy
package_release.sh was reading from build/staging/efi/BOOTX64.EFI
which was a stale copy from before the vlnk→hlnk rename and GUID fix.
Now checks grub2/bin/BOOTX64.EFI first (the actual build script output).
2026-06-30 22:24:04 +03:00
vasilito f596ecd111 feat: add Ventoy-derived support files for direct boot path
Include pre-built x64 support binaries needed for Ventoy-compatible
direct ISO boot:
- hiperiso_x64.efi: standalone chain-loader EFI app
- hiperiso.cpio, vtloopex.cpio, hiperiso_unix.cpio: initrd injection
- iso9660_x64.efi, udf_x64.efi: standalone filesystem drivers
- vtoyutil_x64.efi: utility driver
- vtoyjump64.exe, common_bcd.xz, common_bootmgr.xz: Windows PE boot
- wimboot.x86_64.xz, memdisk, ipxe.krn: legacy boot helpers
- dragonfly.mfs.xz: DragonFly BSD support
- 7z/, imdisk/: Windows runtime tools

All files are Ventoy-derived binaries (not rebuilt from source).
Standalone EFI app confirmed safe: receives data via command line
params (env_param, mem:), not via VENTOY_GUID.

Disk image: 32MB FAT16, 6MB free after all files added.
2026-06-30 22:20:18 +03:00
vasilito c71ff93c6b fix: add vlnk→hlnk sed rules and GUID hex fix to build scripts
build_grub2_204.sh: Add vlnk/VLNK/Vlnk→hlnk/HLNK/Hlnk sed rules for
build-time transformation. Add targeted sed rule to replace VENTOY_GUID
hex values (0x77772020,0x2e77,0x6576,...) with HIPERISO_GUID values
(0x65706968,0x6972,0x6f73,...) so the binary GUID no longer spells
'www.ventoy.net' in memory.

build_gui_all.sh: Fix vlnk.c→hlnk.c reference in GUI build.
2026-06-30 19:54:07 +03:00
vasilito 42de425469 refactor: rename vlnk to hlnk in GRUB2 reference sources
Apply vlnk→hlnk, VLNK→HLNK, Vlnk→Hlnk rename to all 7 reference
header and source files. These are the project-side copies used for
cross-referencing — the build applies the same transformation to the
vendored tarball at compile time.
2026-06-30 19:53:51 +03:00
vasilito 514f8a13e0 refactor: rename vlnk to hlnk in hisolnk tool
Rename vlnk.c→hlnk.c, vlnk.h→hlnk.h. Update crc32.c and main_linux.c
references. The file format concept changes from 'Ventoy Link' to
'Hiperiso Link' throughout. hisolnk tool builds successfully (19K).
2026-06-30 19:53:35 +03:00
vasilito 2750e0bf78 fix: restore real decompression impls and add dual boot path
hiperiso_cmd.c: Remove stub implementations of hiperiso_gzip_compress,
lzx_decompress, xca_decompress. Restore real miniz-based gzip compression
and include miniz.h. Add 'Hypervisor (KVM + Boot Logging)' as option 7
in secondary boot menu with hiso_hv_mode env var check.

grub.cfg: Replace stripped 473-line version with full 2806-line config
restoring all OS-type direct boot paths (Linux, Windows, Unix, WIM, VHD,
IMG). Add hiso_hv_mode checks to all 8 menuentry functions and
post-secondary-menu hypervisor dispatch. Set HISO_HYPERVISOR_MENU=1
by default so secondary menu always appears.
2026-06-30 19:53:23 +03:00
vasilito 10fffdaf78 restore: add decompression libraries to vendor tarball
Re-add 9 missing source files (huffman.c/h, lzx.c/h, miniz.c/h, xpress.c/h,
wimboot.h) to grub2-modsrc.tar.xz. Previous dead-code stripping incorrectly
removed these — they provide lzx_decompress, xca_decompress, and gzip
compression needed for WIM boot and initrd modification.
2026-06-30 19:53:11 +03:00
vasilito c559bb1723 fix: rename vtoy/Ventoy filenames to hiso/Hiperiso in web assets
HTML references hiso.css/hiso.js but files were still named vtoy.css/vtoy.js
causing 404s in the plugson and WebUI web interfaces.

Renamed:
- vtoy.css → hiso.css (assets + plugson)
- vtoy.js → hiso.js (assets + plugson)
- jquery.vtoy.alert.js → jquery.hiso.alert.js (assets + plugson)
- jquery.validate.vtoymethods.js → jquery.validate.hisomethods.js (plugson)
- VentoyLogo.png → HiperisoLogo.png (assets)
2026-06-30 16:08:40 +03:00
vasilito 8d9eb9b4e6 chore: remove build artifacts from tracking 2026-06-30 16:00:00 +03:00
vasilito 759ccf30dd fix: GUI build and web asset renaming
Qt5 .pro file:
- Replace hardcoded /home/panda/ paths with $$PWD-relative paths
- All SOURCES/HEADERS/FORMS/INCLUDEPATH use $$PWD for shadow build safety
- Fixes qmake path resolution from any working directory

QT source content:
- Rename Ventoy2DiskWindow → Hiperiso2DiskWindow (class, UI, translation context)
- Rename VTOY_* macros → HISO_* (JSON_FMT, DEVICE_USB, EFI_PART_BYTES)
- Rename vtoydata → hisodata (struct field)
- Zero Ventoy/ventoy/VTOY/vtoy references remain in QT source

Plugson www and assets/webui:
- Rename all ventoy/vtoy → hiperiso/hiso in HTML, JS, CSS
- Fix critical AJAX endpoint mismatch: /vtoy/json → /hiso/json
  (C backend already used /hiso/json, JS was stale)

Build artifacts cleanup:
- Remove stale QT/build/ and .pro.user from git
- Add to .gitignore

Verified: Full build_gui_all.sh succeeds — Qt5 (199K), GTK3 (383K),
WebUI (247K), Plugson (245K), hisocli (52K), hisolnk (18K)
2026-06-30 15:59:38 +03:00
vasilito 025ae2701c refactor: make hiperiso fully standalone — zero Ventoy dependency
Vendor all previously external dependencies into the hiperiso repo:

Vendored:
- vendor/grub2-modsrc.tar.xz (364K) — GRUB2 build overlay, with dead
  compression files (huffman, lzx, xpress, miniz) removed from both
  the tarball and Makefile.core.def
- vendor/grub-i386-pc/ — BIOS boot images (boot.img, core.img, .lst)
- vendor/tool-x86_64/ — pre-built utility binaries (ash, hexdump,
  mkexfatfs, mount.exfat-fuse, xzcat)
- assets/ — languages.json, HiperisoGTK.glade, WebUI (renamed)
- src/gui/ — full GUI source tree (Qt5, GTK3, Web, Core, Libs)
- src/plugson/ — full Plugson web config tool source
- src/hisolnk/ — Vlnk tool source (renamed)

Dead code removed:
- src/grub2/huffman.c, huffman.h, lzx.c, lzx.h, xpress.c, xpress.h,
  miniz.c, miniz.h, wimboot.h — WIM/injection compression (~3700 lines)
- hiperiso_gzip_compress() stubbed (never called in hypervisor path)
- lzx_decompress(), xca_decompress() stubbed (WIM decompression)

Build scripts updated:
- build_grub2_204.sh: uses vendor/grub2-modsrc.tar.xz
- package_release.sh: uses vendor/ and assets/ paths
- build_gui_all.sh: uses src/gui/, src/plugson/, src/hisolnk/
- fork_ventoy.sh: removed (one-time fork complete)

Verified: GRUB2 BOOTX64.EFI builds clean (1.8M, 275 hiperiso symbols)
Zero reference/Ventoy/ references remain in any build script.
2026-06-30 15:40:05 +03:00
vasilito acc2d93307 fix: PCI summary JSON parser to match real QEMU info pci output
The awk patterns in hw_gen_pci_json() targeted a hypothetical output format
that never matched QEMU's actual HMP 'info pci' response:

- /^Bus / anchored to line start, but QEMU outputs '  Bus  ' (2 leading spaces)
- /vendor_id = / expected 'vendor_id = 0x8086', but QEMU prints 'PCI device 8086:2922'
- /device_id = / expected separate line, but vendor:device are on the same line
- /class = / expected 'class = 0x010601', but QEMU prints 'SATA controller:' or 'Class 0106:'
- IRQ field expected 'IRQ 0.' but QEMU prints 'IRQ 5, pin A'

Result: pci_summary.json was always invalid JSON with orphaned key-value pairs.

Fix verified against QEMU source (pci-hmp-cmds.c:31-51) and tested with
realistic 4-device output: all devices correctly parsed with bus/dev/fn,
vendor_id, device_id, and IRQ fields.

Found by: 5-agent parallel review (QA execution agent)
2026-06-30 14:51:06 +03:00
vasilito 522bba45c7 Add root-level wrapper scripts for user-facing CLI/GUI launchers 2026-06-30 14:31:16 +03:00
vasilito 27401b2cd2 Add Plugson web-based plugin configuration tool 2026-06-30 14:31:05 +03:00
vasilito 776a5adc2c Add installer source: Hiperiso2Disk, WebUI, Plugson launchers 2026-06-30 14:31:04 +03:00
vasilito a4361c5733 Add GUI source: Qt5, GTK3 with premium branding (#2d8e57) 2026-06-30 14:31:04 +03:00
vasilito fd566980a2 Add CLI tools: hisocli, hisofat, hisogpt with HisoCrc32 2026-06-30 14:31:04 +03:00
vasilito 61a68c6bf4 Add firmware build script for OVMF UEFI 2026-06-30 14:30:52 +03:00
vasilito f0bdf66be8 Add logging tools: hiperiso-log analyzer and trace event definitions
Three trace tiers: standard, detailed, full.
2026-06-30 14:30:52 +03:00
vasilito b6d8a6649b Add config examples: hiperiso.json.example with all 16 plugin sections 2026-06-30 14:30:52 +03:00
vasilito fb121de75d Add build scripts: build_all, build_grub2, build_gui, build_initramfs, etc. 2026-06-30 14:30:39 +03:00
vasilito 8b473c6470 Add GRUB2 hiperiso module source (hiperiso_cmd.c, 7335 lines)
Forked from Ventoy ventoy_cmd.c with full rename and net_dump support.
2026-06-30 14:30:39 +03:00
vasilito 4325590686 Add host kernel config and initramfs scripts with P0-P3 hardware inventory
Includes: init (PID 1), hiperiso-lib.sh, qemu_launch.sh, hw_collect.sh,

kvm_check.sh, fallback_boot.sh, log_flush.sh, conf_replace.sh, make_floppy.sh.

13-phase boot timing, 18 QEMU HMP commands, network pcap capture.
2026-06-30 14:30:39 +03:00
vasilito 9aac84e699 Add INTERFACES.sh: single source of truth for all interface contracts 2026-06-30 14:28:44 +03:00
vasilito 1c469ac1ed Add documentation: README, architecture plan, config reference 2026-06-30 14:28:44 +03:00
vasilito cb10aed0f9 Add project infrastructure: .gitignore and Makefile 2026-06-30 14:28:44 +03:00