所需环境:

  • Proxmox VE
  • 一台正常运行的MAC或者Linux(可以是虚拟机,建议使用MAC来完成打包任务)
  • Git

创建安装镜像

暂未尝试直接使用网上流传的黑苹果镜像,在pve中暂时仅支持ISO、IMG格式的镜像文件。

建议直接在mac实体机或者虚拟机中完成下面的操作,因为在linux环境下打包的镜像并不是完整的镜像,它只是一个recovery镜像,在安装的过程中再下载完成的镜像,这种情况下对网络有一定的要求。


安装构建工具并打包镜像

  • For Mac端:
xcode-select --install 
git clone https://github.com/thenickdude/OSX-KVM.git
cd OSX-KVM/scripts/ventura
make Ventura-full.img
  • For Linux端:
apt install qemu-utils make qemu-block-extra -y
git clone https://github.com/thenickdude/OSX-KVM.git
cd OSX-KVM/scripts/ventura
make Ventura-recovery.img

下载OpenCore镜像

前往github的releases页下载打包好的镜像文件

image.png

然后将下载完成的压缩包解压。

将镜像上传到PVE

可以直接在web中上传,或者使用scp上传到pve服务器的/var/lib/vz/template/iso路径下。

image.png

获取OSK

MacOS会检测它是否在真正的MAC官方硬件上运行,OSK则是它用于判断的主要依据,不过OSK在同一版本上是一致的,因此可以在一台mac机器上执行osk读取操作,然后使用获取到的osk来绕过认证。

以下操作仅能在mac系统中操作!!!

  • 创建名为smc_read.c的C源文件
/*
 * smc_read.c: Written for Mac OS X 10.5. Compile as follows:
 *
 * gcc -Wall -o smc_read smc_read.c -framework IOKit
 */

#include <stdio.h>
#include <IOKit/IOKitLib.h>

typedef struct {
    uint32_t key;
    uint8_t  __d0[22];
    uint32_t datasize;
    uint8_t  __d1[10];
    uint8_t  cmd;
    uint32_t __d2;
    uint8_t  data[32];
} AppleSMCBuffer_t;

int
main(void)
{
    io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault,
                               IOServiceMatching("AppleSMC"));
    if (!service)
        return -1;

    io_connect_t port = (io_connect_t)0;
    kern_return_t kr = IOServiceOpen(service, mach_task_self(), 0, &port);
    IOObjectRelease(service);
    if (kr != kIOReturnSuccess)
        return kr;

    AppleSMCBuffer_t inputStruct = { 'OSK0', {0}, 32, {0}, 5, }, outputStruct;
    size_t outputStructCnt = sizeof(outputStruct);

    kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2,
             (const void*)&inputStruct, sizeof(inputStruct),
             (void*)&outputStruct, &outputStructCnt);
    if (kr != kIOReturnSuccess)
        return kr;

    int i = 0;
    for (i = 0; i < 32; i++)
        printf("%c", outputStruct.data[i]);

    inputStruct.key = 'OSK1';
    kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2,
             (const void*)&inputStruct, sizeof(inputStruct),
             (void*)&outputStruct, &outputStructCnt);
    if (kr == kIOReturnSuccess)
        for (i = 0; i < 32; i++)
            printf("%c", outputStruct.data[i]);

    printf("\n");

    return IOServiceClose(port);
}

然后在同目录终端中执行下面的指令:

gcc -o smc_read smc_read.c -framework IOKit
./smc_read

我得到的OSK:ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc


PVE中新建虚拟机

创建虚拟机

按照下图的顺序操作。

image.png

记住图中的VM ID。

image.png

选择刚刚下载并上传的OpenCore镜像并将操作系统设置为其他

image.png

为了避免遇到奇奇怪怪的问题,建议严格按照图中设置参数来。

image.png

除了存储位置以及磁盘大小外,请保持一致。磁盘空间看着给,别小于64G。

image.png

cpu数量看着给,但是注意得是2的n次方(如2,4,8,16....)CPU类型选择Haswell,启用NUMA。

image.png

内存也是根据自己需求设置

image.png

网卡模型使用半虚拟化。

image.png

创建完成后先不急着启动,需要做一些其他的配置。

image.png

首先找到选项,确保开启了使用平板指针。然后设置OpenCore为第一启动项。

image.png

接着到硬件中添加第二块DVD。

image.png

选择我们前面打包的镜像。

修改配置文件

接下来再对虚拟机的配置文件做一些修改。

  • 连接pve的shell(可通过ssh或者web)

这里直接使用web版的shell。

image.png

  • 修改配置文件
cd /etc/pve/qemu-server/
nano 116.conf   ##[VM ID].conf

在第一行添加启动参数:

#For Intel CPU
args: -device isa-applesmc,osk="这里填写 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,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc
#For AMD CPU
args: -device isa-applesmc,osk="这里填写 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 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

找到挂载镜像的那两行,并替换media=cdromcache=unsafe.

image.png

设置Proxmox

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

安装MacOS 13

完成上面所有操作后开始启动虚拟机进行安装。

image.png

在这里按下回车键进入安装前界面。

image.png

进入磁盘工具,找到添加的磁盘,然后格式化磁盘。

image.png

image.png

image.png

然后回到上一级目录,选择安装macos。

image.png

选择安装到刚刚格式化的磁盘

image.png

image.png

等待安装进行,中途会重启几次,需要手动引导到安装进程。

image.png

使用键盘选择第二个,然后回车继续安装,直到安装完成。

image.png

另外,在初始化的时候不建议登陆apple id。如果需要登录apple ID的话请先移步到这里配置一个序列号之后再登陆。

将OpenCore安装到硬盘

首先打开终端,使用diskutil列出所有分区

diskutil list

image.png

将opencore复制到硬盘

sudo dd if=[OpenCore EFI分区] of=[磁盘EFI分区]

image.png

然后关机并移除两个dvd驱动。

image.png

设置开机自动进入系统

sudo mkdir /Volumes/EFI 
sudo mount -t msdos /dev/disk0s1 /Volumes/EFI

首先挂载EFI,然后编辑config.plist

image.png

cd /Volumes/EFI/EFI/OC
sudo vim config.plist

将MISC->Boot->Timeout改成任意非0数字。

image.png

至此大功告成

最后修改:2023 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