Proxmox VE 安装 macOS 13 Ventura 虚拟机

yaoyue 最后更新于 20 小时前 3 次阅读 1517 字


AI 摘要

如何在Proxmox VE中安装macOS 13 Ventura?本文详解黑苹果虚拟机配置、OSK获取与OpenCore设置,助你轻松实现!

所需环境:

  • 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服务器的<code>/var/lib/vz/template/iso</code>路径下。

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 &lt;stdio.h&gt;
#include &lt;IOKit/IOKitLib.h&gt;

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(&quot;AppleSMC&quot;));
    if (!service)
        return -1;

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

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

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

    int i = 0;
    for (i = 0; i &lt; 32; i++)
        printf(&quot;%c&quot;, outputStruct.data[i]);

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

    printf(&quot;\n&quot;);

    return IOServiceClose(port);
}

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

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

我得到的OSK:<code>ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc</code>


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=&quot;这里填写 OSK&quot; -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=&quot;这里填写 OSK&quot; -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

找到挂载镜像的那两行,并替换<code>media=cdrom</code>为<code>cache=unsafe</code>.

image.png

设置Proxmox

echo &quot;options kvm ignore_msrs=Y&quot; &gt;&gt; /etc/modprobe.d/kvm.conf &amp;&amp; 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列出所有分区

<code>diskutil list</code>

image.png

将opencore复制到硬盘

<code>sudo dd if=[OpenCore EFI分区] of=[磁盘EFI分区]</code>

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

至此大功告成