PVE Guest MacOS 13 Venture Setup

From WikiMLT

Prox­mox Set­up and Ma­cOS In­stal­la­tion

I've fol­lowed the guide pro­vid­ed by i12bretro and have in­stalled Ma­cOS 13 Ven­ture on my PVE:

Dur­ing the in­stal­la­tion I've used the re­sources pro­vid­ed with­in the re­sources sec­tion. Here is shown my fi­nal con­fig­u­ra­tion file.

cat /etc/pve/qemu-server/207.conf
agent: 0
args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+xsave,+xsaveopt,check
audio0: device=intel-hda,driver=spice
bios: ovmf
boot: order=virtio0
cores: 4
cpu: host
efidisk0: ssd-1TB:207/vm-207-disk-0.qcow2,efitype=4m,size=528K
machine: q35
memory: 16384
meta: creation-qemu=7.0.0,ctime=1666276060
name: MacOS.13
net0: vmxnet3=C2:63:A3:4E:7E:E7,bridge=vmbr0,firewall=1
numa: 1
ostype: other
scsihw: virtio-scsi-pci
smbios1: uuid=ac933204-a2a1-4915-aeee-60259bfb3fc1
sockets: 4
spice_enhancements: videostreaming=all
tablet: 1
tpmstate0: ssd-1TB:207/vm-207-disk-1.raw,size=4M,version=v2.0
usb0: spice,usb3=1
usb1: spice,usb3=1
usb2: spice,usb3=1
vga: qxl,memory=128
virtio0: local-lvm:vm-207-disk-0,discard=on,size=80G
vmgenid: 64c40db4-c6f3-4c42-b9ed-95a02e08fa15
# Tested args which provide worse performance
args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+fma4,+bmi1,+bmi2,+xsave,+xsaveopt,check -device intel-hda,id=sound5,bus=pci.0,addr=0x18 -device hda-micro,id=sound5-codec0,bus=sound5.0,cad=0 -device hda-duplex,id=sound5-codec1,bus=sound5.0,cad=1 -device hda-output
  • Note my Prox­mox VE host is in­stalled on Think Serv­er TD350 with In­tel Xeon E5-2673 v.3 and I do not need to pass much ad­di­tion­al CPU args.
  • I've tried with dif­fer­ent In­tel proces­sor types and found that the Pen­ryn type (used in the most in­ter­net guides) caus­es much greater CPU us­age at the host lev­el. IMO Ivy­Bridge is bet­ter choice. Cur­rent­ly I'm us­ing Hos type – in my case it is Haswell-EP ar­chi­tec­ture.
  • In ad­di­tion­al I've found that the num­ber of the cores can't be greater than 4 (but you can in­crease the sock­ets if you want to pass more cores), oth­er­wise the VM hangs at boot.

Post In­stal­la­tion Set­up

Cur­rent­ly I'm us­ing Spice/​​​QXL for dis­play dri­ver. Note there is not Ma­cOS guest tool avail­able and this is the rea­son we can't change the res­o­lu­tion with­in the guest.

Switch the Res­o­lu­tion while us­ing SPICE/QXL

We can set dif­fer­ent res­o­lu­tions with­in the Open­Core EFI set­tings by the fol­low­ing steps (as ref­er­ence see the sec­tion Con­fig­ur­ing Boot­ing With­out Open­Core Mount­ed from the man­u­al cit­ed above).

  • Use Moun­tE­FI and mount the EFI.
  • Use the MacOS's file man­ag­er and nav­i­gate to the mount­ed EFI par­ti­tion.
  • Ed­it the file EFI/OC/config.plist – find and mod­i­fy the fol­low­ing <string> di­rec­tive, note on­ly one res­o­lu­tion will be ac­cept­ed and the fall­back res­o­lu­tion is that de­fined in the OVMF EFI set­tings.
    <key>Resolution</key>
    <string>1920x1080@32</string>
    
    <string>1280x960@32</string>
    
    <string>1280x960@16</string>
    

Here is a helper script that ro­tates two tem­plates of EFI/OC/config-{1920x1080,1280x960}.plist – note you need to pre­pare the tem­plates that will be ma­nip­u­lat­ed by the script.

