macOS: guest agent, online templates, virtio-fs shares, persistent home volume
Apple's built-in QEMU guest agent (AppleQEMUGuestAgent, launched by launchd when a virtio console port org.qemu.guest_agent.0 appears; guest-exec as root) is attached by vmix run --macos and the NixOS module. AppleVirtIO.kext on x86 Tahoe drives virtio-fs, block, console, input, net — verified in QEMU. - customizeImage: `bootScript` — online step through the guest agent (driver mode qga): boot the image, run the script as root with the VMIX volume, shut down through the agent. `as_user` runs commands in the logged-in session. - templates.software: pkg/app (offline in the PE), script/homebrew (online). - templates.profile.settings: widgets, wallpaper (pinned desktoppr — Apple Events need TCC consent that a headless session cannot give), dock apps, autohide, dark mode, hidden files. - generalize: persistHome (fstab LABEL=vmix-home /Users), hideWidgets offline. - formatVolume: formats a blank disk image as APFS by booting the PE (~35 s); idempotent. - NixOS module: macos.guestAgent (/run/vmix/qga-<name>.sock), shares via virtiofsd + vhost-user-fs (Apple automount tag for the first share, others mounted through the agent), macos.homeDisk (created + formatted on first start, virtio-blk), SPICE keeps -vga vmware for macOS. - CLI: vmix run --macos --share DIR --home FILE --qga PATH. - qemu.nix helpers; README section. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XsESshRCoBoUVWV9qKURUF
This commit is contained in:
parent
50ad8d521c
commit
0f9373263d
13 changed files with 600 additions and 19 deletions
|
|
@ -39,6 +39,27 @@ rec {
|
|||
# XNU logs to COM1 with boot-args serial=3; the build drivers read this file
|
||||
serialArgs = file: "-serial file:${file}";
|
||||
|
||||
# Apple's own QEMU guest agent (/usr/libexec/AppleQEMUGuestAgent, macOS 13+)
|
||||
# attaches to a virtio console port named org.qemu.guest_agent.0 and offers
|
||||
# guest-exec (as root), guest-file-* etc. over this unix socket.
|
||||
guestAgentArgs = sock:
|
||||
"-device virtio-serial-pci,id=vmix-vser -chardev socket,path=${sock},server=on,wait=off,id=vmix-qga -device virtserialport,chardev=vmix-qga,name=org.qemu.guest_agent.0";
|
||||
|
||||
# virtio-fs (vhost-user, virtiofsd on the host). macOS auto-mounts the tag
|
||||
# "com.apple.virtio-fs.automount" at /Volumes/My Shared Files; other tags are
|
||||
# mounted with `mount -t virtiofs <tag> <dir>`. Needs a shared memory backend.
|
||||
automountTag = "com.apple.virtio-fs.automount";
|
||||
memBackendArgs = memSize: "-object memory-backend-memfd,id=vmix-mem,size=${toString memSize}M,share=on -numa node,memdev=vmix-mem";
|
||||
virtioFsArgs = { tag, sock, id ? tag }:
|
||||
"-chardev socket,id=vmix-vfs-${id},path=${sock} -device vhost-user-fs-pci,chardev=vmix-vfs-${id},tag=${tag}";
|
||||
|
||||
# virtio-blk data disk (AppleVirtIOBlock), e.g. the persistent home volume
|
||||
virtioBlkArgs = { id, file, format ? "qcow2", extra ? "" }:
|
||||
"-drive id=${id},if=none,format=${format},file=${file}${extra} -device virtio-blk-pci,drive=${id}";
|
||||
|
||||
# virtio keyboard/tablet (AppleVirtIOInput), optional alternative to the USB HID pair
|
||||
virtioInputArgs = "-device virtio-keyboard-pci -device virtio-tablet-pci";
|
||||
|
||||
firmwareArgs = varsFile:
|
||||
"-drive if=pflash,format=raw,readonly=on,file=${pkgs.OVMF.fd}/FV/OVMF_CODE.fd -drive if=pflash,format=raw,file=${varsFile}";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue