Commit Graph

2295 Commits

Author SHA1 Message Date
Alex Haydock 2ddbe4cd4d fix: Use correct paths for Secure Boot OVMF_VARS on NixOS hosts 2026-02-27 14:35:27 +00:00
Ricardo N Feliciano 67a6d0dc6c fix(quickget): arm64 support for Fedora editions
Maybe it was accurate in this past but the current Quickget release
suggest that only Fedora Server has arm64 support. That's not the case.
In fact checking the `releases.json` file that `quickget` already uses
shows us that every edition other than Onyx supports arm64.

This PR makes that change.

The command ran to check this info was:

```bash
curl -sL https://getfedora.org/releases.json | jq -r
'group_by(.variant)[] | "\(.[0].variant): \(map(.arch) | unique |
join(", "))"'

COSMIC-Atomic: aarch64, x86_64
Cloud: aarch64, ppc64le, s390x, x86_64
Container: aarch64, ppc64le, s390x, x86_64
Everything: aarch64, ppc64le, s390x, x86_64
IoT: aarch64, ppc64le, s390x, x86_64
KDE: aarch64, ppc64le, x86_64
Kinoite: aarch64, ppc64le, x86_64
Labs: aarch64, x86_64
Onyx: x86_64
Sericea: aarch64, x86_64
Server: aarch64, ppc64le, s390x, x86_64
Silverblue: aarch64, ppc64le, x86_64
Spins: aarch64, x86_64
Workstation: aarch64, ppc64le, x86_64
2026-02-20 18:22:19 +00:00
github-actions[bot] b986819fe2 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/bfc1b8a' (2026-01-26)
  → 'github:nixos/nixpkgs/a82ccc3' (2026-02-13)
2026-02-17 02:54:47 -06:00
Phil Clifford 81d038cbae docs: align manual pages with release 4.9.8
chore: align doc submodule commit

docs(quickget): adapt whitespace in help_message()

needed in manual page regeneration to retain filtering of needed lines
currently omits the new flag for --disable-unattended

Signed-off-by: Phil Clifford <philip.clifford@gmail.com>
2026-02-10 12:41:59 +00:00
github-actions[bot] 879d0ba885 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/c5296fd' (2026-01-23)
  → 'github:nixos/nixpkgs/bfc1b8a' (2026-01-26)
2026-01-29 08:48:12 +00:00
Martin Wimpress c2d8c96074 feat(quickemu): prefer GTK display backend and add GTK->SDL fallback
- Set default --display to 'gtk' instead of 'sdl'
- Add runtime check to fall back to 'sdl' when QEMU lacks GTK support
  and print a note to the user
- Update usage text to show 'gtk' as the default display option

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 19:43:51 +00:00
Martin Wimpress 7cbc062a57 fix(quickemu): disable serial by default for macOS and Windows
- Remove noisy "Serial: (off)" echo and add explanatory comment
- Stop forcing serial="${serial:-socket}" early; leave unset and set
per-guest after config
- Set serial="none" for macOS and Windows guests, otherwise default to
"socket"
- Reduce terminal clutter for guests that do not emit useful serial
output
- Document how to override: use --serial or set serial=socket in the VM
.conf

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 18:23:58 +00:00
Martin Wimpress eb98ce1160 fix(quickemu): use vmware-svga display for macOS guests
- Replace previous VGA default with vmware-svga to align with macOS
  native VMware display driver and OSX-KVM expectations
- Improve resolution handling and mouse integration for macOS VMs

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 17:47:36 +00:00
Martin Wimpress 25d1f09452 fix(quickget): pin macOS OpenCore and OVMF downloads to last-good commit
- Pin OSX-KVM URLs to commit da4b23b5e92c5b939568700034367e8b7649fe90
- Use pinned URLs for OpenCore.qcow2, OVMF_CODE.fd and
OVMF_VARS-1920x1080.fd
- Prevent breakage after upstream removed OVMF_CODE.fd from master (26
Jan 2026)

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 16:42:49 +00:00
Martin Wimpress ac4b75f46d feat(quickemu): enable local SPICE over Unix sockets with VirGL
- Use Unix sockets for local --display spice to allow GL/VirGL
acceleration
- Use egl-headless backend to provide GL context for virtio-gpu-gl; do
not
  enable SPICE gl=on (avoids blocking QEMU main loop)
- Add -vga none for SPICE modes to prevent duplicate scanouts
- Update start_viewer() to support spice+unix:// and
spice://localhost:port
  connection modes for spicy and remote-viewer clients
- Clean up Unix socket (.sock) files alongside existing .spice file
cleanup

Provides local GL-accelerated guest 3D via VirGL while keeping remote
access
over TCP unchanged.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 15:20:36 +00:00
Martin Wimpress a89b6588ff fix(quickemu): simplify display device selection and remove -vga none
- Reorder and refine Windows mapping: map none|spice -> qxl-vga;
cocoa|gtk|sdl|spice-app -> virtio-vga
- Remove the VGA variable and the forced '-vga none' from VIDEO
composition
- Remove unused VGA initialization in vm_boot

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-27 08:16:31 +00:00
dependabot[bot] 23a4fb2609 build(deps): bump actions/upload-artifact from 4 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-27 08:16:17 +00:00
dependabot[bot] 63c9d44332 build(deps): bump actions/download-artifact from 4 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-27 08:16:02 +00:00
Martin Wimpress fbb2960ce5 feat(quickemu): enable SPICE display reconnection for running VMs
Fixes #1370

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-26 12:31:33 +00:00
Martin Wimpress 3c16de4de3 fix: update vendor lookup on darwin
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-26 11:21:57 +00:00
Martin Wimpress 4805fbd6f4 fix(quickemu): read "Vendor ID" for CPU vendor detection
- Change HOST_CPU_VENDOR lookup to use '^Vendor ID' when parsing
/proc/cpuinfo
- Ensures correct CPU vendor detection on systems that label the field
as 'Vendor ID' instead of 'Vendor'

Fixes #1845

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-26 11:21:57 +00:00
Martin Wimpress 7825f33527 fix(quickemu): remove integrated OpenCore support, require OpenCore.qcow2
- Remove integrated OpenCore creation/extraction code from quickget:
  require_mtools/sgdisk helpers, create_macos_disk_with_opencore,
  download_opencore and related logic
- Simplify quickemu macOS boot flow to expect a separate OpenCore.qcow2
  or ESP.qcow2; streamline device/drive argument construction
- Remove mtools and gptfdisk from devshell.nix and package.nix
- Always download OpenCore.qcow2 via legacy method and update status
  messages

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-26 02:31:33 +00:00
Martin Wimpress 36d1c7f3de fix(macos): prevent default sound card overriding the compatible selection
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-26 01:40:55 +00:00
Martin Wimpress a98a416133
Revert "fix(quickemu): enable pflash secure property only when secureboot on"
This reverts commit 5dfe6c9cf7.
2026-01-26 01:13:18 +00:00
Martin Wimpress 38817e1e6b
fix(quickget): resolve shellcheck warnings in azurelinux and rockylinux 2026-01-25 23:18:33 +00:00
Martin Wimpress 1840c7b7c1 fix(quickemu): only add 'topoext' cpu flag for x86_64 AMD guests
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 23:13:23 +00:00
Martin Wimpress 0a16748db6 feat(quickget): add architecture-aware output and filenames
- Display supported architectures when running ./quickget <os> (shows
"Archs: amd64 arm64")
- Add get_supported_archs() helper to enumerate available architectures
- Add arch_suffix() helper and append architecture suffix to VM
dir/config names
  for foreign architectures (e.g., alpine-v3.23-arm64/)
- Add NORMALISED_HOST_ARCH variable to detect foreign vs native
architecture
- Include arch="x86_64" or arch="aarch64" in config files for foreign
downloads
2026-01-25 18:36:03 +00:00
Martin Wimpress 3c785eb50c fix(quickemu): detect audio backends via sockets, not pidof
- Replace process checks (pidof pipewire / pidof pulseaudio) with socket
  existence checks to determine functional audio services.
- PipeWire detection checks $PIPEWIRE_REMOTE or
  $XDG_RUNTIME_DIR/pipewire-0.
- PulseAudio detection checks $PULSE_SERVER or
  $XDG_RUNTIME_DIR/pulse/native.
- Change default audio driver from pa to alsa as a safer fallback on
  headless hosts.
- Set detection priority: PipeWire (if QEMU >= 8.1) → PulseAudio → ALSA.
- Reason: a listening socket indicates a working service; pidof can be
  misleading on headless servers and caused QEMU "Failed to initialize
PW context" errors.

Fixes #1838

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 18:27:25 +00:00
Martin Wimpress e777817ca9 perf(quickemu): improve disk I/O defaults (cache,aio)
- add cache=writeback and aio=threads to DRIVE_OPTIMISATIONS
- retain existing optimisations: discard=unmap,detect-zeroes=unmap
- improve write performance (host writeback caching) and async I/O
  parallelism via thread-based AIO
- follows Proxmox/libvirt QEMU disk best practices; researched for macOS
  but applies to all guests

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 16:11:06 +00:00
Martin Wimpress 9b54b36492 fix: use local ISO variable for azurelinux
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-25 15:45:26 +00:00
Martin Wimpress 5504fdf4cc feat(quickget): add Azure Linux (3.0) support
- Add os_info() case entry with a description for Azure Linux
- Add Azure Linux to os_support() list
- Implement releases_azurelinux() returning "3.0"
- Implement arch_azurelinux() returning "amd64 arm64"
- Implement get_azurelinux() using stable aka.ms download URLs:
  - https://aka.ms/azurelinux-3.0-x86_64.iso
  - https://aka.ms/azurelinux-3.0-aarch64.iso
Fixes #1459

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 15:45:26 +00:00
Martin Wimpress e600d742ba fix(quickemu): disable GL when display backend is none
- Disable GL context creation when no display backend is selected by
setting gl="off"
- Keep spice behaviour unchanged (DISPLAY_RENDER remains "none")
- Prevent GL-related errors and unnecessary GPU initialisation for
headless VMs

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 15:20:05 +00:00
Martin Wimpress dead42dc25 fix(nix): avoid CI stack overflow by using builtins.split
- Replace builtins.match with builtins.split for version extraction
- Previous regex with .* patterns caused catastrophic backtracking on large files (~2800 lines)
- builtins.split avoids full-string regex matching and is more efficient

Fixes: Nix build CI failure
2026-01-25 14:52:52 +00:00
Martin Wimpress dd39102ef9 build(flake): update nixpkgs to nixos-unstable
- Replace flake.nix nixpkgs URL with github:nixos/nixpkgs/nixos-unstable
- Update flake.lock to new locked rev, narHash and github type

No functional changes to scripts; resolves dependency refresh for Nix flakes.,
2026-01-25 14:52:52 +00:00
Phil Clifford 727c853461 fix: adjust rockylinux 10.0 dvd
Fix rockylinux 10.0 dvd iso naming

Signed-off-by: Phil Clifford <philip.clifford@gmail.com>
2026-01-25 14:52:12 +00:00
Phil Clifford 8a9cb55934 fix: restore rockylinux dynamic releases
The website was changed and the old parse was not cutting it
2026-01-25 13:43:47 +00:00
Martin Wimpress a56a43342d fix(quickget): exit on curl failure in web_get
Add exit 1 after curl failure handling in web_get

- Exit immediately when a download via curl fails
- Prevent continuing to build invalid VM configs after failed download

Fixes #1625
2026-01-25 13:41:46 +00:00
Martin Wimpress 57cd52b1dc fix(quickemu): enable xhci when braille devices used
- Set usb_controller="xhci" in display_param_check() when BRAILLE is enabled.
- Braille devices are USB 1.1 (full-speed); EHCI only handles USB 2.0/3.0,
  which causes speed mismatch warnings and prevents braille devices from working.

Fixes #730
2026-01-25 13:26:02 +00:00
Martin Wimpress 64eedfe7c5 build(quickemu): require QEMU 6.1.0 minimum
- Raise global minimum QEMU version from 6.0.0 to 6.1.0.
- The option -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off used for macOS guests
  is only available in QEMU 6.1.0 and later; prefer raising the global requirement rather
  than adding per-flag conditionals.
- Update version check and error message in quickemu.

BREAKING CHANGE: Require QEMU 6.1.0; older QEMU will fail the version check.
2026-01-25 12:43:43 +00:00
Martin Wimpress 2384b0d263 fix(quickemu): enable vmware TSC and disable ACPI PCI hotplug for macOS
- Pass vmware-cpuid-freq=on to -cpu on Intel hosts to enable VMware TSC
  frequency reporting and improve macOS timing
- Add ICH9-LPC flag to disable ACPI PCI hotplug bridge support to avoid
  macOS PCI hotplug issues (required for QEMU 6.1+)

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 12:43:43 +00:00
Martin Wimpress eb54549353 fix(quickemu): select correct sound card for macOS guests
- Split macOS sound card logic by OS version:
  - Use virtio-sound-pci for macOS 12+ (Monterey and newer)
  - Use ich9-intel-hda for Big Sur
  - Keep intel-hda for earlier macOS releases
- Add virtio-sound-pci case to configure_audio() to pair the device with
  existing audiodev backends (PulseAudio, PipeWire, ALSA, CoreAudio)
- Update help text to include virtio-sound-pci as an allowed sound card
option
- Add virtio-sound-pci to allowed sound cards in
sound_card_param_check()

VoodooHDA injected via OpenCore stopped working from macOS 11.3+
onwards and usb-audio proved unreliable for Big Sur+. virtio-sound-pci
works natively on macOS 12+ without kexts and fixes guest audio for
affected versions.

Fixes #1642

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 11:55:51 +00:00
Martin Wimpress 76b29c659c perf(quickemu): enable TRIM/discard and detect-zeroes for qcow2 drives
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 10:43:01 +00:00
Martin Wimpress 81b99feccd perf(quickemu): tune TCG translation cache and enable multithreaded TCG
- Add TCG-specific runtime optimisations in vm_boot for
cross-architecture VMs
- Detect host RAM and set tb-size to 512 for hosts with >=16GB,
otherwise 256
- Append -accel tcg,tb-size=${TCG_TB_SIZE},thread=multi to QEMU args
- Improve TCG translation cache behaviour and SMP performance for TCG
guests

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 03:15:46 +00:00
Martin Wimpress d8b27e8480
docs: update documentation
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 02:22:38 +00:00
Martin Wimpress 0742312aa5 build(packaging): sync Nix flakes, devshell and Debian packaging
- Update flake.nix and package.nix to refresh package definitions and
pins
- Refresh devshell.nix to include updated development dependencies
- Adjust debian/control metadata to match packaging and dependency
changes
- Align packaging metadata between Nix and Debian to improve
reproducibility

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 01:51:53 +00:00
Martin Wimpress e7b49430cf docs(quickemu): clarify CPU, display and VM comments
- Clarify highmem behaviour for aarch64 virt machine and why it is
needed for >3GB RAM
- Add detailed explanation of TCG (software emulation), how to force it,
and common use cases
- Replace TODOs about VM detection with manufacturer-based detection
guidance
- Improve ARM detection rationale (no standard vendor strings)
- Explain that TCG enables running x86_64 macOS on ARM via software
emulation
- Prefer OpenGL ES via ANGLE on macOS for stability/performance on
Metal-backed systems
- Document virtio-gpu naming and regex rationale for matching device
names
- Note virtio devices manage VRAM dynamically via QEMU default
max_hostmem
- Add SMM/vmport note clarifying x86-specific semantics and Secure Boot
differences

No functional changes; comments only.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 01:31:11 +00:00
Martin Wimpress 2324d96303 refactor: quote expansions and add ShellCheck directive
- Quote URL argument passed to web_pipe in quickget to prevent
word-splitting
- Quote echoed variables in quickget (echo "${...}") for safe output
when values contain whitespace
- Add shellcheck disable=SC2054 in quickemu vm_boot to silence a
spurious ShellCheck warning

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 01:11:25 +00:00
Martin Wimpress 1991306df3 fix(quickget): prefer macOS-friendly hash commands in check_hash
- Prefer GNU coreutils g* hash commands on macOS when available; fall
back to native shasum/md5 otherwise
- Handle MD5 on macOS using 'md5 -r' and parse its output for comparison
- Warn and skip b2sum verification when GNU b2sum is not installed on
macOS
- Use a selected hash command variable when printing status and
performing checks

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 6c957f6529 feat(quickget): support Ubuntu desktop ARM64 from 25.10
- Add arch_ubuntu() to enumerate supported architectures and gate ARM64
by release
- Validate architecture once RELEASE is known and exit/skip if
unsupported
- Use UBUNTU_ARCH when selecting ISO lines and hashes instead of
hardcoded amd64
- Use cdimage.ubuntu.com releases path for Ubuntu ARM64 desktop ISOs
- Default non-numeric releases (daily, dvd, etc.) to amd64 only

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress f1c66b45b9 fix(quickget): skip unsupported architectures for test/show operations
- If architecture is unsupported and OPERATION is "test" or "show",
  call test_result with SKIP and exit 0
- Keep existing error and exit 1 for non-test/show operations

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 61d0bec3ba fix(quickget): validate architecture support after edition selection
- Skip early architecture check for OSes with editions_<os> to avoid
  rejecting valid edition-specific combinations
- Perform architecture validation after EDITION is known and show a
  descriptive error when the chosen edition isn't available on ARCH
- Preserve test/show behaviour (report SKIP) and keep previous flow for
  OSes without editions_<os>

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 78fc1c93e6 fix(quickget): skip unsupported architectures for all operations
- Remove the OPERATION == "test" guard so is_arch_supported() is
evaluated
  unconditionally
- Apply the unconditional arch check in test_all() for editions loop,
  ubuntu-server, ubuntu desktop (ubuntu*), and the default case
- Skip generating URLs / running further logic when an OS is not
available
  for the requested ARCH
IMPACT: quickget will no longer attempt to generate or test downloads
for
architectures that the distro does not support, preventing incorrect URL
generation and false-positive test attempts.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 5bbfdd1b54 fix(quickget): validate architecture before attempting download
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 1f7ec7e52c feat(quickget): add --check-all-arch to test amd64 and arm64
- Add CLI flag --check-all-arch with help text and CHECK_ALL_ARCH var
- Implement loop to run checks for both amd64 and arm64, setting ARCH
per run
- Validate architecture and release/edition before generating URLs; skip
Windows
- Generate and check URLs per-arch, reporting PASS / FAIL / SKIP per
entry
- Update CI workflow to call ./quickget --check-all-arch for distro
matrix tests

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00
Martin Wimpress 1e194c6941 feat(quickget): add per-distro architecture support and validation
- Add arch_*() functions declaring supported architectures for several
distros
- Add is_arch_supported() helper; default to amd64 when no arch_* exists
- Validate architecture before generating URLs or running tests
(web_get, zsync_get, test_all)
- Update test_result() to accept and display an optional reason when
skipping
- Prevent false failures by skipping tests for unsupported architectures
IMPACT: quickget now respects requested architectures and reports clear
SKIP reasons for distros that do not support the selected arch.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-25 00:54:57 +00:00