nano ~/bin/change-resolution.sh
#!/bin/bash

# List the available devices
# diskutil list

function main() {
    if [[ ! -z ${1+x} ]]
    then
        diskutil unmount /Volumes/efi 2>/dev/null
        mkdir -p /Volumes/efi
        mount -t msdos /dev/disk0s1 /Volumes/efi
        sleep 1
    
        if [[ -f /Volumes/efi/EFI/OC/config-${1}.plist ]]
        then
    	echo "Template in use: /Volumes/efi/EFI/OC/config-${1}.plist"
            sleep 1
    
            cp /Volumes/efi/EFI/OC/{config-$1,config}.plist
    
            sleep 1
            diskutil unmount /Volumes/efi
            reboot
            exit
        fi
        
        diskutil unmount /Volumes/efi
    fi
    
    sleep 1
    echo "Usage: $0 '1920x1080|1280x960'"
}

# https://unix.stackexchange.com/a/269080
FUNC=$(declare -f main)
sudo bash -c "$FUNC; main $@"
change-resolution.sh "1280x960"

Us­ing oth­er Dis­play adapter types as "Stan­dard VGA", "VMWare com­pat­i­ble" and "Vir­tIO-GPU" will al­low you to change the res­o­lu­tion from the Ma­cOS guest it­self, but the Spice con­nec­tion is much bet­ter than the VNC con­nec­tion that you can use with these de­vices. Us­ing these de­vices could be help­ful if you us­ing Team View­er as client.

Change the OpenCore's Pick­er Set­tings

You can change the OpenCore's boot menu Pick­er op­tions, via config.plist file in the fol­low­ing way:

  • Use Moun­tE­FI and mount the EFI.
  • Use the MacOS's file man­ag­er and nav­i­gate to the mount­ed EFI par­ti­tion.
  • Ed­it the file EFI/OC/config.plist and mod­i­fy the fol­low­ing di­rec­tives:
    <key>ShowPicker</key>
    <true/>                <!-- Set this to 'false' if you want to disable the picker -->
    <key>Timeout</key>
    <integer>5</integer>   <!-- 0 will disable the timeout, currently it is 5 seconds -->
    

All avail­able op­tions are de­scribed with­in the OpenCore's Con­fig­u­ra­tion man­u­al (PDF file). Here is a video guide: How to skip Open­Core boot pick­er. Al­so for a con­ve­nience you can use the Open­Core Con­fig­u­ra­tor tool.

En­able the Au­dio while us­ing SPICE/QXL

In my case get­ting the au­dio op­er­a­tional is crit­i­cal, be­cause I'm ac­tu­al­ly do­ing this set­up for brows­er com­pat­i­bil­i­ty tests of web pages and oth­er ap­pli­ca­tions. Oth­er­wise the flash videos and HTML 5 videos fails in Sa­fari.

So I've test­ed the fol­low­ing suc­cess­ful so­lu­tions:

  • Set­up dum­my out­put by the help of Sound­flower (YouTube):
    brew install Caskroom/cask/soundflower
    
    Af­ter that open Sys­tem Set­tings and at the bot­tom of the Pri­va­cy & Se­cu­ri­ty menu al­low the us­age of Sound­flower and restart.
  • Use Team View­er: In­stall team Team View­er Host ap­pli­ca­tion (or the full ap­pli­ca­tion) it will set an Ag­gre­gate au­dio de­vice. Set­up the ap­pli­ca­tion to ac­cept di­rect LAN con­nec­tions and use Team View­er as client to con­nect to the guest via its IP. I think hav­ing dum­my out­put set­up by Sound­flower in­creas­es the au­dio qual­i­ty and avail­abil­i­ty via Team View­er.
  • Use Spice client:
    • Pass an au­dio de­vice from the re­mote in­stance: With­in the Spice client at­tach some USB au­dio de­vice – i.e. Blue­tooth adapter and con­nect Head­phones to that de­vice from the guest Ma­cOS. In this case you should cre­ate enough num­ber of USB de­vices which use Spice dri­ver with­in the Proxmox's VM con­fig­u­ra­tion.
    • Set­up VoodooH­DA as it is shown in the fol­low­ing sec­tion.

