在 WSL2 on Windows 中安裝 MacOS
※ OSX-KVM 專案
我一直都很想在 Windows 上跑一個 MacOS,但 PC 下透過虛擬機器執行 MacOS 效能不理想。我就想到 WSL2 中虛擬化一個 MacOS 應該會好不少(我沒有指望能效十分完美,但只是能用的程度)。
OSX-KVM 正是一個實現專案。
準備操作
安裝的第一步我就碰到了問題,專案 readme 提供的 required packages 是 apt 包管理器的包名,而我使用的是 Arch Linux。
1
2
3
sudo apt-get install qemu-system uml-utilities virt-manager git \
wget libguestfs-tools p7zip-full make dmg2img tesseract-ocr \
tesseract-ocr-eng genisoimage vim net-tools screen -y
我選擇了使用 ChatGPT 幫我搜尋整理了 pacman 和 aur 版本的對應包。其中遇到了一個坑,genisoimage 來自 cdrkit package。
然後就是跟著 readme 操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd ~
git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git
cd OSX-KVM
sudo modprobe kvm; echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
# CPU 二選一
sudo cp kvm.conf /etc/modprobe.d/kvm.conf # for intel boxes only 我的 CPU 是 intel,所以執行這一條就好,反之第二條
sudo cp kvm_amd.conf /etc/modprobe.d/kvm.conf # for amd boxes only
# ---
sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG input $(whoami)
安裝系統
假設你還在~/OSX-KVM
目錄下,執行./fetch-macOS-v2.py
我選擇的是 Sonoma (14),但我推薦你選擇 Ventura (13),因為他的效能更好。
等待下載完成後執行dmg2img -i BaseSystem.dmg BaseSystem.img
轉換映像格式。
然後執行qemu-img create -f qcow2 mac_hdd_ng.img 256G
建立一個虛擬硬碟映像。 我的 WSL2 預設對映存貯在 C 盤,所以我要將他移動到 D 盤mv ~/mac_hdd_ng.img /mnt/d/wsl/
。
好了,readme 告訴我應該執行啟動指令碼了,但由於我移動了映象位置,我需要更改指令碼內容,順便重新分配一下系統資源。
編輯~/OSX-KVM/OpenCore-Boot.sh
更改系統資源
1
2
3
4
ALLOCATED_RAM="6144" # MiB
CPU_SOCKETS="2"
CPU_CORES="2"
CPU_THREADS="4"
由於我安裝的是 Sonoma,我還需要將Penryn
替換為Haswell-noTSX
更改映像路徑,將$REPO_PATH/mac_hdd_ng.img
替換為/mnt/d/wsl/mac_hdd_ng.img
大功告成!儲存執行sudo ~/OSX-KVM/OpenCore-Boot.sh
。
然後不出意料你會得到這個錯誤。
1
2
QEMU 9.2.3 monitor - type 'help' for more information (qemu)
gtk initialization failed
逛了一會兒論壇找到了修復的方法。 在/etc/systemd/system/wslg.service
新增如下內容
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=symlink /tmp/.X11-unix
After=systemd-tmpfiles-setup.service
[Service]
Type=oneshot
ExecStart=rmdir /tmp/.X11-unix
ExecStart=ln -s /mnt/wslg/.X11-unix /tmp/
[Install]
WantedBy=sysinit.target
然後執行systemctl enable wslg
,退出 WSL2,在 PowerShell 執行wsl --shutdown
。
修復就完成了,進入 WSL2 執行啟動指令碼,就會彈出 WSLg 視窗了。 關於這個錯誤,你可以檢視更多在這個 Superuser 回帖 檢視。
WSLg 執行後透過鍵盤選擇 base 系統使用Disk Utility
工具格式化為APFS
磁碟(不要選錯盤,是那個 200 多 GB 的!)
返回上一級繼續install macOS
,等待直到進入 MacOS 的導覽畫面,enjoy!
還有更多嗎
事實上每次啟動都要 cd 到目錄,我為了偷懶就在 bashrc 中新增了alias macos='cd ~/OSX-KVM/ && sudo ~/OSX-KVM/OpenCore-Boot.sh && cd ~'
,這樣就可以直接鍵入 macos 啟動系統。
推薦透過 OSX-Optimizer 最佳化 MacOS 系統(按需選擇即可)。
還有更多配置網路和其他可能遇到的問題在這個 note 下。
我還沒研究配置網路搭配virt-manager
使用,就到這了。