Featured image of post [Tech] Installing macOS Ventura on PVE7.2

[Tech] Installing macOS Ventura on PVE7.2

PVE安装macOS Ventura记录

Installing macOS Ventura on PVE7.2

为什么要这样做

要是有钱,MacPro拉到顶配,稳定又省心,干嘛要去折腾黑苹果。而且现在的M1 mac据说“生产力”(剪视频)特别牛,收台macmini M1 16+1T大概在7000块一台,我认为如果是拿苹果干活生产的就没必要折腾黑苹果了,系统不稳定工程挂了损失大,而且现在除非自己有闲置的二手硬件,组黑苹果不太值得玩。

那为什么要在虚拟机里面开黑苹果呢?虚拟机有个好处是屏蔽硬件底层,在网上有大神已经搞好了PVE适配的黑苹果安装方式,那么自己的电脑如果不是特别老,能装上PVE的话,基本都能成功点亮黑苹果,就不用自己去操作底层EFI(不同的机型需要特定的EFI),但是运行在虚拟机里面也有那么一些不好的地方,像是有那么一点性能损失、宿主机系统需要占用内存、直通用起来有那么一点膈应……

我是正好组了台新(里面大部分也是二手拆机)的server,然后有多余的硬件资源出来,就在上面整一个黑苹果体验体验,相当于0元购入mac mini 16+512,何乐而不为呢?当然这有个前提是我还有一台稳定的windows大奶台式机,黑苹果只是玩玩+体验,不是用来干生产力的。

参考教程

Installing macOS 13 Ventura on Proxmox 7.2 – Nicholas Sherlock (nicksherlock.com)
nicksherlock的博客

提示

如果需要参考本文进行配置,默认你已经懂得Linux基本操作(命令行、ssh、git、编译),已经成功安装PVE以及有创建PVE虚拟机的经验。

硬件配置

我的硬件平台是 EPYC 7302P,Rome二代,16核32线程,泰安S8030主板,给到黑苹果的是RX560 4G显卡,母鸡(Host)操作系统是PVE 7.2。
这个RX560显卡是240块从小黄鱼收的,说是白牌(无牌)公版卡,刷入gigabyte的显卡bios开核,换了MSI的散热。太灵了,但是我那机箱只能用短显卡,短显卡普遍偏贵,这个卡就入来玩玩,一开始死活点不亮黑苹果然后去刷显卡bios,刷一圈后刷回原来的gigabyte bios,后面才发现是虚拟机直通显卡的时候不能勾选"pcie",否则点不亮。

比起Monterey系统,Ventura系统的硬件要求要高一些,Ventura系统需要CPU支持AVX2,在Intel里面最早到Haswell(4代酷睿、E5 v3、E3 v3),另外AMD的GPU需要GCN4.0以上(Polaris架构的RX460 560开始)

创建恢复镜像

从thenickdude大神的GitHub仓库克隆到自己的本地目录

1
git clone https://github.com/thenickdude/OSX-KVM.git

这里我用的是Linux系统的另一台电脑(当然PVE里面可以创建一个ubuntu的LXC容器,用完就删掉)先安装需要的工具

1
sudo apt install qemu-utils make

然后去make它

1
2
cd scripts/ventura
make Ventura-recovery.img

这个操作会从Apple的软件分发服务器下载ventura安装包,然后build一个叫“Ventura-recovery.img”的恢复镜像。

Linux ubuntu系统下编译镜像

等待一段时间后,在当前目录下有“Ventura-recovery.img”文件,把它上传到PVE的iso存放目录。

下载OpenCore

从thenickdude的仓库下载OpenCore镜像文件(需要v19及以上版本),解压,同样上传到PVE的iso存放目录。

Releases · thenickdude/KVM-Opencore (github.com)

查找OSK

macOS的osk,是一串64长度的字符串,自己找^_^

因为每一台Mac用的都是同一串osk,不必为了这串osk看起来不像是随机字符而感到惊讶。

创建虚拟机

定义ID和名称 添加OpenCore光盘镜像 系统选择

分配512G磁盘 模拟Haswell cpu 分配内存 分配虚拟网卡

完成创建虚拟机后,从“硬件”页面添加一个IDE0的iso:“Ventura-recovery.img”

保存后添加恢复镜像

这个时候不要急着开虚拟机,用命令行(网页Shell或者ssh自行选择)修改一下这个虚拟机的conf文件,我习惯用vim,当然nano也可以编辑。

1
vim /etc/pve/qemu-server/103.conf

这个“103”是我刚刚创建的虚拟机的ID,需要替换成自己的。添加一行参数

1
args: -device isa-applesmc,osk="<自己找>" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu host,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on

确保这行参数在一行里面。

在AMD平台,如果虚拟机无法开机的话,把“-cpu host”换成“-cpu Haswell-noTSX”(我的EPYC罗马CPU需要做这一步,否则无法开启macOS虚拟机)

然后在这个conf文件里面,把ide0和ide2(两个ISO)的“media=cdrom”换成“cache=unsafe”

:wq! 退出vim,保存文件。

设置PVE

为了避免重复启动MacOS,执行这条命令

1
echo 1 > /sys/module/kvm/parameters/ignore_msrs

为了让每一次pve重启都有效,执行这条命令

1
echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf && update-initramfs -k all -u

安装MacOS

先在虚拟机的设置选项把opencore的引导设置在第一位

编辑引导顺序

然后开机进入虚拟机

先进去格式化磁盘

右上角erase它,名字随便取,Format要选择APFS

完成格式化后点击“Done”,点击左上角叉出去。选择“reinstall”,continue

装入到刚才格式化的硬盘里面

