【Linux】VirtualBoxを捨ててVirt-Managerを使う

Linux
この記事は約9分で読めます。

Virt-Manager とは IBM 傘下の RedHat が開発している QEMU と KVM(Kernel-based Virtual Machine)を利用した仮想マシンマネージャです。システムの構成によってネイティブに近いパフォーマンスを発揮することもあります。QEMU 上で Windows を動かしてゲームをしている人もいるようです。 QEMU は様々アーキテクチャで動作でき、Android SDK にも使われていたり信頼性と高速性が高いエミュレータです。

QEMU はほぼすべての GNU/Linux で使えるので使わない手はありません。

Vir-Managerの仕組み

Virt-Manager の仕組みをざっくりと図にすると以下のようなものになります。KVM の仮想 CPU 支援機能を使いつつ、 QEMU が残りのネットワークやグラフィックデバイスなどをエミュレートさせます。あとは Virt-manager が Libvirt というライブラリ(API)を使って GUI を表示し人間が操作するという感じです。

Icon from flaticon https://www.flaticon.com/

いろんなサイトを読みましたが自分の理解ではこんな感じです。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 だと1コマンドで導入から設定まで行ってくれるので大変便利です。仮想マシンを介して多くの作業を行っている人は Fedora がかなりおすすめです。

躓いてしまった場合は ArchWiki を参照することをおすすめします。必要となるパッケージがコロコロ変わってしまうようなので最新情報を見た方が良いでしよう。

Arch Wiki – Virt-Manager

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仮想マシンエミュレーター
iptables-nftLinuxカーネルネットワークのパケットを制御するツール
dnsmasq軽量なDNSサーバとDHCPサーバ
edk2-ovmf仮想マシンのためのファームウェア(x86_64,i686)、仮想マシンがUEFIを利用している場合必要。

最新のArchWikiではAURにあるebtablesよりも同様のイーサネットフィルタリング機能を有する公式パッケージにあるiptables-nftを推奨しています。

他のディストリビューションは利用しているパッケージ・サービスが大きく異なることがあるので事前に調べる必要があります。

3. QEMUとVirtual Machine Managerのインストール

QEMU本体と管理しやすいようGUIフロントエンドのインストールを行います。

  • 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 の使い方を解説していきたいと思います。

おわり

株式会社AQUA
¥2,050 (2023/09/15 19:03時点 | Amazon調べ)

コメント

タイトルとURLをコピーしました