今回は、前回に引き続き、WSL2での仮想環境の利用について解説する。ここでは、KVMを利用するソフトウェアとしてQEMUを利用する。
なお、WSL2での仮想マシン環境が動作していることが前提になる。確認方法などについては前回記事を参照いただきたい。
QEMUとは?
QEMUは、CPU/ハードウェアのエミュレータ・ソフトウェアだ。x86の16 bitモードや他のプロセッサアーキテクチャのプログラムを動作させることができる。
Hyper-Vの仮想マシンは、完全仮想化も可能ではあるが、ゲスト・オペレーティングシステムがハイパーバイザーを呼び出して一部の機能を実現する準仮想化で効率良く動作することを想定し、対象を32、64ビットのオペレーティングシステムとしている。16ビット環境も実行可能だが推奨はされていない。
PCの周辺回路を含めたソフトウェア・エミレーションも利用可能だが、多くの機能は決め打ちでユーザーには選択の余地があまりない。たとえば、ディスプレイカードもS3社のコントローラー(S3 Trio 765相当)、マウスはPS/2マウス、キーボードはPS/2もしくはIBM PCキーボードコントローラー(i8042)のみとなっている。
これに対して、QEMUでは、16 bitのMS-DOSなどの上で動作するアプリケーションを動作可能にするため、Microsoftシリアルマウスなどのエミュレーションが可能なほか、VGAデバイスを複数から選択できる。
なお、QEMUは、Win32側でも動作する。
KVM用QEMUのインストール
ここでは、WSL用のUbuntuディストリビューション(現状はUbuntu 22-04 LTSと同等)を使い、インストールなどを解説する。
インストールは以下のコマンドで行う。
sudo apt update
sudo apt install qemu-kvm -y
これで、qemuがインストールされる。ただし「qemu-kvm」は仮想的なパッケージで、実際にインストールされるパッケージは異なる名前をもっている。なので、
apt-cache showpkg qemu-kvm
などとして、仮想パッケージqemu-kvmの依存関係などを調べる。簡易には
apt list --installed '*qemu*'
でqemuを含むパッケージを表示させることもできる。
まずは、インストールしたQEMUがKVMを認識しているかどうかを確認する。
qemu-system-i386 -accel kvm -monitor stdio
をコマンドラインから実行すると、QEMUのモニターコマンドに入る。同時に別ウィンドウにQEMUがエミュレーションを行うPCの起動画面が表示される。
プロンプトが「(qemu)」となれば、QEMUモニターが起動している。ここで「info kvm」コマンドを使い「kvm support: enabled」と表示されればQEMUは、KVMで動作している(写真01)。モニターからは「quit」コマンドでQEMUを抜けることができる。
ゲストOSのインストールと実行
QEMUの使い方を解説するのは本連載の主目的ではないので細かい手順(ZIPファイルを解凍するなど)は省いてある。本格的な利用では、QEMUサイトにあるドキュメントやインターネット内の記事などを探して参照してほしい。
ここでは、QEMUを使って、MS-DOS互換のFree-DOSをインストールしてみる。
まず外部記憶のイメージファイルを作る。イメージのファイル名をfdos.imgとし、容量を200メガバイトとしてqemu-imgコマンドを使う。
qemu-img create -f raw fdos.img 200M
次にfreeDOSのインストールISOイメージを入手する。前記Webサイトには複数のイメージがあるが「FreeDOS 1.3 LiveCD」を選ぶ。
FreeDOSのインストールは、以下のコマンドで行う。
qemu-system-i386 -accel kvm -rtc base=localtime -drive file=fdos.img,format=raw -cdrom FD13LIVE.iso -boot d
これは、リアルタイムクロックをローカルタイムと同期させ、fdos.imgをドライブに指定(format=の前のカンマの前後に空白を入れない)、dドライブ(CD-ROM)から起動するというコマンドだ。
起動すると、WSLgにより、QEMUの別ウィンドウが開く(写真02)。途中、パーティションテーブルの作成やフォーマットでインストーラーが再起動し、先頭に戻るが、繰り返し“I”キーでインストールを行えばよい。
途中、キーボードの選択がある。“More keyboard choices”を選び、リストから“Japanese”を選択することもできるが、WSLでは逆スラッシュなどが入力できないことがある。このあたり、最下層が実ハードウェアではないネイティブなLinuxと異なるWSLの実行環境に関係していると思われる。
インストーラーが終了するとまた先頭に戻る。今度は、“Boot from system hardisk”を選ぶ。最初の選択(メモリ管理)は、どれも選択可能だが通常は3を選択する(写真03)。これでと、FreeDOSが起動し最後にプロンプトが表示されればインストールは完了である(写真04)。shutdownコマンドでFreeDOSを終了できる。
インストールが終了したら以下のコマンドで起動できる。
qemu-system-i386 -accel kvm -rtc base=localtime -drive file=fdos.img,format=raw
最近のCPUの多くがNested Virtualizationに対応しているため、WSL側でQEMUなど仮想マシン支援環境を使うことは難しくない。
> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/