Proxmox 7.2 に macOS Ventura をインストール
注: この記事は Installing macOS 13 Ventura on Proxmox 7.2 を和訳し、変更を加えたものです。
必要条件
- Proxmox 7.2 がインストール済み
- Proxmox をホストしているCPUがIntelの場合、 Haswell 以上新しい必要がある。
1. インストール IMG の作成
macOS (VM でもOK) もしくは Linux で操作する。
OSX-KVM リポジトリ をクローンし、 scripts/ventura
に移動する。
git clone https://github.com/thenickdude/OSX-KVM
cd OSX-KVM/scripts/ventura
macOS で操作している場合、 XCode ツールをインストールする。(すでにインストールしていた場合は必要ない)
xcode-select --install
Linux で操作している場合、 make と qemu-utils をインストールする。
sudo apt install make qemu-utils
# full
make Ventura-full.img
# recovery
make Ventura-recovery.img
正常に終了したら、そのディレクトリにできたVentura-full.img
(もしくは Ventura-recovery.img
) をProxmoxにアップロードする。
2. OpenCore の準備
OpenCore リリース から OpenCore をダウンロードする。(v18 以上が必要)
これは .gz
が解凍できるPCであれば何でやってもよい。
解凍したら、OpenCore-v〇〇.iso
をProxmoxにアップロードする。
3. OSK Auth Key の取得
macOS で操作。
以下のCコードを smc_read.c
という名前で保存する。[1]
/*
* 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 でコンパイルして実行する。
xcode-select --install # まだやってない場合
gcc -o smc_read smc_read.c -framework IOKit
./smc_read
64 文字のキーが出てくる。
4. VM の作成
コマンドを使う場合
あなたが楽をしたい場合、こちらを使うほうが良い。
Proxmoxのシェルにこのコマンドを入力し、実行する。
その時、置き換えるべき場所を置き換えること!
qm create <VMID> --name <VMの名前> --ide2 <OpenCore ISOの保存ディスクID>:iso/OpenCore-v<OpenCore バージョン>.iso,cache=unsafe,size=150M --ostype other --vga vmware --machine q35 --bios ovmf --scsihw virtio-scsi-pci --agent 1 --efidisk0 <EFIディスクを置きたい場所>:1,efitype=4m,pre-enrolled-keys=0 --sockets 1 --cores <コア数(2のべき乗)> --numa 0 --cpu Haswell --memory <メモリ(4096 以上)> --virtio0 <ディスクを置きたい場所>:<ディスクの容量(64 以上)>,discard=on,cache=unsafe --balloon 0 --net0 virtio,bridge=vmbr0,firewall=1 --ide0 <img の場所>:iso/Ventura-<full or recovery>.img,cache=unsafe,size=<recovery の場合:2481216K fullの場合:14G> --tablet 1 --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 Haswell,vendor=GenuineIntel,+kvm_pv_eoi,+kvm_pv_unhalt,+hypervisor,+invtsc,kvm=on' --boot order=ide2
例えば: 自分の場合こうなった。
qm create 500 --name ventura --ide2 hdd:iso/OpenCore-v18.iso,cache=unsafe,size=150M --ostype other --vga vmware --machine q35 --bios ovmf --scsihw virtio-scsi-pci --agent 1 --efidisk0 ssd:1,efitype=4m,pre-enrolled-keys=0 --sockets 1 --cores 4 --numa 0 --cpu Haswell --memory 4096 --virtio0 ssd:64,discard=on,cache=unsafe --balloon 0 --net0 virtio,bridge=vmbr0,firewall=1 --ide0 hdd:iso/Ventura-full.img,cache=unsafe,size=14G --tablet 1 --args '-device isa-applesmc,osk="SAMPLEOSKaaaaaaSAMPLEOSKaaaaaaSAMPLEOSKaaaaaaSAMPLEOSKaaaaaa" -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 Haswell,vendor=GenuineIntel,+kvm_pv_eoi,+kvm_pv_unhalt,+hypervisor,+invtsc,kvm=on' --boot order=ide2
エラーっぽい物が出てない場合成功。「Proxmoxの構成」に進む。
手動で作成する
VM IDとVMの名前を入力して、次へ
OpenCore-v○○.iso
を選ぶ。OSの種類をOtherにする (ごめんなさい、画像の選択ファイル間違えてます。Venturaのimgではなく、OpenCoreです!)
グラフィックカードを VMware 互換
にする。 マシンを q35
にする。 BIOSを OVMF(UEFI)
にして、EFIディスクを選ぶ。 Pre-Enrolled keys
のチェックを外す。 Qemuエージェント
にチェックを付ける
パス/デバイス をVirtIO Block
にする。ストレージを選んで、サイズを64GB以上にする。 キャッシュをWrite back (unsafe)
にする。中止のチェックを付ける。
コア数を2のべき乗にする。種別を Haswell
にする。
メモリを4GB以上にする。Ballooning Device
のチェックを外す。
モデルを VirtIO (準仮想化)
にする。
作成後に起動のチェックをつけない。
作成後、オプションにて「ポインタ用にタブレットを使う」がオンになっていることを確認する。
ハードウェアオプションで、先程アップロードした Ventura の img ファイル(fullもしくはrecovery)を追加する。
まだ VM をスタートせず、Proxmox に SSH するかシェルに接続する。
好きなテキストエディタを使用して、/etc/pve/qemu-server/<VMID>.conf
を編集する。(筆者は vim
を使った)
vim /etc/pve/qemu-server/600.conf # 筆者の場合
最初の行に、次の行を追加する。このとき、<OSK>
を先ほどメモしたOSKに置き換える。(すべて1行であることを確認)
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 Haswell,vendor=GenuineIntel,+kvm_pv_eoi,+kvm_pv_unhalt,+hypervisor,+invtsc,kvm=on
次に、ISO と IMG の場所 (ide2
とide0
)を見つけて、ここの,media=cdrom
を,cache=unsafe
に置き換える。
- ide0: hdd:iso/Ventura-full.img,media=cdrom,size=14G
+ ide0: hdd:iso/Ventura-full.img,cache=unsafe,size=14G
- ide2: hdd:iso/OpenCore-v18.iso,media=cdrom,size=150M
+ ide2: hdd:iso/OpenCore-v18.iso,cache=unsafe,size=150M
ここで保存してエディタを終了し、VM のオプションタブに行き、「ブート順」をide2
にする。
お疲れさまでした。これで VM の設定は終わりです。
5. Proxmox の構成
Proxmox のシェルで次を実行することで、macOS のブートループを回避できるようになる。
echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf && update-initramfs -k all -u
6. Ventura のインストール
いよいよ、VM を起動する。
VM を起動すると、このような画面になる。(full の場合)
Install macOS Ventura
(recovery の場合macOS Base System
)をキーボードで選択して、進む。
進むと、りんごマークがしばらく出たあと、次のような画面になる。
この画面ではマウスが反応する
Disk Utility
を選んでContinue
を押す。
①Apple Inc. VirtIO Block Media
を選んで、②Eraseを押す。
Name
にすきな名前を入れて(自分はmain
にした)、Format
をAPFS
にして(デフォルト)、Scheme
をGUID Partition Map
にする(デフォルト)。そしてErase
を押して初期化する
完了したら、Disk Utilityを閉じて、Install macOS Ventura
を選択し、Continue
を押す。。
Continue
を押す
Agree
を押したあとAgree
を押す。
先程初期化したディスクを選んで、Continue
を押す。
インストールが終わるまで待つ。
インストールが終わると、自動的に再起動される。
再起動されたら、手動で「macOS Installer
」を選ぶ。この操作を自動的に再起動されたあと「macOS Installer
」がメニューから消えるまで繰り返す。
macOS Installer
が消えたら、おそらくさっき初期化したときに決めたディスク名が出ているはずなので、これもさっきと同じように macOS が起動するまで選び続ける。
おそらく二回ほど選ぶと、ついにmacOSが起動した!!
7. macOS の初期設定
初期設定の作業
Japan を選択
Customize Settings
を選択
Japanese を選択
U.S. を削除
Japanese を追加し English(United States)
を削除
Not Now
Continue
Not Now
Set Up Later
Agree → Agree
Full name, Account name, Password を決める
位置情報サービスを有効にするか選ぶ
クラッシュレポートなどを Apple に送信するか選ぶ
Screen Time を有効にするかどうか
ダーク/ライトテーマを選ぶ
初期設定を終わらせると、ようやく macOS のデスクトップが出てくる。
設定を終わらせた直後は、次のようなウィンドウが出てくる。Continue
を押す。
Shift(左) の右にあるキー (=多くの場合 Z キー) を押したあとに、Shift(右)の左にあるキー (=多くの場合 アンダーバーキー) を押す。反応しない場合スラッシュキーを押す。
その後、JIS
を選ぶ
8. その他各種設定
日本語化
System Settings (Dock から開く) → General → Language & Region
Preferred Languages から English を削除する。
そのあと、macOS を再起動する。
OpenCore をハードディスクに移植する
macOS の中のターミナルを開き、コマンドを実行する。
diskutil list
このように出てくるので、
OpenCoreのEFIと、VirtIOディスクのEFIを特定する。
OpenCoreのディスクは、
- サイズが150MB程度
- 2つしかない
という特徴がある。(つまり、この場合私の OpenCore EFI はdisk1s1
)
VirtIOディスクは、
- サイズが64GB以上
-
internal
なディスク -
Apple_APFS
というパーティションがある
という特徴がある。(つまり、この場合私の VirtIO EFI はdisk0s1
)
これを、dd
コマンドでコピーする。
sudo dd if=/dev/disk○s1 of=/dev/disk○s1
# 自分の場合
sudo dd if=/dev/disk1s1 of=/dev/disk0s1
できたら、一旦 macOS をシャットダウン(システム終了)し、ide0
とide2
をデタッチする。
そして、VM の「オプション」タブからブート順を変更する。
virtio0
をアクティブにする
起動して、「main (自分で決めた名前)」のみになっていれば成功。
OpenCore メニューの自動選択
今のままだと、起動するたびに手動で Enter/Return キーを押してディスクを選択しないといけないので、数秒後に自動で選択されるよう変更する。
.plist
ファイルを開くために、 ProperTree をダウンロードする。
右上の <> Code
からZIPファイルをダウンロードし、展開する。
ProperTree.command
をダブルクリック
この時点では失敗するが、
設定から強制的に実行してやる。
このようになるので、yを入力してEnter/Return
このような画面が出てくる
ターミナルを開いて、
diskutil list
で、APPLE_APFS
が存在しているディスクの、EFI ディスクを見つける。
筆者の場合、disk0s1
これを、マウントする。
sudo diskutil mount /dev/disk○s1
# 自分の場合: sudo diskutil mount /dev/disk0s1
正常にマウントできるとこうなる
Finder に、EFI
が存在することが確認できる
マウントできたら、ProperTree でEFI/OC/config.plist
を開く。
開けたら、Misc/Boot/Timeout
を探す。
このTimeout
の値が、OpenCore が起動してから自動的にメニューが選択されるまでの時間である。0
だと無効になっている。
5
あたりに変更する。
編集したら、⌘+C(Windowsキー+C)で保存し、ProperTreeを閉じる。
そして、EFI をアンマウントする。
sudo diskutil unmount /dev/disk○s1
Discussion
大変参考になりました!
いくつか確認させてください!
1:
/etc/pve/qemu-server/<VMID>.conf の ide2編集後の
cacge=unsafe
はタイポであってますか?2:
「手動で作成する」で、"ハードウェアオプションで、先程アップロードした Ventura の img ファイル(fullもしくはrecovery)を追加する。" とありますがブート順変更から推測するに "OpenCore-v18.iso" を追加であると読み替えても大丈夫ですか?