お伝えしたいこと
今回はvirt-builder
というLinuxコマンドの紹介です。
LinuxをMinimal構成でインストール済みのディスクファイルを簡単に生成するコマンドです。
Linuxインストールを自動化するのではなく、Linuxインストール済みのテンプレートから仮想ディスクを作成します。
KVMで仮想マシンを構成している場合に相性が良いです。
コマンド1行で、なおかつ短時間でLinuxマシンが手に入ります。
前回お伝えしたKickstartファイルと比較すると、得意/不得意があります。
詳細は次のセクションで紹介します。
- お伝えしたいこと
- virt-builderとは
- virt-builderの使い方
- (参考) オンラインリポジトリのURL
- (参考) virt-builderに対応しているディストリビューション
- まとめ
virt-builderとは
virt-builder
とは、libguestfsというツール群に含まれるコマンドの1つです。
Linux環境であれば、OS標準のパッケージマネージャで手軽にインストールして使い始めることができます。
このコマンドによって、LinuxをMinimal構成でインストールしたデータを格納した仮想ディスクファイル (raw, またはqcow2形式) を手軽に生成できます。
具体的な動作は、下図のとおりです。
virt-builder
コマンドを実行したときの動作は2工程です。
virt-builder
実行時のコマンドラインオプションによって、2の工程における加工の内容を制御できます。
具体的にはディスクサイズや、ログインパスワードの変更などが挙げられます。
virt-builder
コマンドは、Linuxのインストール処理を行いません。
そのため、テンプレートをダウンロード済みであれば高速に動作します。
一方で、Linuxを手動/自動インストールする場合と比較して細かなカスタマイズは効きません。
virt-builder
はMinimal構成の検証用VMを手軽に作成する方法と割り切り、より細かな制御が必要な場合はKickstartファイルによる自動インストールなど自力でインストールすることをおすすめします。
virt-builderの使い方
インストール
virt-builder
は、guestfs-tools
RPMパッケージに含まれます。
RHEL系のディストリビューションであれば、以下のコマンドでインストールできます。
sudo dnf install guestfs-tools
virt-builderの実行
virt-builder
のSyntaxは非常にシンプルです。
virt-builder os-version [options...]
最小限のコマンド例は、以下のとおりです。
以下のコマンドにより、6 GiBのディスク容量を持つCentOS Stream9をインストール済みの仮想ディスクファイルが生成します。
rootのパスワードはランダム文字列が生成され、標準出力に表示されます。
今回はrFdQIE0WFI8AHTRy
でした。
virt-builder centosstream-9 # (一部抜粋) # Output file: centosstream-9.img # Output size: 6.0G # Output format: raw
今回の例では、os-version
にcentosstream-9
を指定しました。
指定可能なOSバージョンの一覧は、virt-builder -l
で確認できます。
virt-builder -l # (一部のみ抜粋) # centosstream-9 x86_64 CentOS Stream 9
実際に使う際は、以下のように複数のオプションを指定するのが一般的です。
virt-builder centosstream-9 \ -o /home/shared/libvirt/images/test.qcow2 \ --size 10G \ --format qcow2 \ --hostname test \ --root-password 'password:mypassword' \ --ssh-inject root \ --selinux-relabel # (一部抜粋) # Output file: /home/shared/libvirt/images/test.qcow2 # Output size: 10.0G # Output format: qcow2
今回使用したコマンドラインオプションの意味は、下表のとおりです。
完全なリストはman virt-builderを参照してください。
--selinux-relabel
はSELinuxが有効なディストリビューションをビルドする場合のみ指定します (FedoraやCentOS Streamなど)。
他のオプションは、どのディストリビューションにおいても指定することをおすすめします。
オプション | 意味 |
---|---|
-o --output |
|
--size |
|
--format |
|
--hostname |
|
--root-password |
|
--ssh-inject (※1) |
|
--selinux-relabel |
(※1) sshdはデフォルトでrootユーザーによるパスワード認証を拒否する設定になっているので、--ssh-inject
によってSSH鍵をアップロードすることをおすすめします
(※2) --ssh-inject
オプションによって、~/.ssh/authorized_keys
ファイルを生成します。このファイル生成はSELinuxが起動していない状態で行われるため、生成されるファイルはラベル無し (no label
) になります
(※3) SELinuxが起動している時にファイルを生成すると、SELinuxは全てのファイルにラベル付けし、ファイルシステムのメタデータとして記録します。その後、SELinuxはラベルに基づいてアクセス制御を行います。--ssh-inject
オプションを利用すると、マシンが起動しておらずSELinuxも動作していないところに~/.ssh/authorized_keys
を生成します。このとき当然ラベル付けされないので、そのままだとSELinuxの制御が正しく行われません。具体的にはsshdがauthorized_keys
を読み取れず、公開鍵認証に失敗します。この問題を回避するには、--selinux-relabel
をセットで指定することで、SELinuxのラベル付けを行います。この対応はRHEL, CentOS, CentOS Stream, Fedoraなど、SELinuxが有効なディストリビューション全てに必要です。SELinuxについてもっと知りたい方は、Linuxプロセスアクセス制御の概要を始めとするSELinuxシリーズもぜひお読みください
(参考) 生成したディスクイメージファイルでVMを起動する
virt-builder
で生成したディスクファイルをセットしてVMを起動すれば、インストール済みのLinuxを直ちに使うことができます。
例えば、KVM環境の場合は、以下のようなvirt-install
コマンドでVMを作成・起動します。
今回はLinuxのインストールを行わないので--cdrom
のような起動順位を変更するオプションを指定せず、代わりに--import
を指定します。
virt-install \ --name test \ --memory 1024 \ --vcpus 2 \ --os-variant centos-stream9 \ --disk path=/home/shared/libvirt/images/test.qcow2 \ --import --noautoconsole
作成したVMを強制終了して削除するには、以下のコマンドを実行します。
virsh destroy test ; virsh undefine test --storage vda
詳細はKVMの基本操作集にあるVMの作成とVMの削除を参考にしてください。
(参考) オンラインリポジトリのURL
virt-builder
コマンドが参照するオンラインリポジトリのURLは、デフォルトで以下のとおりです。
- https://builder.libguestfs.org
- http://archive.libguestfs.org/builder
- https://download.opensuse.org/repositories/Virtualization:/virt-builder-images/images/
リポジトリのURLは、/etc/virt-builder/repos.d/*.conf
にて管理されています。
(参考) virt-builderに対応しているディストリビューション
2022/4現在で以下のとおりです。
virt-builder
の引数に指定できるディストリビューション名は、virt-builder -l
で確認できます。
virt-builder -l # (一部のみ抜粋) # opensuse-13.1 x86_64 openSUSE 13.1 # opensuse-42.1 x86_64 openSUSE Leap 42.1 # opensuse-tumbleweed x86_64 openSUSE Tumbleweed # alma-8.5 x86_64 AlmaLinux 8.5 # centos-6 x86_64 CentOS 6.6 # centos-7.0 x86_64 CentOS 7.0 # centos-8.2 x86_64 CentOS 8.2 # centosstream-8 x86_64 CentOS Stream 8 # centosstream-9 x86_64 CentOS Stream 9 # cirros-0.3.5 x86_64 CirrOS 0.3.5 # debian-6 x86_64 Debian 6 (Squeeze) # debian-11 x86_64 Debian 11 (bullseye) # fedora-33 x86_64 Fedora® 33 Server # fedora-35 x86_64 Fedora® 35 Server # fedora-35 aarch64 Fedora® 35 Server (aarch64) # freebsd-11.1 x86_64 FreeBSD 11.1 # scientificlinux-6 x86_64 Scientific Linux 6.5 # ubuntu-10.04 x86_64 Ubuntu 10.04 (Lucid) # ubuntu-20.04 x86_64 Ubuntu 20.04 (focal)
まとめ
Minimal構成でLinuxをインストール済みの仮想ディスクファイルをお手軽に入手する方法としてvirt-builder
を紹介しました。
Kickstartよりも更に簡単に検証用マシンを作成することができます。
virt-builder
で作成したLinuxは、構成がほぼ固定されます。
デフォルトの構成をカスタマイズしたい場合は、やはり自分でLinuxをインストールする必要があります。
Linuxインストールを自動化したいときは、Kickstartが便利です。
virt-builder
、VMクローン、Kickstart、またはその他の自動化をうまく使い分け、効率よくLinux検証環境を整備しましょう。