続・玩式草子 ―戯れせんとや生まれけん―

第66回QEMU/KVMとVirt-manager

あれこれと雑事に追われているうちに2026年も半分が過ぎてしまいました。その間にlinuxカーネルもバージョンが7.0になりました(2026/04/12⁠⁠。最近では「マイナーバージョンが20に達したら自動的にメジャーバージョンを上げる」というルールに従って、メジャーバージョンも一定期間ごとに更新されるため、⁠メジャーバージョン・アップ」にかつてのような重みは無くなったものの、筆者のように古くから関わっている人間には、やはりメジャーバージョンの更新は新しいステージに踏み込んでいく気がします。

現状、Plamo Linuxでは最新版ではなくLTS(Long Term Support)バージョンのカーネルを採用しているのでまだ7.xカーネルには対応していないものの、7.x系のLTSが決まれば随時対応していく予定です。カーネルの更新といった大きな変更の際に強い味方になるのが仮想環境です。というわけで、今回は、最近遊んでいるQEMU/KVMな仮想環境を紹介しましょう。

VirtualBoxからQEMU/KVMへ

Linuxで利用できる仮想化技術はハードウェアそのものを仮想化するマシンレベルの仮想化と複数のOS環境を同居させるOSレベルの仮想化に大別できます。VirtualBoxや今回取りあげるQEMU/KVMは「マシンレベルの仮想化」で、LXCやDockerといったコンテナ技術は「OSレベルの仮想化」です。

Plamo Linuxのようなディストリビューションの開発には、インストーラをテストするためにBIOSやUEFIの機能も提供してくれる「マシンレベルの仮想化」が必須です。筆者自身、VMware Playerを経て、Sun Microsystemsが配布していたころからのVirtualBoxユーザです。

一方、IntelやAMDといったCPUメーカも仮想化に着目し、VT-xAMD-VといったCPUレベルの仮想化技術を開発、Linux側もその技術を利用するためにKVM(Kernel-based Virtual Machine)という機能を用意しました。KVM経由でCPUの仮想化技術を利用すれば、仮想マシンを実環境と遜色ない速度で実行できます。

このKVMを積極的に採用し、仮想マシン用に整備したのがQEMU/KVMです。QEMUはもともと"Quick-EMUlator"の名称通り、X86なCPU上でARMやPowerPCといった異なるCPUの動作をソフトウェア的に実現するエミュレータでした。そのソフトウェア・エミュレーション部をKVM経由でCPUの仮想化技術にまかせたのがQEMU/KVMで、同じアーキテクチャのCPUしか仮想化できないという制限はあるものの、処理速度は格段に向上することになりました。

実のところ、QEMU/KVMは数年前からPlamo Linuxのcontribパッケージには入っていたものの、構成パッケージが複雑そうだったり、操作方法や想定環境がVirtualBoxと違っていたりで、積極的には使っていませんでした。しかしながら最近、AIからずいぶんQEMU/KVMを推されたこともあり、腰を据えて使ってみたところVirtualBoxよりもずいぶん軽快に動くことにびっくりしました。

一応、VirtualBoxのために言い添えると、QEMU/KVMがLinuxに特化した作りになっているのに対し、VirtualBoxはWindowsやMacOS、Solarisといったマルチプラットフォームで動作しますし、QEMU/KVMを使いこなすには後述するlibvirtやOVMF、SPICEといった様々に異なるプロジェクトの成果物を集めてくる必要があるのに対し、VirtualBoxは必要なツール一式が揃った形でパッケージ化、配布されているため、使いはじめる手順はずっと簡単です。

Plamo LinuxのQEMU/KVM用パッケージ

さて、それではPlamo LinuxでQEMU/KVMを使う方法を紹介しましょう。Plamo LinuxのQEMU/KVM関連パッケージは(メインツリーではなく)contrib/virtualization/以下にまとめています。

lftp plamo:/pub/Plamo-8.x/x86_64/contrib> ls virtualization
drwxrwxr-x   2 10002    101          4096 Jun 20 02:36 Optional
-rw-rw-r--   1 10002    101        288832 Jun 20 00:53 gtk_vnc-1.5.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101        129189 Jul  2 07:37 libcap_ng-0.9.3-x86_64-B1.tzst
-rw-rw-r--   1 10002    101        488176 May 12 06:29 libosinfo-1.12.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101      13212043 Jun 22 07:28 libvirt-12.4.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101         97720 May 12 06:29 libvirt_dbus-1.4.1-x86_64-B1.tzst
-rw-rw-r--   1 10002    101        377913 May 12 06:29 libvirt_glib-5.0.0-x86_64-B1.tzst
-rw-rwxr--   1 10002    101        443433 Jun 22 07:20 libvirt_python-12.4.0-x86_64-B1.tzst
drwxrwxr-x   2 10002    101          4096 Jul  2 07:37 old
-rw-rw-r--   1 10002    101        227636 May 13 12:28 osinfo_db-20251212-noarch-B2.tzst
-rw-rw-r--   1 10002    101         60753 May 12 06:29 osinfo_db_tools-1.12.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101       1475140 May 12 06:29 ovmf-stable202602-x86_64-B1.tzst
-rw-rw-r--   1 10002    101      27968788 Jun 22 07:21 qemu-11.0.1-x86_64-B2.tzst
-rw-rw-r--   1 10002    101        978892 May 12 06:31 spice-0.16.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101        655286 Jul  2 07:36 spice_gtk-0.43-x86_64-B1.tzst
-rw-rw-r--   1 10002    101         26665 May 12 06:31 spice_protocol-0.14.5-x86_64-B1.tzst
-rw-rw-r--   1 10002    101         78405 Jun 20 07:06 spice_vdagent-0.23.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101         87405 Jun 20 00:37 usbredir-0.15.0-x86_64-B1.tzst
-rw-rw-r--   1 10002    101       1361597 Jun 22 07:22 virt_manager-5.1.0-x86_64-B2.tzst

基本的に、これらパッケージをインストールすれば、virt-manager経由でQEMU/KVMを利用できるようになるものの、各パッケージの守備範囲はそれぞれ異なるので、簡単に解説しておきましょう。

仮想マシン関連

qemu-11.0.1-x86_64-B2.tzstがQEMU/KVMの本体で、CPUやメモリ、HDD、ネットワークカード等を備えた仮想マシンを構築します。ovmf-stable202602-x86_64-B1.tzstは、QEMUが利用するUEFI firmwareです。usbredir-0.15.0-x86_64-B1.tzstはQEMUが作った仮想マシンでホスト側のUSBデバイスを利用するためのライブラリです。

このようにQEMU/KVMでは、仮想マシンを構成するパーツも様々なOSSプロジェクトの成果を組み合わせています。

libvirt 関連

libvirt-12.4.0-x86_64-B1.tzstは、それぞれ独自のAPI(操作コマンドやオプション)を持つQEMUやLXC、VirtualBoxといった仮想化ソフトウェアを統一的に操作する機能を提供します。libvirtには"virsh"という仮想マシン操作用のコマンドが用意されているものの、設定項目が膨大なので、通常はvirt_manager-5.1.0-x86_64-B2.tzstが提供するGUIツールvirt-manager経由で操作します。libvirt_dbus-1.4.1-x86_64-B1.tzstlibvirt_glib-5.0.0-x86_64-B1.tzstlibvirt_python-12.4.0-x86_64-B1.tzstは、各機能や言語からlibvirtを使う際のバインディングです。これらlibvirt関連パッケージは、仮想化ソフトウェアとは独立に開発されている統一管理用の基盤です。

入出力関連

QEMUが作る仮想マシン(ゲスト)の画面や音声の出力、キーボードやマウスからの入力はSPICEと呼ばれるプロトコルでホスト側とやりとりします。リモートマシンの画面を転送するプロトコルにはVNCRDPが存在するものの、SPICEは仮想環境で便利なように新しく開発されたプロトコルです。spice_protocol-0.14.5-x86_64-B1.tzstがプロトコルの定義(ヘッダ集⁠⁠、spice-0.16.0-x86_64-B1.tzstがそのサーバ側の実装です。上記virt-managerもSPICE経由で仮想マシンのコンソールやXの画面を表示し、その際に使うのがGTK用のSPICEクライアントspice_gtk-0.43-x86_64-B1.tzstです。

最近ではSPICEプロトコルの方が便利なものの、virt-managerは広く普及しているVNCプロトコルにも対応しており、gtk_vnc-1.5.0-x86_64-B1.tzstはGTK用のVNCクライアントです。なおvirt-managerでは、SPICEが使えなかった場合の代替(fallback)にVNCを使うようになっているため、VNCを使う予定が無くてもこのパッケージはインストールする必要があります。

インストール環境関連

virt-managerは、インストール用に指定されたCDイメージ(isoファイル)などからインストールしようとしているOS(ディストリビューション)の種類を識別し、それぞれに応じた環境を用意します。その際に用いるのがOSinfoデータベースで、osinfo_db-20251212-noarch-B2.tzstには各種OSを識別するための情報が登録されています。osinfo_db_tools-1.12.0-x86_64-B1.tzstはこのデータベースを操作するためのツール類、libosinfo-1.12.0-x86_64-B1.tzstはそれらツールが使うライブラリです。

その他

spice_vdagent-0.23.0-x86_64-B1.tzstは仮想マシン側で動かすSPICEエージェントで、SPICEプロトコルを介して画面の拡大縮小に追従したり、クリップボードを共有しホスト・ゲスト間でカット&ペーストを可能にします。

libcap_ng-0.9.3-x86_64-B1.tzstは、ホスト側のUSBをゲスト(仮想マシン)にリダイレクトする際に利用するライブラリで、USBデバイスの利用権限等を一時的に変更するために用いられます。

virt-managerを使ったQEMU/KVMの操作

さて、それでは実際にvirt-managerを使ってQEMU/KVMで仮想マシンを作ってみましょう。まず、必要なパッケージをダウンロード、インストールしておきます

$ ls
gtk_vnc-1.5.0-x86_64-B1.tzst           ovmf-stable202602-x86_64-B1.tzst
libcap_ng-0.9.3-x86_64-B1.tzst         qemu-11.0.1-x86_64-B2.tzst
libosinfo-1.12.0-x86_64-B1.tzst        spice-0.16.0-x86_64-B1.tzst
libvirt-12.4.0-x86_64-B1.tzst          spice_gtk-0.43-x86_64-B1.tzst
libvirt_dbus-1.4.1-x86_64-B1.tzst      spice_protocol-0.14.5-x86_64-B1.tzst
libvirt_glib-5.0.0-x86_64-B1.tzst      spice_vdagent-0.23.0-x86_64-B1.tzst
libvirt_python-12.4.0-x86_64-B1.tzst   usbredir-0.15.0-x86_64-B1.tzst
osinfo_db-20251212-noarch-B2.tzst      virt_manager-5.1.0-x86_64-B2.tzst
osinfo_db_tools-1.12.0-x86_64-B1.tzst

$ sudo installpkg *tzst
[sudo] kojima のパスワード: XXXX
gtk_vnc-1.5.0-x86_64-B1 のインストール中
PACKAGE DESCRIPTION:
gtk_vnc-1.5.0-x86_64-B1 のインストールスクリプトを実行中
libcap_ng-0.9.3-x86_64-B1 のインストール中
PACKAGE DESCRIPTION:
libcap_ng-0.9.3-x86_64-B1 のインストールスクリプトを実行中
....
virt_manager-5.1.0-x86_64-B2 のインストール中
PACKAGE DESCRIPTION:
virt_manager-5.1.0-x86_64-B2 のインストールスクリプトを実行中

update desktop database
update schemas database
update desktop database

libvirtは libvirtdvirtlockdvirtlogdというデーモンから構成されており、これらはシステム起動時に自動起動されるものの、インストールした時点では動いていないので、まずこれらのデーモンを起動しておきます。

$ for i in libvirtd virtlockd virtlogd ; do
  > sudo /etc/rc.d/init.d/$i start
  > done
  Starting libvirtd...        *   [  OK  ]
  Starting virtlockd...        *   [  OK  ]
  Starting virtlogd...        *   [  OK  ]
$ ps ax | grep virt
7029 ?        Sl     0:00 /usr/sbin/libvirtd --daemon
7070 ?        S      0:00 /usr/sbin/virtlockd --daemon
7090 ?        S      0:00 /usr/sbin/virtlogd --daemon

virt-managerは新しい仮想マシンを作る際、デフォルトではネットワークをvirt0インターフェイス経由のNATに設定します。その際、dnsmasqコマンドを使って仮想マシンにIPアドレスを振ろうとするので、dnsmasqパッケージもインストールしておきましょう。

dnsmasqパッケージは、Plamo Linuxのメインパーツとして配布しているので既にインストール済みかも知れません。未インストールの場合は、こちらからダウンロード、インストールしておきます。

$ sudo installpkg dnsmasq-2.92rel2-x86_64-B1.tzst
dnsmasq-2.92rel2-x86_64-B1 のインストール中

なお、virt-managerは/usr/sbin/dnsmasqを自前の設定ファイルで起動するので、仮想環境用に使う場合は自動起動しないようご注意ください。そのため、パッケージに添付の/etc/rc.d/init.d/dnsmasqスクリプトの実行パーミッションはあらかじめ落としています。

さて、この状態でvirt-managerを起動すると、"QEMU/KVM"と接続し、新しい仮想マシンが作成可能になります。

図1 virt-manager経由で新しい仮想マシンの作成
図1 virt-manager経由で新しい仮想マシンの作成

仮想マシンを作成するにはインストールメディアが必要です。既存のPlamo Linuxのisoイメージを使ってもいいのですが、ここでは少し先走りして、次回以降に取りあげる予定のネットインストール用のisoイメージ(Plamo-8.x_netinst_20260520.iso)を試してみましょう。

図2 インストール用メディアの選択
図2 インストール用メディアの選択

上図に見られるように、インストールメディアを指定すれば「インストールするオペレーティングシステムの選択」欄に"Plamo-8.x"が自動的に設定されます。この機能を提供しているのがOSinfoデータベースです。

後は「メモリのサイズ」「CPU数⁠⁠、⁠HDDのサイズ」を指定していけば準備完了です。なお、作成される仮想マシンはデフォルトではBIOS起動となり、UEFI経由にしたい場合は「インストール前に設定をカスタマイズする」を選択して、詳細設定の画面で指定します。

図3 仮想マシンの設定準備
図3 仮想マシンの設定準備
図4 仮想マシンの詳細設定
図4 仮想マシンの詳細設定

さて必要な設定を終えれば、画面左上の「インストールの開始」ボタンを押します。すると瞬時に設定に応じた仮想マシンが作成され、指定されたisoイメージからインストーラが起動します。

図5 インストーラ(BIOS版)の起動画面
図5 インストーラ(BIOS版)の起動画面

後は通常の手順でインストールを実行するだけです。


今回はPlamo Linux上でvirt-managerを使ってQEMU/KVMな仮想マシンを作るまでの手順を少し詳しく説明しました。自己展開型のインストーラを動かせばすぐに実行可能になるVirtualBoxに比べ、virt-manager+QEMU/KVMな仮想環境は最初の敷居こそちょっと高い印象ですが、動くようになると、そのパフォーマンスの良さや機能の豊富さにびっくりすることでしょう。

次回以降、QEMU/KVM仮想環境のさまざまな機能に触れると共に、その上で開発中のPlamo Linuxのネットインストーラを紹介していく予定です。

おすすめ記事

記事・ニュース一覧