每一次重启都选择“macOS Installer”

最后两次重启是选择刚才格式化的硬盘的名字"hackintosh",反正不要选那个Base System就行。
重启几次之后进入系统,开始初始化设置,建议不要开启定位、登录Apple ID账号之类的。

完成初始化后,就可以通过web控制台看到界面了

这个时候MacOS已经安装成功,但是还需要后续的一些设置。
关机,在虚拟机的“硬件”把recovery恢复镜像分离掉,重新进入系统。

复制OpenCore到EFI分区

现在还是从opencore引导进入系统,最好能直接从虚拟磁盘引导进入系统而不是OpenCore,而且后面需要更改OpenCore的EFI内容,为的是不污染原有的镜像,以及允许后续的“快照”功能(需要每一个虚拟磁盘都是qcow2)。只要把OpenCore复制到虚拟硬盘的EFI分区就可以了。打开terminal

1
diskutil list

看到disk2s1就是OpenCore的EFI分区,disk0s1是虚拟磁盘的EFI分区,把disk2s1覆盖disk0s1就可以了

1
sudo dd if=/dev/disk2s1 of=/dev/disk0s1

dd命令是直接写入的命令,if后面是源,of后面是目标,注意不要敲错目标了,不然一切要重新来过。完成后关机,从虚拟机的“硬件”中分离OpenCore镜像,从“选项”中选择virtio磁盘为启动盘。这个时候可以做“快照”(如果刚才创建虚拟磁盘和EFI分区都是用qcow2而不是raw格式的话,我的步骤就是这样的)

“快照”是qcow2格式才可以做的,这样自己在后续的操作中如果出现问题,可以通过快照回滚恢复到之前的状况,例如手贱点到系统大更新结果无法进入黑苹果,或者某个配置出错导致系统烂掉。强烈建议做快照。

开机自动启动

每一次开机都要选择“hackintosh”硬盘然后回车,这个有点麻烦,所以对opencore修改一下,这样就不用每次都敲回车了。

首先挂载opencore分区,输入diskutil list 命令,查看EFI分区在哪里

可以看到在disk0s1分区,输入sudo diskutil mount disk0s1 命令挂载该EFI分区

这个时候进入EFI挂载目录

1
cd  /Volumes/EFI/EFI/OC

用喜欢的工具编辑config.plist文件(XML格式文本文件)

在vim里面命令模式输入/ShowPicker 可以直接搜索ShowPicker的内容,把true值改为false

:wq! 保存退出,重启看看是否可以直接开机进入登陆界面而不用选硬盘敲回车。

修复imessage

icloud和App Store都可以正常登录使用了,但是iMessage还需要一些设置。参考:

https://dortania.github.io/OpenCore-Post-Install/universal/iservices.html

涉及到改OpenCore的内容

如果做了这一步修改,虚拟机的“virtio网卡”的MAC地址要改到跟ROM对应的值。因为涉及到特定的序列号和UUID,我就不贴自己用的了。

进行下一步显卡直通前,做一下虚拟机的“快照”避免翻车。

显卡直通——PVE设置

开启iommu,我这里没有设置屏蔽核显,因为服务器自带有板载显卡给PVE启动的时候用,与PCIE插槽上的独显无关。没有核显or板载显卡的上网寻找教程。

1
2
3
4
5
6
7
8
vim /etc/default/grub

# 其中一行的内容修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream"
# Intel CPU amd_iommu改为intel_iommu
# 保存退出,更新grub

update-grub
1
2
3
4
5
6
vim /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
1
2
3
vim /etc/modprobe.d/kvm.conf

options kvm ignore_msrs=Y
1
2
3
4
5
6
7
8
vim /etc/modprobe.d/pve-blacklist.conf

blacklist nvidiafb
blacklist radeon
blacklist amdgpu
blacklist nouveau
blacklist nvidia
blacklist snd_hda_intel
1
2
3
4
5
lspci # 查看显卡的PCI设备ID

vim /etc/modprobe.d/vfio.conf

options vfio-pci ids=<your GPU ID>,<your GPU audio card ID> # 逗号分隔

更新应用,重启PVE

1
2
update-initramfs -u
reboot

给macOS直通显卡和USB

直通显卡需要把kvm去除,去除kvm后无法通过PVE网页登录操作macOS,只能连外接的USB键鼠和显示器来使用macOS。

在虚拟机的“硬件”,添加USB设备,直通USB键鼠:

添加PCI设备,直通显卡

“所有功能”勾上,“主GPU”勾上,PCIE不能勾,否则无法启动。

显示选“无”,这样macOS启动就只能从显卡输出了,无法从web控制台用虚拟“kvm”进行操作。

这个时候启动虚拟机,外面连显示器和鼠标,就像是操作一台mac一样。

8核Rome,16G内存,512Gssd,Enjoy it!

存在问题

  1. 硬盘可以加到1T的,现在SSD大概500块能买到1T,对比白Apple的加硬盘划算很多,但是抠了点不买(摆烂)。
    如果有独立的1T“HC550”这种免驱nvme硬盘,可以直接直通给macOS,系统直接安装在这个硬盘上,但是用不了虚拟机qcow2的“快照”功能。
  2. 没有蓝牙,失去airdrop、handoff等功能,买了一块28软的BCM943224PCIEBT“免驱网卡”, 因为目前有线网可以达到千兆甚至万兆,所以不在意wifi速率,单独加蓝牙功能就好了,这个网卡后面需要自己画PCB转接到USB,不清楚能否成功。
    垃圾佬就要有必要时候自己画转接板的能力 : -)
Built with Hugo
主题 StackJimmy 设计