Hackintosh on KVM (附 Proxmox VE NAT 配置)

开始之前 ……

请问 KVM 上装黑果有意义吗?

:你好,没有,再见

意义党请自行离开,不喜勿看不喜勿喷

(留坑,明天再写(咕咕咕)

当你知道我要咕,我咕了,亦是一种不咕

本文 Hackintosh On KVM 部分主要参考 Installing macOS Catalina 10.15 on Proxmox 6

开源项目 github.com/kholia/OSX-KVM

水完了,完结撒花

准备工作

PVE NAT

因为采用 Modern 方法安装,所以需要网络。但是我服务器所在的环境是直接桥接网卡,内网没有 DHCP 服务,所有 IP 都是静态手动配置,因此只能在 PVE 上再建一个 NAT 网桥,或者采取 Old-School 的方法去安装

可能有人问为啥不在引导进恢复系统的时候手动配一下静态 IP,事实上我一开始就是尝试了这种。
结果就是,静态 IP 确实可行,但是 DNS 一直炸,没有任何方法能用(至少我是没配成

简述一下网络环境:

  • 网关 172.16.0.1
  • DNS 服务器 172.16.0.2
  • PVE 服务器 172.16.0.100

服务器网卡 eth0

vmbr0 是桥接网卡,桥接到 eth0,可以配静态 IP 的容器或者虚拟机直接桥接到 vmbr0 上

然后我们需要一个 vmbr1 这个网桥作为 NAT 网桥,并配上 DHCP 服务,使得必须使用 DHCP 的容器或者虚拟机桥接到这个网桥上拿到另一段子网 IP

vmbr1 网桥环境:

  • 网关 10.10.0.1
  • 掩码 255.255.255.0

这里丢上 /etc/network/interfaces

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  172.16.0.100
        netmask  24
        gateway  172.16.0.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet static
        address 10.10.0.1
        netmask  24
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.0.0/24' -o vmbr0 -j MASQUERADE

因为是 NAT,所以需要开启 v4 包转发参数,然后用 iptables 来做包转发。需要注意一点的就是,iptables 需要把包转发到 vmbr0 这个桥接网卡上

配置参考 PVE Wiki Network Configuration

然后重启机器(重启 networking 好像会出奇怪的问题,,,)就可以了

然后就是 DHCP,直接用 dnsmasq 来配就可以了

interface=vmbr1
listen-address=10.10.0.1,127.0.0.1
dhcp-range=10.10.0.100,10.10.0.200,12h
dhcp-option=3,10.10.0.1
dhcp-option=option:dns-server,172.16.0.2

然后启动 dnsmasq,DHCP 就算开好了

这时候可以开一个 debian 容器来测一下 DHCP 能不能正常拿到 IP,ping 通网关,解析域名

顺便附上端口转发的半自动脚本 Port Forwarding Utils by Moycat

PVE 预配置

原文章来说,PVE 的某个版本修改了 OVMF 导致启动的时候页表只读,和 Clover 的 OsxAptioFixDrv 冲突,所以需要 patch 一下,这里请按照原文章步骤,完成 patch

我也没试过没有 patch 过的 OVMF UEFI 固件能不能用(x

然后就是修改另外一个内核参数,防止引导死循环

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

要是需要永久修改:

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

安装 Catalina

先前准备

首先克隆项目

git clone https://github.com/kholia/OSX-KVM

如果想要使用 Modern 方法安装:

获取 BaseSystem.dmg

./fetch-macOS.py

这里会让选版本(当然选最新稳定版啦

然后把 DMG 镜像转成 ISO 镜像

# apt install dmg2img
dmg2img BaseSystem.dmg /vat/lib/vz/template/iso/Catalina-installer.iso

如果用离线完整安装包安装,则需要在一台 macOS 机器上获取完整安装包,即Install macOS Catalina.app,然后使用项目中/Catalina/create_iso_catalina.sh脚本来创建离线完整安装 ISO 镜像

然后下载 Clover 引导(懒得自己构建,直接用现成的了

wget https://github.com/thenickdude/OSX-KVM/releases/download/clover-r5070/clover-r5070.iso.gz

然后解压一下丢 ISO 镜像目录就可以了

创建虚拟机

具体图片步骤请参考源博客

  • 第二步 OS 选择 clover 镜像,操作系统选 others
  • 第三步 系统 BIOS 选 OVMF,显卡选 VMWare 兼容,SCSI 选 virtio,机器选 q35
  • 第四步 硬盘自己配大小
  • 第五步 CPU 自己配,类型选 Penryn,关掉 NUMA
  • 第六步 内存自己配大小,关掉 Ballooning
  • 第七步 网卡自己配,注意在线安装镜像只能 DHCP,类型选 VMWare vmxnet3

确认以后,先不要开机,需要对配置文件再修改,加一些参数,配置文件在/etc/pve/qemu-server/YOUR-VM-ID-HERE.conf

在配置文件第一行,加入:

args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -device usb-kbd,bus=ehci.0,port=2

修改光驱选项,添加安装镜像,并把,media=cdrom改成,cache=unsafe

最终配置:

args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -device usb-kbd,bus=ehci.0,port=2
balloon: 0
bios: ovmf
boot: cdn
bootdisk: sata0
cores: 4
cpu: Penryn
efidisk0: local-lvm:vm-1106-disk-0,size=4M
machine: q35
memory: 32768
name: macOS
net0: vmxnet3=xx:xx:xx:xx:xx:xx,bridge=vmbr1,firewall=1
numa: 0
ostype: other
ide0: isos:iso/Catalina-installer.iso,cache=unsafe
ide2: isos:iso/clover-r5070.iso,cache=unsafe
sata0: local-lvm:vm-1106-disk-0,cache=writeback,discard=on,size=128G
scsihw: virtio-scsi-pci
smbios1: uuid=xxxxxxx-uuid
sockets: 1
vga: vmware
vmgenid: xxxx-uuid

如果使用传统完整镜像安装,直接加一个光驱设备,不需要到配置文件中手动更改,文件选制作好的安装镜像即可。注意不能选择成硬盘设备,不然无法识别

到这里,虚拟机可以准备启动了

安装

启动虚拟机,一定要手快进入 console,按 ESC 键进入 UEFI 固件选项

然后进入 Device Manager,选择 OVMF Platform Configuration,将 Change Preferred 改为 1920x1080,然后 F10 按 Y 保存,退出到主界面,按 Reset 重启,然后再进入 UEFI 固件,引导选择 Clover 启动

注意,以上步骤建议每重启就要重做一次,不然 Clover 引导会导致显示问题(好像也没找到其他方法来改善一下

然后就是 Clover 引导开机了,这里不多说了,建议开 verbose 模式,万一引导失败,好确定问题所在

成功引导开机以后,抹盘,安装,也不多说了

安装到一定进度,会自动重启,他会覆写掉下次引导,所以直接引导到 Clover 以后,5秒自动引导 filevault prebooter

然后又是漫长的安装过程,同样,这里安装到一定程度也会自动重启,还是自动引导到 filevault prebooter

引导到 filevault prebooter 后就算安装完成了,接下来就是第一次系统初始化配置,也不多说了。这一步安装完成后,就直接进入系统了

后续

总不能一直把 Clover 镜像挂在里面吧,因此我们可以直接开终端用 dd 来把 Clover 光盘镜像的 EFI 分区写到系统盘的 EFI 分区就可以了。完事以后,就可以在硬件配置界面把引导盘和安装盘都删了

同样,由于有了正常的环境,我直接把网卡切回正常的桥接网卡,配上静态 IP,又可以愉快的玩耍了

值得一提的是,由于没有独立显卡加速,vmware 兼容显卡显存只有 7 兆,因此体验极差,所以要是有 A 卡的话,可以考虑 KVM 直通进 mac 来增强使用体验

由于是远程服务器,打开设置-共享-屏幕共享即可开启自带的 VNC 服务,用 VNC 客户端连上就可以玩耍了

发表评论

发表评论

*

沙发空缺中,还不快抢~