Ubuntu 24.04 DesktopでMacOSを動作させます。以下のGitHubのページを参考にします。
用意したPCのスペックを確認しておきます。ページによるとIntel VT-x / AMD SVMをサポートするCPUが必要とのことです。GUI操作にて確認するとプロセッサが以下のように表示されたので、VT-x技術をサポートしています。ですので、このCPUはVT-xの要件を満たしています。VT-xは、Intelの仮想化技術で、仮想マシンをより効率的に動作させるために必要です。
Intel Core i7-7700HQ × 8

また、コマンドによる操作ではGitHubのページにあるように以下を入力します。
grep -e vmx -e svm /proc/cpuinfo
出力に「vmx」が含まれていれば、Intel VT-xが有効であることを示しています。AMDの場合は「svm」が表示されます。

もし出力に「vmx」や「svm」が含まれていない場合、以下の点を確認します。
- BIOS/UEFI設定を確認: 仮想化機能はBIOS/UEFI設定で無効になっている可能性があります。PCのBIOS/UEFI設定に入り、仮想化技術 (Intel VT-xやAMD SVM) が有効になっていることを確認します。
- 再起動: BIOS/UEFI設定を変更した後はPCを再起動します。
次にQEMU(Quick EMUlator)をインストールします。
Intel VT-xやAMD SVMが有効になっている場合、QEMUのような仮想化ソフトウェアの性能が大幅に向上します。これらのハードウェア仮想化技術をサポートすることで、QEMUは以下のような利点を享受できます。
- パフォーマンスの向上: ハードウェア仮想化により、仮想マシンの処理がより高速になります。これにより、仮想マシン上で実行されるアプリケーションのパフォーマンスが向上します。
- オーバーヘッドの削減: ソフトウェアによる仮想化(ハイパーバイザ)よりも、ハードウェア仮想化はオーバーヘッドが少なくなります。これにより、リソースの使用効率が改善されます。
- より多くの機能: VT-xやSVMを使用することで、QEMUはNested Virtualization(ネスト仮想化)や、Enhanced Security Features(強化されたセキュリティ機能)など、追加の機能を提供できます。
sudo apt install qemu
しかし、次のエラーが発生しました。
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
パッケージ qemu は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
E: パッケージ ‘qemu’ にはインストール候補がありません
どうやら次のコマンドが正解のようです。
sudo apt install qemu-system
また、以下のパッケージが必要であると記述してあります。apt-get
を使用してパッケージをインストールする際、既にインストールされているパッケージは再インストールされません。新しくインストールされるのは、システムにまだ存在しないパッケージだけです。
sudo apt-get install uml-utilities virt-manager git \
wget libguestfs-tools p7zip-full make dmg2img tesseract-ocr \
tesseract-ocr-eng genisoimage vim net-tools screen -y
GitHubのページと同じですが次のコマンドも一度に入力します。
cd ~
git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git
cd OSX-KVM
詳細な説明
- ホームディレクトリに移動:
cd ~
- これは、現在のディレクトリをユーザーのホームディレクトリに変更します。
- リポジトリをクローン:
git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git
git clone
は、指定されたリポジトリをクローンするためのコマンドです。--depth 1
オプションは、リポジトリの浅いクローンを作成し、最新のコミットのみを取得します。--recursive
オプションは、リポジトリ内のすべてのサブモジュールもクローンすることを指定します。
- クローンしたディレクトリに移動:
cd OSX-KVM
- これは、クローンした
OSX-KVM
ディレクトリに移動します。
- これは、クローンした
これらのコマンドを実行すると、リポジトリがクローンされ、そのディレクトリに移動することができます。次に必要な設定やインストール作業を続ける準備が整います。
次のコマンドもQEMUに関連するコマンドです。
sudo modprobe kvm; echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
sudo modprobe kvm
:- このコマンドは、
kvm
(Kernel-based Virtual Machine)モジュールをカーネルにロードします。 modprobe
は、指定されたモジュールをカーネルに動的にロードするためのコマンドです。sudo
は、管理者権限でコマンドを実行するために使用します。
- このコマンドは、
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
:echo 1
は、標準出力に1
を出力します。|
は、パイプラインを意味し、echo
の出力を次のコマンドに渡します。sudo tee /sys/module/kvm/parameters/ignore_msrs
は、1
を/sys/module/kvm/parameters/ignore_msrs
ファイルに書き込みます。tee
コマンドは、標準入力を読み取り、標準出力とファイルに書き込みます。この場合、ignore_msrs
パラメータを1
に設定します。
コマンドの目的
sudo modprobe kvm
:- KVMモジュールをカーネルにロードすることで、KVMが有効化され、QEMUがKVMを使用して仮想マシンを実行できるようになります。
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
:ignore_msrs
は、未定義のモデル固有レジスタ(MSRs)へのアクセスを無視するようにKVMに指示します。これにより、一部のゲストOSやアプリケーションが期待通りに動作することを保証します。例えば、macOSをQEMU/KVMで動作させる際に、この設定が必要になることがあります。
自分のPCはIntelがプロセッサでしたので以下のコマンドを入力します。プロジェクト内のファイルを自分のPCにコピーしています。
sudo cp kvm.conf /etc/modprobe.d/kvm.conf
kvm.confファイルの内容を見ると以下のようになっています。
options kvm_intel nested=1
options kvm_intel emulate_invalid_guest_state=0
options kvm ignore_msrs=1 report_ignored_msrs=0
options kvm_intel nested=1
:
- IntelのKVMモジュールに対してネスト仮想化を有効にします。ネスト仮想化を使うと、仮想マシン内でさらに仮想マシンを動かすことができます。
options kvm_intel emulate_invalid_guest_state=0
:
- 無効なゲストステートのエミュレーションを無効にします。これは、パフォーマンスの向上や特定のゲストOSの動作の安定化に役立ちます。
options kvm ignore_msrs=1 report_ignored_msrs=0
:
- 未定義のモデル固有レジスタ(MSRs)へのアクセスを無視する設定です。また、無視したMSRsのアクセスを報告しないようにします。これにより、一部のゲストOSやアプリケーションが期待通りに動作することが保証されます。
そして次のコマンドは、現在のユーザーを特定のグループに追加するためのものです。
sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG input $(whoami)
sudo usermod -aG kvm $(whoami)
:
usermod
コマンドは、ユーザーアカウントの変更を行うためのコマンドです。-aG
オプションは、ユーザーを追加のグループに追加するためのオプションです。kvm
は、仮想マシン管理に関連する特別な権限を持つグループです。$(whoami)
は、現在ログインしているユーザーの名前を取得するコマンドです。- これで、現在のユーザーが
kvm
グループに追加され、仮想マシンの管理権限が与えられます。
sudo usermod -aG libvirt $(whoami)
:
- これは、現在のユーザーを
libvirt
グループに追加します。 libvirt
グループは、仮想化管理ツールであるlibvirt
を利用するための特別な権限を持つグループです。- 現在のユーザーが
libvirt
を使って仮想マシンを管理できるようになります。
sudo usermod -aG input $(whoami)
:
- これは、現在のユーザーを
input
グループに追加します。 input
グループは、入力デバイスの管理に関連する特別な権限を持つグループです。- 現在のユーザーが入力デバイス(例えばキーボードやマウス)に関連する操作を行えるようになります。
あともう少しです、どのmacOSかを選択できるスクリプトを実行します。
./fetch-macOS-v2.py
ここは推奨されている6番のVenturaを選択することにします。

