オープンソースの仮想マシン・マネージャーといえば、 Virtualbox を真っ先に思いつく方が多いと思いますが、IBM 傘下の Redhat が開発している Virt-Manager をご存じでしょうか。
Virt-Manager とは Libvirt に GUI を提供する仮想マシンマネージャーです。高速で柔軟性が高いためシステムの構成によってネイティブに近いパフォーマンスを発揮することもあります。KVM (Kernel-based Virtual Machine)を主眼において開発されていますが LXC(Linux コンテナ) や Xen などのハイパーバイザーとも連携させることができます
Vir-Managerの仕組み
Virt-Manager の仕組みをざっくりと図にすると以下のようなものになります。KVM の仮想 CPU 支援機能を使いつつ、 QEMU が残りのネットワークやグラフィックデバイスなどをエミュレートさせます。あとは Virt-manager が Libvirt というライブラリ(API)を使って GUI を表示し人間が操作するという感じです。
いろんなサイトを読みましたが自分の理解ではこんな感じです。QEMU の一部が Linux カーネルに取り入れられた結果 KVM になったなどの経緯があり、古いサイトだとそのあたりがわからないのでかなり混乱しました。
ちなみに VirtualBox は2007年リリース当初は QEMU の仮想ハードウェアを利用していました。
Virt-ManagerとVirtualBoxの比較
VirtualBox も Virt-Manager 同様 KVM を用いた CPU の仮想支援機能を使えますが VRAM の利用可能容量が厳しく制限されており、GPUパススルーなどは行なえません。ネットワーク速度も制限されています。
よく VirtualBox と引き合いに出される VMware Player は大量の VRAM を扱えますが NVIDIA と提携しているため、AMD GPU が使えないという致命的な問題もあります。
多くの利点がある QEMU がなぜ中々広まらないのかは、多少の設定が必要なのとターミナルがメインな操作方法だからでしよう。
しかし、近年グラフィックUIを有したツールも進化してきているので利便性は高くなっています。
ここでは Arch Linux にQEMUとGUIツールである「Virtual Machine Manager(Virt-Manager)」の導入方法を解説していきます。現代のほとんどのディストリビューションが利用している Systemd を前提とした記事です。
Virt-Manager は RedHat が開発してるだけあって Fedora Linux だとコマンドひとつで導入から設定まで行ってくれるので大変便利です。個人的には仮想マシンを介して多くの作業を行っている人は Fedora がかなりおすすめだと思っています。
躓いてしまった場合は ArchWiki を参照することをおすすめします。必要となるパッケージがコロコロ変わってしまうようなので最新情報を見た方が良いでしよう。
Virt-Managerの導入法
1. CPUの仮想化支援機能の有無をチェック
AMD や Intel 製の CPU には仮想化をハードウェアレベルで支援するための拡張機能があります。この機能はそれぞれ AMD CPU では SVM、Intel CPU では VT-X と呼ばれています。 KVM を利用する上で必須な機能であり、サポートしている CPU を使う必要があります。
近年ほとんどの CPU でこの仮想化機能は搭載されています。ですが、AMD Bulldozer やIntel Sandybridge 以前の古いCPUは対応していないので KVM は利用できません。大半の場合、この支援機能はデフォルトで無効になっています。
以下確認用のコマンドです。
$ LC_ALL=C lscpu | grep Virtualization
Virtualization: AMD-V
上記のようにAMD-VかIntel-VTなどと表示されればハードウェア支援機能が有効になっています。何も表示されていなければBIOSで設定変更が必要です。
2. 必要なパッケージを確認
こちらArch Linuxで必要と思われるパッケージ一覧です。
libvirt | 仮想化エンジンをコントロールするためのAPI |
qemu | 仮想マシンエミュレーター |
qemu-desktop [任意] | 仮想マシンにオーディオやグラフィックを提供するパッケージ群 |
iptables-nft | Linuxカーネルネットワークのパケットを制御するツール |
dnsmasq | 軽量なDNSサーバとDHCPサーバ |
edk2-ovmf | 仮想マシンがセキュアブートを利用するためのファームウェア。 |
最新の ArchWiki では AUR にある ebtables
よりも同様のイーサネットフィルタリング機能を有する公式パッケージにある iptables-nft
を推奨しています。
他のディストリビューションは利用しているパッケージ・サービスが大きく異なることがあるので事前に調べる必要があります。
3. QEMUとVirtual Machine Managerのインストール
- Pacmanパッケージマネージャ(Arch系)
$ sudo pacman -S virt-manager qemu libvirt edk2-ovmf dnsmasq iptables-nft
- APTパッケージマネージャ(Debian系)
$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager
- DNFパッケージマネージャ(Red Hat系)
$ sudo dnf install virt-manager
Fedora ならこれ以降の設定をしなくてもすぐに動作します。
4. Libvitサービスの設定
Libvirt は KVM や Xen などのハイパーバイザに仮想マシンの制御を簡単に行えるよう制御を抽象化したAPIライブラリです。このサービスが開始しているかどうか確認を行い、有効化されてなければ設定を行います。
設定していなければこのようなエラーが表示されます。
Unable to connect to libvirt qemu:///system.
ソケットの '/var/run/libvirt/virtqemud-sock' への接続に失敗しました: そのようなファイルやディレクトリはありません
Libvirtのスタータスを確認
まずは Systemd で Libvirt サービスがどのような状態なのかを確認します。
$ sudo systemctl status libvirtd.service
○ libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; disabled; vendor>
Active: inactive (dead)
TriggeredBy: ○ libvirtd-admin.socket
○ libvirtd.socket
○ libvirtd-ro.socket
Docs: man:libvirtd(8)
https://libvirt.org
このシステムでは inactive (dead)
となっているのでサービスを有効化&開始する必要があります。
Libvirtdサービスを開始・有効化
$ sudo systemctl start libvirtd.service
Libvirtd サービスをシステム起動時から有効化します。
$ sudo systemctl enable libvirtd.service
6. 認証機能を設定する
root 権限を利用せずに Libvirt を利用するにはKVMの設定を行う必要があります。更に副効果としてLibvirtのネットワーク機能を利用することができるようになります。
一番簡単な方法は自分のユーザIDを libvirt
グループに追加することです。libvirt
グループに登録されたメンバーはRWソケットにパスワードの入力しなくてもアクセスできます。
$ sudo gpasswd -a hogehoge libvirt
7. 仮想ネットワークデバイスを設定
Arch Wiki に沿ってすべての設定を行いましたが、ゲスト仮想マシンを立ち上げようとしたら下記のようなエラーが表示されました。どうやら仮想ネットワークデバイスを利用するには設定が必要なようです。
仮想マシンの開始中にエラーが発生しました: 要求された操作は有効ではありません: network 'default' is not active
QEMU を Linux にインストールすると default
NAT ネットワークが Libvirtd によって自動的に生成されます。このネットワークは仮想マシンの仮想NIC(ネットワークインターフェイスカード) 同士をつなげる役割を担っています。設定は /etc/libvirt/qemu/networks/default.xml
内に格納されています。
上記のエラー表示はこの default
ネットワークが何かしらの理由で無効になってしまっていることを示します。ネットワークを使う設定になっている場合はその仮想マシンは起動しません。
設定方法
Libvirt を管理するためのコマンド virsh
を使います。存在するすべての仮想ネットワークデバイスを表示します。
$ sudo virsh net-list --all
$ sudo virsh net-list --all
名前 状態 自動起動 永続
------------------------------------------------
default 停止状態 いいえ (no) はい (yes)
ご丁寧に日本語化されています。自動起動が「いいえ(no)」になっているので自動起動させます。
$ sudo virsh net-autostart default
これで Libvirtd サービスを再起動すれば自動的に default
ネットワークが起動します。
8. Libvirtd の再起動
Libvirtd サービスを再起動して導入完了です。
sudo systemctl restart libvirtd.service
Virt-Manager を起動しましよう。
次の記事で Virt-Manager の使い方を解説するため Windows 11 を仮想マシンにインストールしていきます。
おわり
コメント
仮想OS側で途中からシフトキーが押されっぱなしと思われる状況に陥ってます。仮想側はWin/Linuxどちらでも起こるので、ホスト側の問題かと思って、「次の記事」を楽しみに待っております。