blog/source/_posts/Installing-macOS-High-Sierra-Mojave-on-Proxmox-5-4.md

222 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 在 Proxmox 5.4 上安装 macOS High Sierra/Mojave
date: 2019-05-29 15:17:17
tags:
---
{% blockquote 翻译自 Nicholas Sherlock https://www.nicksherlock.com/2018/06/installing-macos-mojave-on-proxmox/ Installing macOS Mojave 10.14 on Proxmox 5.4 %}
{% endblockquote %}
{% blockquote %}
以下教程以 Mojave 为例,实际上安装 High Sierra 与其类似。
{% endblockquote %}
这篇安装 macOS Mojave 的教程改编自 {% link Kholia 的 OSX-KVM 项目 https://github.com/kholia/OSX-KVM %}。那里有更详细的文档可以帮助我们启用一些额外功能并诊断问题。
<!-- more -->
# 必要条件 #
假设你已经安装好了 {% link Proxmox 5.4 https://www.proxmox.com/en/ %}。同时你也需要 Mac 系统用来从 App Store 下载 Mojave 并制作 ISO。
Proxmox 主机 CPU 必须支持 SSE 4.2,所以对于 Intel 来说CPU 必须至少是 Nehalem 架构,即第一代 Core i5/i7更老的 CPU 将会导致安装完成后 Finder 重复崩溃(图形代码中存在非法指令集)。
显然,现代 AMD CPU 也支持 SSE 4.2同时可以不做任何修改的利用这个教程来安装Bulldozer 应该可以,当然还有 Ryzen但是我自己并没有测试过。
# 第一步:创建安装 ISO #
跟随{% link 这个文档 https://github.com/kholia/OSX-KVM/blob/master/README.md %}中的步骤获取 macOS 安装程序。
```
./fetch-macOS.py
```
选择你期望下载的版本。执行完成后,当前目录应该会出现一个名为 BaseSystem.dmg 的文件。
注意:现代 NVIDIA GPU 仅支持 HighSierra目前还未支持 Mojave。
挂载它,复制其中的 `Install macOS Mojave.app``/Applications`,然后弹出。
接下来,利用安装程序创建 ISO。
```
set -e
cd ~/Desktop
hdiutil create -o Mojave.iso -size 6g -layout SPUD -fs HFS+J
hdiutil attach Mojave.iso.dmg -noverify -mountpoint /Volumes/install_build
sudo "/Applications/Install macOS Mojave.app/Contents/Resources/createinstallmedia" --volume /Volumes/install_build --nointeraction
hdiutil detach "/Volumes/Install macOS Mojave"
hdiutil convert Mojave.iso.dmg -format UDTO -o Mojave.iso
mv Mojave.iso.cdr Mojave.iso
rm Mojave.iso.dmg
```
ISO 将保存到桌面,将其上传到 Proxmox 服务器中的 ISO 存储文件夹(通常是 `/var/lib/vz/template/iso`)。
# 准备一个 Clover 镜像 #
我们将使用 Clover 作为 Mojave 的启动器。
下载 {% link 这个 Clover 磁盘镜像 https://s3.amazonaws.com/s3.nicksherlock.com/forumposts/2018/clover-r4674-amd64.iso.zip %}(用 {% link kholia 的编译脚本 https://github.com/thenickdude/OSX-KVM/blob/master/Mojave/clover-image.sh %} 从 {% link Clover r4674 https://sourceforge.net/projects/cloverefiboot/files/Bootable_ISO/ %} 制得),解压并上传至 Proxmox 的 ISO 存储文件夹 `/var/lib/vz/template/iso`。尽管扩展名是 .iso但这其实是一个硬盘镜像。之所以用这种方式是因为 Proxmox 提供了很好的工具来存储和选择 .iso 文件)
# 获取 OSK 认证 key #
macOS 会检查是否运行在真实 Mac 硬件上,在第三方硬件上会拒绝启动。你可以读取真实 Mac 硬件的认证 key OSK key来绕过这个限制。编译运行{% link 这个页面的第一段代码 http://www.osxbook.com/book/bonus/chapter7/tpmdrmmyth/ %}(需要安装 XCode会输出 64 字符的 OSK记下它。
```
gcc -Wall -o smc_read smc_read.c -framework IOKit
./smc_read
```
每台 Mac 都使用相同的 OSK所以不必惊讶它看起来不像随机字符串。
# 创建虚拟机 #
通过 Proxmox web UI按照以下步骤创建虚拟机。
名称随意,记下虚拟机 ID。
{% asset_img 01-create-vm.png 创建虚拟机 %}
选择上传的 Clover ISO系统类型选择 `Other`
{% asset_img 02-os.png 选择 OS %}
设置显卡为 `标准 VGA`SCSI 控制器为 `默认 (LSI 53C895A)`BIOS 为 `OVMF (UEFI)`,机器类型为 `q35`,添加 EFI 磁盘。
{% asset_img 03-system.png 设置系统 %}
设置磁盘大小,总线设为 `IDE`(注意选择为 SATA 时,安装完系统后主硬盘会显示成 External注意格式设置为 `QEMU映像格式 (qcow2)` 的话会降低部分性能,但支持快照等功能,缓存改为 `Write back (不安全)`
{% asset_img 04-harddisk.png 设置磁盘 %}
设置虚拟机核心数(注意有些核心数可能会导致问题,优先选择 4可以尝试 2、4、2*4 等等),设置类别为 `Penryn`
{% asset_img 05-cpu.png 设置 CPU %}
推荐设置 4G 以上的内存,**禁用 Ballooning 设备**,因为在 macOS 下没有驱动。
{% asset_img 06-memory.png 设置内存 %}
网络模型保持为默认的 `Intel E1000`
{% asset_img 07-network.png 设置网络 %}
最后确认参数,没有问题的话点击完成。
{% asset_img 08-confirm.png 确认参数 %}
切换到 **选项** 页面,确保 **使用平板指针**`是`
切换到 **硬件** 页面,添加 **CD/DVD 驱动器** 到总线 `SATA0`(如果主硬盘设置到了 SATA0这里则选择 IDE0选择 Mojave 安装镜像。
{% asset_img 09-add-dvd.png 添加 CD/DVD %}
此时先不要急于启动虚拟机SSH 到 Proxmox 服务器,还需要对虚拟机配置文件做些修改。
用 nano/vim 编辑 `/etc/pve/qemu-server/虚拟机-ID.conf`,加入这一行(用获取到的 OSK 替换相应位置)。
```
args: -device isa-applesmc,osk="THE-OSK-YOU-EXTRACTED-GOES-HERE" -smbios type=2 -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -device usb-kbd,bus=ehci.0,port=2
```
告诉 macOS 当前 CPU 是 Penryn否则的话似乎不会启动但是要用所有在 Nehalem 中发现的新的 CPU 特性,对 macOS 来说这是必须的另外加上了一些后代的可选功能AVX/AES
找到定义 Clover ISO 的那一行ide2`cache=unsafe` 替换 `media=cdrom`
在 net0 那一行,修改 `e1000``e1000-82545em`,该型号受到 macOS 支持。
保存文件,返回到 **选项** 页面,修改 **引导顺序 1**`IDE2`Clover 镜像)。最终配置文件应该类似如下:
```
args: -device isa-applesmc,osk="..." -smbios type=2 -cpu Penryn,kvm=on,vendor=GenuineIntel,+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: ide2
cores: 4
cpu: Penryn
efidisk0: storage:107/vm-107-disk-1.raw,size=128K
ide0: storage:107/vm-107-disk-0.raw,cache=unsafe,size=64G
ide2: local:iso/clover-r4674-amd64.iso,cache=unsafe
machine: q35
memory: 4096
name: macOS
net0: e1000-82545em=AA:CC:73:10:6D:46,bridge=vmbr0,firewall=1
numa: 0
ostype: other
sata0: storage:iso/macOS Mojave 10.14.5 18F132.iso,media=cdrom,size=8G
smbios1: uuid=43512f43-482d-4d30-af12-ad215ac2f7a8
sockets: 1
vga: std
vmgenid: 6575b484-9233-4ee4-afeb-9131e8cf7250
```
# 设置 Proxmox #
SSH 进入 Proxmox 服务器,执行 `echo 1 > /sys/module/kvm/parameters/ignore_msrs` 来避免 macOS 启动循环。若要使该设置在 Proxmox 启动时仍然生效,则执行:
```
echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf
update-initramfs -k all -u
```
另外还需要安装一个修补过的 Proxmox OVMF 库从而可以启动 Mojave。
下载 {% link pve-edk2-firmware_1.20190312-1_all.deb https://github.com/thenickdude/pve-edk2-firmware/releases/download/1.20190312-1-macos/pve-edk2-firmware_1.20190312-1_all.deb %},上传至 Proxmox 服务器任意位置,并执行下列命令安装:
```
dpkg -i pve-edk2-firmware_1.20190312-1_all.deb
# 阻止将来被 apt upgrade 替换
apt-mark hold pve-edk2-firmware
```
# 安装 Mojave #
现在,启动虚拟机。
切换到 **控制台** 页面,在出现 Proxmox logo 时快速按下 `Escape` 或者 `F2` 进入 OVMF 设置界面。如果键盘没反应,关闭控制台,停止虚拟机,再启动虚拟机重新进入控制台。如果按下 `Escape` 依然无法进入设置界面的话,请确保虚拟机硬件设置中机器类型为 `q35`
依次选择 **Select Device Manager** - **Select OVMF platform configuration** - **Change Preferred** 修改为 `1024x768`**Commit Changes and Exit** - **Reset**(不要选择 Continue
为了避免启动时花屏或者挂起这个步骤是必须的Clover 分辨率必须匹配 OVMF 分辨率)。
{% blockquote %}
请注意,之后你可能会发现首次启动虚拟机时分辨率并未应用到 1024x768直到你在 Clover 菜单中选择重启(或者重置虚拟机)。当 Proxmox logo 由于分辨率过低而填满大部分屏幕时会注意到这种情况。(*注:该句意思不明确*
{% endblockquote %}
现在应该正常启动进入了 Clover。
{% asset_img 10-clover.png Clover %}
回车启动安装程序,选择语言。
{% asset_img 11-install.png 安装 %}
选择 **Disk Utility**,选中主硬盘,点 **Erase**,输入卷标,分区格式选择 `APFS`。**Encrypted** 似乎目前无法使用Clover 还需要一些特殊驱动来支持它。
{% asset_img 12-install-disk.png 抹盘 %}
退回主菜单,选择 **Install macOS**,按照步骤开始安装。
{% asset_img 13-install-start.png 开始安装 %}
第一步安装之后,虚拟机会自动重启,进入 Preboot然后再一次重启进入 Filevault Prebooter。PS主要耗时在第二阶段
至此,安装完成。
# 把 Clover 安装至主硬盘 #
目前虚拟机是用 Clover CD 启动,我们可以把 Clover 安装到主硬盘上。打开终端,运行 `diskutil list` 来看看有哪些可用驱动器。
{% asset_img 14-bash.png diskutil list %}
使用 `sudo dd if=<source> of=<dest>` 来从 Clover CD 拷贝 EFI 分区覆盖到主硬盘的 EFI 分区。上图中 Clover CD 是那个较小的带有 Linux Filesystem 分区的磁盘,主硬盘是大容量并包含 Apple_APFS 容器分区的那个。
我这里这两个分区分别是 `disk1s1``disk0s1`,所以执行 `sudo dd if=/dev/disk1s1 of=/dev/disk0s1`**注意:如果你打错了分区,将会擦除错误的磁盘,需要再次安装**)。
现在关闭虚拟机,从 **硬件** 选项卡 **分离 Clover****移除 Mojave 光驱**。切换到 **选项** 页面,修改引导顺序为 `IDE0`。如果一切顺利,你将会看到如下画面,然后选择 **Boot macOS from macOS** 启动系统。
{% asset_img 15-done.png 完成 %}
# 睡眠管理 #
我发现无法通过鼠标或者键盘唤醒睡眠状态的 Mojave你可以选择从节能设置中禁用睡眠来避免这一问题或者可以在 **监视器** 页面中执行 `system_wakeup` 手动唤醒虚拟机。
# USB 直通 #
Proxmox 有{% link 一篇 USB 直通的详细的文档 https://pve.proxmox.com/wiki/USB_Devices_in_Virtual_Machines %}。
概括而言,在 **监视器** 选项卡中输入 `info usbhost` 来获取连接到 Proxmox 的 USB 设备:
```
# info usbhost
Bus 1, Addr 3, Port 3, Speed 12 Mb/s
Class 00: USB device 24ae:1813, Rapoo 2.4G Wireless Device
Bus 1, Addr 4, Port 1, Speed 12 Mb/s
Class ef: USB device 05ac:8290, Bluetooth USB Host Controller
```
然后 SSH 到 Proxmox 服务器,执行以下代码来直通想要的 USB 设备。
```
qm set YOUR-VM-ID-HERE -usb1 host=24ae:1813
qm set YOUR-VM-ID-HERE -usb2 host=...
```
重启虚拟机即可应用。
或者也可以利用 Proxmox 的 PCIe 直通功能把整个 USB 控制器直通给虚拟机。