はじめに
仮想マシンは、1台の物理コンピュータ上で複数の独立したオペレーティングシステムを実行するための技術です。仮想マシンを使用すると、複数のOSを同時に使用したり、異なるOSをテストしたり、開発環境を構築したりすることができます。
KVMは、Linuxカーネルに組み込まれた仮想化ソフトウェアです。KVMを使用すると、無料で仮想マシンを作成および管理することができます。
このブログ記事では、KVMを使用して仮想マシンを作成する方法を説明します。
仮想マシンのメリット
仮想マシンには、次のようなメリットがあります。
- 1台の物理コンピュータ上で複数のOSを実行できる。
- 異なるOSをテストできる。
- 開発環境を構築できる。
- リソースを効率的に利用できる。
KVMのメリット
KVMには、次のようなメリットがあります。
- 無料で使用できる。
- Linuxカーネルに組み込まれているため、安定性が高い。
- さまざまなハードウェアに対応している。
関連記事
開発環境
- AlmaLinux 9.3 (ホストマシン)
- AlmaLinux 9.3 (ゲストマシン)
インストール
では、仮想マシンの作成に必要なパッケージをインストールしてきます。
$ sudo dnf install qemu-kvm libvirt virt-install
システムのチェック1回目
まずインストールが完了したらシステムが仮想化ホストとして実行できるか確認します。virt-host-validateというツールがインストールされているのでそれを実行します。
$ virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : WARN (Enable 'devices' in kernel Kconfig file or mount/enable cgroup controller in your system)
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
私の環境では「devices」、「IOMMU」、「secure guest」の3つでワーニングが出ていました。調べたところStack ExchangeのUnix&Linuxのページに、起動時のカーネルコマンドラインパラメータに「intel_iommu=on」と「systemd.unified_cgroup_hierarchy=0」を追加する必要があるということが書かれていました。

しかし、そのサイトに書かれているgrub2-mkconfigコマンドを使ってもうまくいきませんでした。皿に調べたところ、RedHatのサイトにgrubbyコマンドを使ってカーネルコマンドラインパラメータを変更する方法が書かれていました。
コマンドラインパラメータの変更
まず、現在のコマンドラインパラメータを確認してみます。
$ cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/almalinux-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap
grubby
コマンドを実行しコマンドラインパラメータを変更します。
$ sudo grubby --update-kernel=ALL --args="intel_iommu=on"
$ sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
一旦、再起動します。もう一度確認してみます。
$ cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/almalinux-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap intel_iommu=on systemd.unified_cgroup_hierarchy=0
すると、intel_iommu=onとsystemd.unified_cgroup_hierarchy=0が末尾に追加されています。
システムのチェック2回目
$ virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : PASS
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
「devices」と「IOMMU」は無事PASSするようになりました。まだsecure guest supportにワーニングが出ていますが、これはツールがインテルCPUに対応していないらしいのでこのままで大丈夫そうです。Stack Overflowにその内容が書かれています。

環境の準備
libvirtdの起動
systemctl enable –nowコマンドでlibvrtdを起動します。
$ sudo systemctl enable --now libvirtd
Created symlink /etc/systemd/system/multi-user.target.wants/libvirtd.service → /usr/lib/systemd/system/libvirtd.service.
Created symlink /etc/systemd/system/sockets.target.wants/libvirtd.socket → /usr/lib/systemd/system/libvirtd.socket.
Created symlink /etc/systemd/system/sockets.target.wants/libvirtd-ro.socket → /usr/lib/systemd/system/libvirtd-ro.socket.
結果は、active (running)とenabledになっていればOKです。

cockpit
この記事ではCockpitを使って仮想マシンを作成します。Cockpitは、Red Hatが開発・提供するWebベースのLinux管理ツールです。Webブラウザからアクセスできるため、コマンドラインやGUIの管理ツールよりも簡単に操作できます。インストールについては参考ページを参照してください。

iso
インストール時に使用するisoファイルをダウンロードしてきます。ここでは、bootインストール用のAlmaLinux-9.3-x86_64-boot.isoをダウンロードします。ダウンロードしてきたisoファイルはどこでも良いですが、ここでは、/var/lib/libvirt/imagesに置いています。また、isoファイルの所有者、グループをroot:rootにしておきます。
$ sudo curl -O https://repo.almalinux.org/almalinux/9.3/isos/x86_64/AlmaLinux-9.3-x86_64-boot.iso
$ sudo mv AlmaLinux-9.3-x86_64-boot.iso /var/lib/libvirt/images
$ sudo ls -lh /var/lib/libvirt/images/AlmaLinux-9.3-x86_64-boot.iso
-rw-r--r--. 1 root root 899M Nov 24 19:50 /var/lib/libvirt/images/AlmaLinux-9.3-x86_64-boot.iso
仮想マシンの作成
仮想マシンの作成
それでは、cockpitの画面左の仮想マシンメニューを選んで、「仮想マシンの作成」をクリックします。

各項目と設定値は以下の通りになっています。
- 仮想マシンの名前:almalinux9-00
- 接続タイプ:System
- インストールソース:/home/higmasan/AlmaLinux-9.3-x86_64-boot.iso
- AlmaLinux 9
- qcow2 ボリュームの新規作成
- ストレージの制限:60GiB
- メモリ:6GiB

「作成時して実行する」をクリックしたら下の画面のようになります。VNC コンソール画面で操作することができます。右上の展開を押すとVNC コンソール画面が大きくなり操作しやすくなります。
ゲストOSのインストール
Install AlmaLinux 9.3を選択してEnterを押します。

使用する言語を選択します。デフォルトで日本語になっているのでそのまま「続行」をクリックします。

地域設定は日本に設定されています。ソフトウェアの選択を変更するためクリックします。

ここでは、「最小のインストール」に変更します。変更したら完了をクリックして元の画面に戻ります。

システムの「インストール先」をクリックすると下のような画面になります。ここでは、インストールするディスクを選択して完了ボタンをクリックします。

次に、ネットワークとホスト名の設定をクリックします。ここでは、ホスト名をalamalinux9-00にして適用ボタンをクリックします。

次に、rootパスワードを設定します。設定したら、「完了」をクリックします。

最後に、ユーザの作成を行います。ここでは、「このユーザを管理者にする」にチェックを入れておきましょう。完了ボタンを押して次に進みます。

最後に「インストールの開始」を押してインストールを開始します。

インストールが完了すると、下のような画面になります。それでは、「システムの再起動」をクリックします。

作成したユーザでログインできればゲストOSのインストールは完了です。

動作確認
ホストOSからゲストOSにpingコマンドを送ってみましょう。ゲストOSのipアドレスはcockpitの仮想マシン→almalinux9-00と選択した画面にあります。そこには192.168.122.25ということがわかります。

ping 192.168.122.25を実行すると無事レスポンスが返ってきていればOKです。

コメント