その後、.dmgファイルがダウンロードされます。.dmgファイルは、主にmacOSで使用されるディスクイメージファイル形式です。

QEMUは.dmgファイルを直接使用できないため、.dmgファイルを.imgファイルに変換する必要があります。このファイルを変換します。
dmg2img
コマンドを使って、.dmgファイルを.imgファイルに変換するための具体的な例は以下のようになります。
dmg2img -i BaseSystem.dmg BaseSystem.img
さらに、qemu-img
コマンドを使って仮想ハードディスクイメージを作成します。手順について説明します。
qemu-img create -f qcow2 mac_hdd_ng.img 256G
qemu-img
: QEMUのディスクイメージ操作ツールです。create
: 新しいディスクイメージを作成するコマンドです。-f qcow2
: 作成するイメージのフォーマットを指定します。ここでは、QEMU Copy-On-Write version 2 (qcow2) フォーマットを使用しています。mac_hdd_ng.img
: 作成するイメージファイルの名前です。256G
: イメージのサイズを指定します。ここでは256ギガバイトです。
ここで注意すべき点があります。qemu-img create
コマンドで作成する仮想ディスクイメージは、指定したサイズ(ここでは256GB)を上限とするスパースファイルです。実際には、使用するデータ量に応じてディスクスペースが動的に割り当てられます。ですので、ディスクイメージが作成時にすぐに256GBを消費するわけではなく、実際に書き込まれるデータ量だけが物理ディスクスペースを消費します。
最後にスクリプトを実行します。
./OpenCore-Boot.sh

QEMUを使用している場合も、基本的にはVMwareやVirtualBoxと同じ目的を達成しています。これらのツールはすべて、物理的なハードウェア上で仮想マシンを作成および実行するためのソフトウェアです。それぞれのツールには独自の特徴や利点がありますが、仮想化の基本的な概念と機能は共通しています。
共通点
- 仮想マシンの作成と管理:
- すべてのツールは、仮想マシンを作成し、異なるオペレーティングシステムを実行するための仮想ハードウェアを提供します。
- ISOやディスクイメージの使用:
- 仮想マシンにOSをインストールするために、ISOファイルやディスクイメージ(.img、.vmdk、.vdiなど)を使用します。
- リソースの割り当て:
- CPU、メモリ、ディスクスペース、ネットワークなどのリソースを仮想マシンに割り当てて管理します。
- スナップショットとチェックポイント:
- 仮想マシンの状態を保存し、後でその状態に戻ることができる機能を提供します(QEMUではスナップショット、VMwareやVirtualBoxでも同様の機能があります)。
QEMUの特徴
- 高い柔軟性とカスタマイズ性:
- QEMUは非常に柔軟で、多くの異なるアーキテクチャ(x86、ARM、PowerPCなど)をサポートします。また、多くのコマンドラインオプションが用意されており、詳細な設定が可能です。
- オープンソース:
- QEMUはオープンソースであり、無料で利用できます。カスタマイズや拡張が容易です。
- KVMとの連携:
- Linux上でKVM(Kernel-based Virtual Machine)と連携することで、高速な仮想化が可能です。KVMを利用すると、ネイティブに近いパフォーマンスが得られます。