222 lines
11 KiB
Markdown
222 lines
11 KiB
Markdown
---
|
||
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 控制器直通给虚拟机。 |