Security & Hash Validation Improvements (quickget):
- Fix command injection: replace echo with printf for ISO filename handling
- Add hash length validation (MD5=32, SHA1=40, SHA256=64, SHA512/BLAKE2b=64-128)
- Fix Bash 3.2 compatibility: replace ${var,,} with tr command for macOS
- Add internal whitespace validation in hash algorithm prefix
- Support BLAKE2b variable output lengths (256-512 bits)
- Validate archboot editions: only allow 'default' and 'latest'
CPU Flag Management Improvements (quickemu):
- Auto-correct invalid flag format by prepending comma
- Add conflict detection for unprefixed vs +/- prefixed flag variants
- Strip =value suffix to detect value-assigned flag conflicts
- Add validation for malformed flags (++flag, --flag, +, -)
- Add defensive check that CPU is initialized before appending
All changes improve security, robustness, and portability.
This commit adds full support for running ARM64 Linux guests on Apple Silicon
Macs with proper graphics acceleration, automatic OS downloads, and reliable
boot configuration.
quickget changes - Automatic Architecture Detection:
- Add HOST_ARCH detection using uname -m (arm64/aarch64 or amd64/x86_64)
- Ubuntu/Ubuntu Server: Download arm64/amd64 based on host architecture
- Fedora editions: Filter available editions by host architecture
- Alpine Linux: Use host architecture for ISO selection
- Debian: Support both arm64 and amd64 (netinst only, live is amd64-only)
- Archboot: New distribution with native aarch64/x86_64/riscv64 support
* Three editions: default, latest, local
* Actual bootable ARM64 ISOs (unlike standard Arch Linux)
* Downloads from release.archboot.com mirror
quickemu changes - ARM64 Guest Support:
1. CPU & Machine Configuration:
- Changed ARM64 CPU model: 'max' → 'cortex-a72' (better compatibility)
- Enabled highmem support: highmem=off → highmem=on
2. QEMU Installation Detection:
- Dynamic path detection using actual binary location
- Works with custom builds, not just Homebrew defaults
- Extracts Cellar path from qemu binary for share directory
3. ARM64 UEFI Firmware (AAVMF):
- Architecture-aware firmware selection (AAVMF for aarch64, OVMF for x86_64)
- Searches multiple AAVMF paths based on ARCH_VM
- Supports both secure boot and non-secure boot firmware variants
4. OpenGL ES (ANGLE) Graphics Acceleration:
- New check_display_gl_support() function for ANGLE detection
- Two-step verification: library files + dbus parameter test
- Searches: QEMU prefix, /opt/homebrew, Cellar, libangle
- Automatic gl=es selection for cocoa when ANGLE detected
- Updated VirGL: gl != 'off' (supports both gl=on and gl=es)
5. Secure Boot Flag Fix:
- Changed from unconditional to conditional (checks secureboot config)
- Only adds cfi.pflash01 secure flag when secureboot="on"
- Fixes boot hang with ARM64 guests using bootindex
6. ARM64 ISO Boot with bootindex:
- Special handling for ARM64 Linux ISO boot
- Uses virtio-scsi-pci + scsi-cd with bootindex=1 (CD-ROM first)
- Sets bootindex=2 for disk (boots second)
- Fixes unreliable -cdrom with -boot d on ARM64 UEFI
Design Principles - All Changes are Check-Based:
✓ Checks for ANGLE library files on filesystem
✓ Validates gl=es parameter with dbus display test
✓ Checks ARCH_VM for architecture-specific paths
✓ Checks secureboot configuration option
✓ Checks guest_os and iso presence for bootindex logic
✓ Detects HOST_ARCH for appropriate OS downloads
✗ No assumptions or hardcoded behavior
Tested on: Apple M4 Pro (ARM64), macOS 15.6 Darwin 24.6.0
QEMU: v10.1.2 (startergo/homebrew-qemu-virgl with ANGLE + libepoxy-angle)
Result: Archboot ARM64 ISO boots successfully with full acceleration
Display: COCOA, virtio-gpu-gl-pci, GL (es), VirGL (on) @ 1280x800
Automatically detect the host architecture (ARM64 or x86_64) and download
the appropriate guest OS images when available.
Changes:
- Add HOST_ARCH detection using uname -m
- Normalize arm64 to aarch64, amd64 to x86_64
- Update Ubuntu/Ubuntu Server to use HOST_ARCH (converted to arm64/amd64)
- Update Fedora editions to filter by HOST_ARCH
- Update Alpine Linux to use HOST_ARCH
This allows ARM Macs to automatically download ARM64 Linux distributions
(Fedora, Alpine, Ubuntu daily builds) while still supporting x86_64 TCG
emulation for distributions that only provide x86_64 images.
Tested on: Apple M4 Pro (ARM) - successfully detects aarch64
The E:\amd64\w10 directory contains vioscsi and viostor drivers, but
these are already included via E:\vioscsi\w10\amd64 and
E:\viostor\w10\amd64. This duplication causes issues with Windows 11
24H2 and later.
Previously, edition fallback logic allowed downloading the correct
"graphical" ISO for 25.05 even when specifying "plasma6" or "gnome".
However, the VM_PATH and directory name still used the original edition
(e.g., nixos-25.05-plasma6). Fixing this would require more complicated
changes to the code.
NixOS 24.11 will reach EOL on 2025-06-30, about two weeks from now.
- Drop legacy 23.11 support; now only 24.11 or later is allowed
- Fallback to "graphical" edition except 24.11
- Do not display "graphical" edition to users;
it is not supported in 24.11
* fix: handle inconsistent filenaming
They name releases with a dash for mate and a dot for the others. No bets on when they notice this and make it consistent. In case they somehow get a dashed name first swap the dotty ones too.
The latest Solus release has changed the naming of ISOs:
- Update all related functions to support the ISO name
format used in the latest release.
- Use the directory listings in order to support more releases in the future.
The static list included a release that has been removed
and also hard coded mappings for 2023 and 2024. This dynamically determines the latest two years
and finds available releases in those years, so will still provide reasonable service next year.
* fix(fedora): Check whether the link value contains an actual .iso file
Also remove the SHA256 requirement. Fedora provides these for all links
now.
Fixes#1502
* refactor(fedora): Use more concise function to filter out non-ISO files
---------
Co-authored-by: Liam <33645555+lj3954@users.noreply.github.com>
* fix(fedora): handle the space in the beta release
fixes#1462
adjust the RELEASE to remove and replace the space
* fix(fedora): only list available editions where a release is selected
fixes#1493