Create macOS VMs with OpenCore embedded in the EFI partition of disk.qcow2
instead of using a separate OpenCore.qcow2 file. This simplifies VM management
by reducing from two disk images to one.
Implementation:
- Add create_macos_disk_with_opencore() using mtools/sgdisk for cross-platform
EFI partition creation without mounting or root privileges
- Add download_opencore() to extract OpenCore files from OSX-KVM image
- Use LC_ALL='' with mcopy to prevent FAT directory name mangling
- Adjust disk size threshold for macOS integrated mode (1GB vs 1.5MB)
Backwards compatibility:
- If OpenCore.qcow2 exists, use legacy two-disk boot method
- If mtools/sgdisk unavailable, fall back to legacy method automatically
New dependencies: mtools, gptfdisk (added to devshell.nix and package.nix)
Closes#1720
When using TCG emulation for cross-architecture VMs (e.g., x86_64 guest
on arm64 host), skip the SSE/AVX CPU feature detection since QEMU
emulates these features in software. This fixes macOS guest startup on
Apple Silicon Macs.
Fixes#1457
Nix's qemu_full bundles EDK2 firmware with different filenames than
quickemu expects. Add darwin-specific sed patterns to:
- Set SHARE_PATH to qemu_full's share directory
- Prepend correct firmware paths (edk2-x86_64-code.fd, edk2-i386-vars.fd)
to the ovmfs search array
The invtsc flag is already added by the configure_cpu_flag loop when
check_cpu_flag recognises constant_tsc as equivalent to invtsc on AMD.
Adding it again in the AMD-specific TSC block caused duplication.
Only +tsc and +tsc-deadline are needed as additional flags.
The hash URL was incorrectly using 'v${RELEASE}' (e.g., 'vlatest')
instead of extracting the actual version folder from the redirect URL.
Since releases_archcraft returns 'latest', the download redirect goes
to a versioned folder like 'v25.10', but the hash file lookup used
'vlatest' which doesn't exist.
Extract the version folder from the redirect URL to construct the
correct hash file path.
- Use direct mirror URL instead of unreliable shortlink redirects
- Remove lite64 edition from Zorin 18 (now Pro-only)
- Automatically detect latest revision for each version
Fixes:
- slint: Update version from 15.0-5 to 15.0-10
- blendos: Replace dead mirror with official GitLab build server
- void: Filter out directories without standard base ISOs (fixes
20250401)
Removals:
- holoiso: Project archived Feb 2024, download server returns 404
- truenas-core: Discontinued, merged into TrueNAS Community Edition
- truenas-scale: Rebranded to TrueNAS Community Edition
- Replace mirror.bytemark.co.uk with mirrors.kernel.org in get_gentoo,
get_linuxmint and get_lmde
- Prefer kernel.org mirrors for improved availability and fresher
releases
- No change to ISO selection or hash verification logic; behaviour
unchanged
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Remove Devuan 'beowulf' from the release list
- Drop Mageia '8' from the release list
- Filter Fedora releases JSON and exclude Fedora 41 (prevent EOL
entries)
- Restrict GNOME OS parsing to stable numeric versions and keep
"nightly"
- Rationale: avoid presenting EOL or alpha/beta/rc images to users and
reduce failed downloads
Signed-off-by: Martin Wimpress <martin@wimpress.org>
Replace string concatenation with temp file approach to fix issue where
only the first distro appeared in the summary table. Writing rows to a
temp file and sorting it directly is more robust than piping concatenated
strings through sort.
- Set status to ❌ only when failed>0 and passed==0; use ⚠️ when failures
exist but some passed
- Build per-distro rows with printf to preserve newlines and avoid
trailing whitespace
- Replace heredoc cat with explicit echo lines for consistent GitHub
summary formatting
- Append sorted distro rows without extra blank lines
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Remove merge-multiple: true from actions/download-artifact step
- Use results/result-*/result.json and results/result-*/failed.txt globs
- Ensure per-distro result files and failed lists are read consistently
for summary
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add require_qemu_img() to detect qemu-img and print a clear error if
missing
- Call require_qemu_img before any qemu-img operations (RecoveryImage,
.img conversions)
- Remove duplicate global qemu-img existence check to avoid repetition
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Replace single quickget-tests job with detect-distros, test-distro,
and report-results
- detect-distros extracts unique distro list and emits JSON for matrix
strategy
- test-distro runs ./quickget --check per distro, captures
PASS/FAIL/SKIP counts,
archives results, and exposes per-distro outputs
- report-results downloads artifacts, aggregates counts into a GitHub
step summary,
includes failed URLs, and fails the workflow if any distro has
failures
- Use actions/checkout@v6 and upload/download-artifact@v4; allow
per-distro jobs to
continue-on-error so all distros are exercised before reporting
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Read public_dir from the sourced VM config into PUBLIC
- Preserve existing PUBLIC when public_dir is not set
- Prevent PUBLIC being empty when a VM specifies public_dir
Fixes#1634
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Replace head-based check with od -tx1 to read first 4 bytes as hex
- Compare hex string to 514649fb to detect qcow2 reliably
- Avoid null-byte warnings from command substitution; keep same
true/false output
Fixes#1796
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Refresh flake.nix inputs and pins to align with current upstream
- Update devshell.nix to use revised development environment packages
- Adjust package.nix to match dependency and tooling changes from the
flake update
- Keep reproducible builds and developer tooling current
Signed-off-by: Martin Wimpress <martin@wimpress.org>