Set­up VoodooH­DA and Make the Au­dio Avail­able with­in Spice

A good clue how to in­stall VoodooH­DA on Ma­cOS 13 Ven­ture is pro­vide by Yah­goo at GitHub: In­stall VoodooH­DA for Big Sur and Mon­terey. Here are the ex­act steps that I've per­formed.

1. First we will in­stall in­stall the lat­est built ver­sion (cur­rent­ly 2.9.2) pro­vid­ed with­in the Chris1111's repos­i­to­ry: VoodooH­DA OC. This is the eas­i­est way to get VoodooHDA's pref­er­ences pane op­er­a­tional. The repos­i­to­ry is lit­tle bit out­dat­ed but the Pref­Pane is not changed since 2018. At all this step is op­tion­al.

Down­load the file VoodooH­DA OC​.dmg​.zip. Then run the con­tained pack­age. You will need to open Sys­tem Set­tings and at the bot­tom of the Pri­va­cy & Se­cu­ri­ty menu al­low the us­age of VoodooH­DA OC.dmg. Af­ter that go back to the file and run the pack­age again. Fol­low the video guide pro­vid­ed by the au­thor. Note you may need in­ter­act again with Sys­tem Set­tings > Pri­va­cy & Se­cu­ri­ty.

1. Re­boot the sys­tem and with­in OpenCore's Pick­er choice Re­cov­ery mode. Then dis­able Dis­able Sys­tem In­tegri­ty Pro­tec­tion Tem­porar­i­ly oth­er­wise lat­er when we need to use kmu­til you will ex­pire the er­ror "Bad code sig­na­ture". Once you are in the re­cov­ery mode, launch Ter­mi­nal from the Util­i­ties menu (from the top bar). and ex­e­cute the fol­low­ing com­mands.

csrutil clear
csrutil disable
csrutil authenticated-root disable
reboot

3. Af­ter the re­boot use Moun­tE­FI or mount EFI man­u­al­ly as it is shown be­low. Use disku­til list to find which is your EFI de­vice – in my case it is disk0s1.

sudo mkdir -p /Volumes/efi
sudo mount -t msdos /dev/disk0s1 /Volumes/efi

4. Then use the file ex­plor­er and nav­i­gate to the EFI/OC di­rec­to­ry.

5. Use the Open­Core Con­fig­u­ra­tor app and open the file EFI/OC/config.plist. You will need to open Sys­tem Set­tings and at the bot­tom of the Pri­va­cy & Se­cu­ri­ty menu al­low the us­age of Open­Core Con­fig­u­ra­tor.

6. With­in the Open­Core Con­fig­u­ra­tor nav­i­gate to the NVRAM sec­tion and find the en­try csr-ac­tive-con­fig. Make sure its val­ue is 0x0285 or 000285. (My orig­i­nal val­ue was 260F and to be hon­est haven't tried the fol­low­ing steps with­out chang­ing it.) Save the file and close the con­fig­u­ra­tor ap­pli­ca­tion.

7. Down­load VoodooH­DA. At the time I'm writ­ing the ar­ti­cle the lat­est ver­sion is 3.0.1.

8. Open a ter­mi­nal win­dow and ex­e­cute the fol­low­ing com­mands.

sudo cp -R ~/Downloads/VoodooHDA.kext /Volumes/efi/EFI/OC/Kexts
sudo cp -R ~/Downloads/VoodooHDA.kext /Library/Extensions

9. Run the fol­low­ing com­mand.

sudo kmutil load -p /Library/Extensions/voodooHDA.kext

Then: 1) Go to Sys­tem Set­tings and at the bot­tom of the Pri­va­cy & Se­cu­ri­ty menu al­low the us­age of VoodooH­DA. 2) Restart the Ma­cOS.

10. That's it. Af­ter the re­boot the sound con­troller should be avail­able:

  • Check Sys­tem Set­tings > Sound, and Sys­tem In­for­ma­tion > Au­dio.
  • Check the sound via a Spice con­nec­tion.

Ref­er­ences

Re­souces

Ma­cOS us­age

Mis­cel­la­neous