Files
vasilito 1931a250b3 GRUB 2.12 port — Ventoy compat layer, EFI kernel, install/update targets
Build system:
- Switch from GRUB 2.04 → 2.12 with Ventoy module via build_grub2_212.sh
- New patch_ventoy_212.py: compat typedefs, mem: protocol, VTOY_CMD_CHECK bypass
- Fix EFI libstub compile with GCC 16 (cflags -std=gnu11 on X86_64)
- Disable busybox CONFIG_TC (broken with modern kernel headers)
- New Makefile targets: install, update, rebuild (single-command USB deploy)

GRUB 2.12 compat fixes:
- Add grub_mem_fs with fs_read/fs_close to kern/file.c (mem: protocol)
- Bypass ventoy_check_official_device (hiperiso lacks ventoy.cpio on ESP)
- Disable VTOY_CMD_CHECK anti-tamper (ESP size != 33554432)

Kernel (hiperiso_defconfig):
- Enable CONFIG_EFI, CONFIG_EFI_STUB, CONFIG_FB_EFI (fixes black screen boot)
- Add CONFIG_FONT_SUPPORT, CONFIG_FONT_8x16

grub.cfg:
- Theme path: try themes/hiperiso/ then themes/ventoy/ (path mismatch fix)
- Kernel cmdline: add console=tty0 console=ttyS0 ignore_loglevel earlyprintk=efi
- Restore ventoy_* function names (matching modsrc binary)
2026-07-03 10:42:35 +03:00

