装 Mac 虚拟机
最近想整理一下我的各种配置文件,需要撸一个 Mac 虚拟机做测试。于是打开上古神器 VirtualBox。
要装系统首先要有安装盘。进入 Mac App Store,找到最新版的 macOS,并猛击“Get”。这样会下载一个安装系统的 app。正常安装的话你只需要运行这个 app 就可以了,我们要装虚拟机显然是不可能让 UEFI 运行这个 app 的,所以需要想办法做出个安装盘来引导。和所有 Mac app 一样,这个安装 app 其实是个伪装的目录。进入这个目录,并且进入 Contents/SharedSupport,几个 DMG 文件映入眼帘。这里的 BaseSystem.dmg 就是安装时的临时系统,是可以引导的,但是真正安装的内容在 InstallESD.dmg 里,真正可用的镜像文件应该是这两个文件组合起来。这个 app 的 Contents/Resources 里其实提供了制作镜像的工具 createinstallmedia,可以直接用。
-
首先创建一个空的镜像并 mount,
hdiutil create -o install.dmg -size 8g -layout SPUD -fs HFS+J hdiutil attach install.dmg -noverify -mountpoint /Volumes/install
-
在镜像里写入安装盘,程序会自动重新 mount 写好的镜像,
sudo "/Applications/Install macOS Mojave/Contents/Resources/createinstallmedia" --volume /Volumes/install hdiutil detach "/Volumes/Install macOS Mojave" -
把写好的镜像文件转成 ISO。如果你在 macOS 里跑 VirtualBox 的话,是可以直接用 DMG 镜像的,原则上不需要这步,不过我没试过。
hdiutil convert install.dmg -format UDTO -o install.cdr mv install.{cdr,iso}
接下来就可以创建虚拟机了,macOS 好像不支持 USB 1 的设备,所以要先装 VirtualBox 的 host extension pack。新建一个虚拟机,VRAM 要拉到头 128MB。同时新建一坨硬盘镜像文件(注意 Mojave 是小于 22GB 不给装⋯⋯)。在 Ports → USB 那里选 USB 3.0 controller,其他应该默认就好。
众所周知,macOS 是没法装在随便一台 x86 机器上,它得看到是个 Mac 机器才给装。我大 Mac 自有国情在,我大 Mac 的软件是开放的,任何硬件只要遵守我大 Mac 的法律法规都可以装⋯⋯(并没有。)所以有些额外的设置需要做,我直接抄的这里,
vmname="macos"
resolution="1440x900"
# valid serial required for iCloud, iMessage. Structure: PPPYWWUUUMMM
# - Plant, Year, Week, Unique identifier, Model Whether the serial is
# valid depends on the device name and board, below:
serialnumber="NOTAVALIDSN0"
devicename="MacBookPro11,3" # personalize to match serial if desired
boardid="Mac-2BD1B31983FE1663"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "${devicename}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "${boardid}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1
VBoxManage setextradata "${vmname}" "VBoxInternal2/EfiGraphicsResolution" "${resolution}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "${serialnumber}"...剩余内容已隐藏
装 Mac 虚拟机
最近想整理一下我的各种配置文件,需要撸一个 Mac 虚拟机做测试。于是打开上古神器 VirtualBox。
要装系统首先要有安装盘。进入 Mac App Store,找到最新版的 macOS,并猛击“Get”。这样会下载一个安装系统的 app。正常安装的话你只需要运行这个 app 就可以了,我们要装虚拟机显然是不可能让 UEFI 运行这个 app 的,所以需要想办法做出个安装盘来引导。和所有 Mac app 一样,这个安装 app 其实是个伪装的目录。进入这个目录,并且进入 Contents/SharedSupport,几个 DMG 文件映入眼帘。这里的 BaseSystem.dmg 就是安装时的临时系统,是可以引导的,但是真正安装的内容在 InstallESD.dmg 里,真正可用的镜像文件应该是这两个文件组合起来。这个 app 的 Contents/Resources 里其实提供了制作镜像的工具 createinstallmedia,可以直接用。
-
首先创建一个空的镜像并 mount,
hdiutil create -o install.dmg -size 8g -layout SPUD -fs HFS+J hdiutil attach install.dmg -noverify -mountpoint /Volumes/install
-
在镜像里写入安装盘,程序会自动重新 mount 写好的镜像,
sudo "/Applications/Install macOS Mojave/Contents/Resources/createinstallmedia" --volume /Volumes/install hdiutil detach "/Volumes/Install macOS Mojave" -
把写好的镜像文件转成 ISO。如果你在 macOS 里跑 VirtualBox 的话,是可以直接用 DMG 镜像的,原则上不需要这步,不过我没试过。
hdiutil convert install.dmg -format UDTO -o install.cdr mv install.{cdr,iso}
接下来就可以创建虚拟机了,macOS 好像不支持 USB 1 的设备,所以要先装 VirtualBox 的 host extension pack。新建一个虚拟机,VRAM 要拉到头 128MB。同时新建一坨硬盘镜像文件(注意 Mojave 是小于 22GB 不给装⋯⋯)。在 Ports → USB 那里选 USB 3.0 controller,其他应该默认就好。
众所周知,macOS 是没法装在随便一台 x86 机器上,它得看到是个 Mac 机器才给装。我大 Mac 自有国情在,我大 Mac 的软件是开放的,任何硬件只要遵守我大 Mac 的法律法规都可以装⋯⋯(并没有。)所以有些额外的设置需要做,我直接抄的这里,
vmname="macos"
resolution="1440x900"
# valid serial required for iCloud, iMessage. Structure: PPPYWWUUUMMM
# - Plant, Year, Week, Unique identifier, Model Whether the serial is
# valid depends on the device name and board, below:
serialnumber="NOTAVALIDSN0"
devicename="MacBookPro11,3" # personalize to match serial if desired
boardid="Mac-2BD1B31983FE1663"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "${devicename}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "${boardid}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1
VBoxManage setextradata "${vmname}" "VBoxInternal2/EfiGraphicsResolution" "${resolution}"
VBoxManage setextradata "${vmname}" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "${serialnumber}"...剩余内容已隐藏