Commit Graph

2311 Commits

Author SHA1 Message Date
Matej Cotman 7a477bc91a feat(nix-flake): add virtiofsd for linux 2026-06-01 17:20:44 +01:00
Dino Korah ccac3a3267 fix: escape socket path regex metacharacters in pgrep fallback 2026-03-22 21:47:08 +00:00
Dino Korah 53bf54cdb3 fix: address remaining cubic review issues — pgrep scope, /proc portability, QEMU device check
- Scope pgrep fallback to the VM socket path to avoid matching unrelated virtiofsd instances
- Replace /proc/<pid>/comm checks with portable `ps -p ... -o comm=` in both start and stop
- Fix QEMU virtiofs capability check: use `-device help` and match quoted device name to avoid false-positives on error output
2026-03-22 21:38:32 +00:00
Dino Korah a9a6871b9f fix: address code review issues from cubic-dev-ai
- README: clarify virtiofs requires a public directory to be configured
- stop_virtiofsd: guard against PID reuse by verifying /proc/<pid>/comm
  before signalling
- start_virtiofsd: replace fixed sleep with poll loop for socket
  readiness; use fuser (or comm-verified pgrep fallback) for safe PID
  resolution
- vm_boot: check QEMU supports vhost-user-fs-pci before committing to
  virtiofs; stop virtiofsd and fall back to 9p if unsupported
2026-03-22 21:25:59 +00:00
Dino Korah 4544d1ff96 fix: correct virtiofsd lifecycle — forking, iso check ordering, and fallback
virtiofsd forks after startup; check socket existence rather than parent
PID to detect success, and use pgrep to track the daemon child for cleanup.

Move start_virtiofsd() call to after configure_storage() so $iso is
correctly cleared before the installer check runs.

Clear VIRTIOFSD on early return so configure_file_sharing() falls back
to 9p instructions when virtiofsd is not started.
2026-03-22 21:11:17 +00:00
Dino Korah 058e229d53 fix: skip virtiofs during OS installation to prevent installer hangs
The shared-memory NUMA backend required for virtiofs can confuse
installers. Fall back to 9p when an ISO is present (install mode).
2026-03-22 18:47:18 +00:00
Dino Korah d66d9c3c1b feat: stop virtiofsd gracefully when VM is killed or fails to start
Write virtiofsd PID to a file alongside other VM runtime files. Add
stop_virtiofsd() which sends SIGTERM and waits up to 1s for a clean
exit before falling back to SIGKILL. Call it from kill_vm() and on
QEMU startup failure.
2026-03-22 17:50:14 +00:00
Dino Korah 26e4dcf8ee fix: remove stale virtiofsd socket before starting daemon 2026-03-22 17:39:39 +00:00
Dino Korah f695b046d6 fix: use standalone virtiofsd only; improve failure diagnostics
Drop the fallback to the QEMU-bundled C virtiofsd (/usr/lib/qemu/virtiofsd)
as it uses incompatible CLI syntax and requires root privileges. Only the
standalone Rust virtiofsd in PATH is supported.

Capture virtiofsd stderr to a temp file rather than the shared VM log to
avoid false-positive permission-error matches from stale log entries.

Move start_virtiofsd() call inside vm_boot() so the Quickemu banner is
printed before any virtiofsd warnings.
2026-03-22 17:19:37 +00:00
Dino Korah ff9f386399 feat: add virtiofs support for Linux guests
Automatically use virtiofsd (vhost-user-fs-pci) instead of 9p when
virtiofsd is present on the host and the guest OS is Linux. Falls back
silently to 9p when virtiofsd is unavailable. Updates README to document
the new capability.
2026-03-22 16:42:08 +00:00
Arusekk b541fe1c58 docs(quickemu): update ArchWiki link
No functional changes; comments only.

Signed-off-by: Arusekk <floss@arusekk.pl>
2026-03-04 09:55:39 +00:00
dependabot[bot] 30509e17b6 build(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 09:54:55 +00:00
dependabot[bot] 5344b2edfb build(deps): bump crazy-max/ghaction-import-gpg from 6 to 7
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 6 to 7.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v6...v7)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 09:54:39 +00:00
github-actions[bot] ab73f043d5 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-schemas':
    'https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz' (2025-10-27)
  → 'https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.3.0/019c9f61-e746-760e-a1fe-53f05b10d026/source.tar.gz' (2026-02-27)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/a82ccc3' (2026-02-13)
  → 'github:nixos/nixpkgs/2fc6539' (2026-02-23)
2026-03-04 09:53:49 +00:00
Alex Haydock 4d07beaf15 chore: Remove Tails from legacy boot list 2026-03-04 09:53:09 +00:00
dependabot[bot] a6771fb636 build(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 09:52:02 +00:00
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