140 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
#
# build_all.sh — Master build orchestrator for hiperiso
# ---------------------------------------------------------------------------
# Runs the full pipeline:
# 1. download sources
# 2. build host kernel (KVM built-in) -> staging/vmlinuz
# 3. build stripped QEMU -> staging/qemu-system-x86_64
# 4. build OVMF firmware (SMM + Secure Boot) -> staging/OVMF.fd
# 5. build GRUB2 with hiperiso module -> staging/BOOTX64.EFI
# 6. build busybox (static) -> staging/busybox
# 7. build hiperiso-log tool -> staging/hiperiso-log
# 8. pack initramfs -> staging/initramfs.cpio.gz
# 9. build GUI/tool payload -> build/payload/
# 10. assemble final distributable payload -> build/payload/
#
# Usage: ./build_all.sh [build_dir]
# SKIP_DOWNLOAD=1 ./build_all.sh # skip re-downloading
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
BUILD_DIR="${1:-$REPO_ROOT/build}"
STAGING="$BUILD_DIR/staging"
PAYLOAD="$BUILD_DIR/payload"
JOBS="${JOBS:-$(nproc)}"
mkdir -p "$STAGING/efi" "$STAGING/initramfs"
step() { printf '\n\033[1;34m=== [%d/%d] %s ===\033[0m\n' "$1" "$2" "$3"; }
# ── 1. Download sources ─────────────────────────────────────────────────────
if [ "${SKIP_DOWNLOAD:-0}" != "1" ]; then
step 1 10 "Downloading sources"
"$SCRIPT_DIR/download_sources.sh" "$BUILD_DIR"
else
step 1 10 "Skipping download (SKIP_DOWNLOAD=1)"
fi
# ── 2. Build host kernel ────────────────────────────────────────────────────
step 2 10 "Building host kernel (KVM built-in)"
(
cd "$BUILD_DIR/linux"
cp "$REPO_ROOT/host/kernel/hiperiso_defconfig" .config
make olddefconfig
sed -i 's/^KBUILD_CFLAGS := -m\$(BITS) -O2/KBUILD_CFLAGS := -m$(BITS) -O2 -std=gnu11/' arch/x86/boot/compressed/Makefile
sed -i 's/^cflags-\$(CONFIG_X86_64)[[:space:]]*:= -mcmodel=small/cflags-\$(CONFIG_X86_64) := -mcmodel=small -std=gnu11/' drivers/firmware/efi/libstub/Makefile
make -j"$JOBS" bzImage
cp arch/x86/boot/bzImage "$STAGING/vmlinuz"
)
echo " [ok] $(du -h "$STAGING/vmlinuz" | cut -f1) vmlinuz"
# ── 3. Build QEMU ───────────────────────────────────────────────────────────
step 3 10 "Building stripped QEMU"
(
cd "$BUILD_DIR/qemu"
"$SCRIPT_DIR/configure_qemu.sh"
make -j"$JOBS" qemu-system-x86_64
cp build/qemu-system-x86_64 "$STAGING/qemu-system-x86_64"
strip "$STAGING/qemu-system-x86_64" || true
)
# ── 4. Build OVMF firmware ──────────────────────────────────────────────────
step 4 10 "Acquiring OVMF firmware"
if [ -d "$BUILD_DIR/edk2" ] && command -v nasm >/dev/null 2>&1 && command -v iasl >/dev/null 2>&1; then
(
cd "$BUILD_DIR/edk2"
bash "$REPO_ROOT/firmware/build_ovmf.sh" && \
cp Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd "$STAGING/OVMF.fd"
) || {
echo " [warn] EDK2 build failed, falling back to system OVMF"
cp /usr/share/edk2/x64/OVMF.4m.fd "$STAGING/OVMF.fd" 2>/dev/null || \
cp /usr/share/OVMF/OVMF.fd "$STAGING/OVMF.fd" 2>/dev/null || \
{ echo "ERROR: No OVMF available"; exit 1; }
}
elif [ -f /usr/share/edk2/x64/OVMF.4m.fd ]; then
cp /usr/share/edk2/x64/OVMF.4m.fd "$STAGING/OVMF.fd"
echo " [ok] using system pre-built OVMF"
elif [ -f /usr/share/OVMF/OVMF.fd ]; then
cp /usr/share/OVMF/OVMF.fd "$STAGING/OVMF.fd"
echo " [ok] using system pre-built OVMF"
else
echo "ERROR: No OVMF available (install edk2-ovmf or build from source)"
exit 1
fi
# ── 5. Build GRUB2 (with Ventoy module on GRUB 2.12) ────────────────────────
step 5 10 "Building GRUB2 2.12 with Ventoy module"
if [ -f "$SCRIPT_DIR/build_grub2_212.sh" ]; then
bash "$SCRIPT_DIR/build_grub2_212.sh"
cp "$REPO_ROOT/grub2/bin/BOOTX64.EFI" "$STAGING/efi/BOOTX64.EFI"
[ -f "$REPO_ROOT/grub2/bin/grubx64_real.efi" ] && cp "$REPO_ROOT/grub2/bin/grubx64_real.efi" "$STAGING/efi/grubx64_real.efi"
[ -f "$REPO_ROOT/grub2/bin/grubx64.efi" ] && cp "$REPO_ROOT/grub2/bin/grubx64.efi" "$STAGING/efi/grubx64.efi"
echo " [ok] $(du -h "$STAGING/efi/BOOTX64.EFI" | cut -f1) BOOTX64.EFI"
else
echo "ERROR: GRUB2 build script not found ($SCRIPT_DIR/build_grub2_212.sh)"
exit 1
fi
# ── 6. Build busybox (static binary for initramfs) ──────────────────────────
step 6 10 "Building busybox (static)"
(
cd "$BUILD_DIR/busybox"
yes "" | make defconfig >/dev/null 2>&1 || [ $? -eq 141 ]
sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config
sed -i 's/^CONFIG_TC=y/# CONFIG_TC is not set/' .config
yes "" | make oldconfig >/dev/null 2>&1 || [ $? -eq 141 ]
make -j"$JOBS"
cp busybox "$STAGING/busybox"
)
echo " [ok] $(du -h "$STAGING/busybox" | cut -f1) busybox"
# ── 7. Build hiperiso-log ───────────────────────────────────────────────────
step 7 10 "Building hiperiso-log tool"
if [ -f "$REPO_ROOT/logging/hiperiso-log/Makefile" ]; then
( cd "$REPO_ROOT/logging/hiperiso-log" && make )
cp "$REPO_ROOT/logging/hiperiso-log/hiperiso-log" "$STAGING/hiperiso-log"
else
echo " [warn] hiperiso-log Makefile not present — skipping (log tool task)"
fi
# ── 8. Pack initramfs ───────────────────────────────────────────────────────
step 8 10 "Packing initramfs"
"$SCRIPT_DIR/build_initramfs.sh" "$STAGING"
# ── 9. Build GUI/tool payload ───────────────────────────────────────────────
step 9 10 "Building GUI and installer tools"
sh "$SCRIPT_DIR/build_gui_all.sh"
# ── 10. Assemble final distributable payload ────────────────────────────────
step 10 10 "Assembling final payload"
bash "$SCRIPT_DIR/package_release.sh"
printf '\n\033[1;32m=== hiperiso build complete ===\033[0m\n'
echo "Payload: $PAYLOAD"
echo "Run GUI: $PAYLOAD/Hiperiso.sh"
echo "Install CLI: sudo bash $PAYLOAD/Hiperiso2Disk.sh -I /dev/sdX (GPT default, Secure Boot OFF)"
echo " -I fresh install -u update existing -m use MBR -s enable Secure Boot"