免Mac電腦,在Linux系統安裝macOS Ventura的QEMU/KVM虛擬機

因為想要用Xcode編譯一些東西,所以有了在Linux電腦裝MacOS虛擬機的念頭,趁蘋果全面轉向ARM前裝來用。

macOS Ventura virtual machine running on Arch Linux
macOS Ventura virtual machine running on Arch Linux

Github上有一個很受歡迎的解決方案kholia/OSX-KVM,簡單易用,目前支援到最新版macOS Ventura (13.2.1)。

不需要事先用Mac電腦製作ISO也能安裝虛擬機,利用Linux的KVM技術高效率執行虛擬機,還支援顯示卡直通。當然顯示卡要AMD才行,蘋果不喜歡Nvidia。

其實這就是虛擬機版的黑蘋果,作者宣稱Apple-OSK的字串網路上到處都是,因此不保證合法性。

1. 確認KVM核心模組狀況

  1. CPU為Intel i5-7400,電腦主機板要進入UEFI啟用CPU虛擬化支援。接著檢查CPU是否支援虛擬化,回傳值不為0。
1
sudo grep -E -c '(vmx|svm)' /proc/cpuinfo
  1. 接著用以下指令確認CPU是否支援KVM,還有KVM核心模組是否有載入:
1
sudo lsmod | grep kvm

2. 安裝前置依賴套件

首先你需要安裝QEMU和Virt Manager。Ubuntu 22.04參考這篇,Arch Linux則參考這篇

再安裝剩下的套件

1
sudo apt-get install uml-utilities git wget p7zip-full make dmg2img

將使用者加入KVM群組

1
2
3
sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG input $(whoami)

3. 複製OSX-KVM儲存庫

  1. 複製OSX-KVM儲存庫
1
2
3
cd ~
git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git
cd OSX-KVM
  1. 選擇macOS版本,輸入6,下載最新版macOS Ventura。此階段只會下載600MB的基本系統映像檔。
1
./fetch-macOS-v2.py
  1. 將DMG檔轉成IMG:
1
dmg2img -i BaseSystem.dmg BaseSystem.img
  1. 建立一個虛擬硬碟,建議至少128GB。
1
qemu-img create -f qcow2 mac_hdd_ng.img 128G

4. 開始安裝macOS虛擬機

  1. 用指令稿開機
1
./OpenCore-Boot.sh
  1. 點一下QEMU畫面,用方向鍵移動到Base System,按下Enter

  2. 點選磁碟工具(Disk Utility),Continue。

  3. 選取剛剛建立的虛擬硬碟,點選Erase開始格式化

  4. 給硬碟取名,Format選擇macOS Extended (Journal)

  5. 關閉磁碟工具,回到主畫面,點選"Reinstall macOS Ventura",按Continue。

  6. 接著按照螢幕指示完成安裝,下載檔案和安裝系統要2小時以上,慢慢等吧。

  7. 安裝期間可能需要反覆重開虛擬機才能順利裝完,之後會進到以下畫面。

設定好時間、語言、使用者帳號。進入桌面之後點選系統設定 → 系統更新,讓系統跑完更新。

調整螢幕解析度的其餘設定請看開發者的Note

5. 將macOS虛擬機加到Virt Manager

將macOS虛擬機資訊匯入到Virt Manager,方便編輯硬體參數。

  1. 安裝完虛擬機後,將macOS關機。

  2. 修改XML,並用virt-xml驗證

1
2
sed "s/CHANGEME/$USER/g" macOS-libvirt-Catalina.xml > macOS.xml
virt-xml-validate macOS.xml
  1. 用macOS的XML建立虛擬機
1
virsh --connect qemu:///system define macOS.xml
  1. 設定目錄權限
1
2
sudo setfacl -m u:libvirt-qemu:rx /home/$USER
sudo setfacl -R -m u:libvirt-qemu:rx /home/$USER/OSX-KVM
  1. 這樣macOS就會出現在Virt Manager列表了,可以直接從這裡開機。

  2. 開發者有提到Ubuntu用戶需要自行新增開機啟動macOS的網路卡服務,編輯/etc/rc.local,新增以下內容。

1
2
3
4
5
6
#!/usr/bin/env bash

sudo ip tuntap add dev tap0 mode tap
sudo ip link set tap0 up promisc on
sudo ip link set dev virbr0 up
sudo ip link set dev tap0 master virbr0
  1. 賦予執行權限
1
sudo chmod +x /etc/rc.local
  1. 如果系統是使用systemd,那麼還需要編輯 /etc/systemd/system/rc-local.service ,加入以下內容。(參考)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
  1. 啟動rc.local服務
1
2
sudo systemctl enable rc-local
sudo systemctl start rc-local

如果本網站文章對您有幫助,歡迎贊助我。