テスト環境構築でCloud-initに苦労していませんか?
UbuntuやCentOSのCloud Image(.qcow2)をダウンロードしてKVMで動かすのは非常に軽量で便利です。しかし、これらのイメージは通常、デフォルトのパスワードがロックされており、設定にはCloud-initが必要です。テスト用に1〜2台のVMを素早く立ち上げたいだけの場合、Cloud-initサーバーを構築したり、metadataファイルを作成したりするのは非常に面倒で時間がかかります。
以前の私は、仮想マシンを起動してコンソールを開き、手動でコマンドを入力していました。1台ならまだしも、5台目ともなると嫌気がさしてきます。私のProxmox上の12台のVMからなるホームラボでは、virt-customizeを使用することで準備時間を最大80%節約できています。 各VMの設定に5〜10分かかっていたのが、今では「自分専用」のイメージを用意するのに60秒もかかりません。
virt-customizeはlibguestfs-toolsスイートに含まれるツールです。仮想マシンを起動することなく、ディスクファイル(.qcow2, .raw, .vmdkなど)に直接介入できます。仮想ハードディスクの「内視鏡手術」を行っているような感覚で、非常に便利かつ正確です。
virt-customizeのインストール
このツールは、主要なLinuxディストリビューションのほとんどで動作します。ただし、libguestfs-toolsはイメージ内のファイルシステムを読み取るためのミニカーネルを同梱しているため、インストールサイズが少し大きい点に注意してください。
Ubuntu/Debianの場合は、以下のコマンドでインストールします:
sudo apt update && sudo apt install libguestfs-tools -y
CentOS/RHEL/Fedoraの場合:
sudo yum install libguestfs-tools -y
ヒント: Ubuntuで実行時にカーネルへのアクセスエラーが発生した場合は、sudo chmod 0644 /boot/vmlinuz-*コマンドで現在のカーネルに読み取り権限を付与してください。これはよくあるエラーですが、意外と知られていません。
Cloud Imageを高速カスタマイズする5つのテクニック
ダウンロードしたばかりのubuntu-22.04.qcow2ファイルがあると仮定します。以下は、それをすぐに使えるイメージに変えるための最も実践的なコマンドです。
1. Rootパスワードを瞬時に設定する
Cloud Imageはデフォルトでrootユーザーがロックされていることが多いです。トラブル時にコンソールから素早くログインできるよう、パスワードを設定しておきましょう:
virt-customize -a ubuntu-22.04.qcow2 --root-password password:123456a@
チーム用に個別のユーザーを追加したいですか?この1行で完了します:
virt-customize -a ubuntu-22.04.qcow2 --run-command 'useradd -m -s /bin/bash devops'
2. SSHキーの注入(必須知識)
これはVMを管理する上で最もプロフェッショナルな方法です。手動でコピー&ペーストする代わりに、公開鍵をイメージ内のauthorized_keysファイルに直接流し込みます:
virt-customize -a ubuntu-22.04.qcow2 --ssh-inject root:file:/home/user/.ssh/id_rsa.pub
このコマンドは、.sshディレクトリの作成から適切なアクセス権限の設定まで、すべてを自動で行います。
3. 必要なパッケージを事前にインストールする
VMの起動後にapt installが終わるのを待つ必要はありません。Vim、Htop、Curlなどを外部からあらかじめインストールできます:
virt-customize -a ubuntu-22.04.qcow2 --install vim,htop,curl,net-tools
この仕組みは非常にスマートで、イメージ内に自動的にchrootし、そのイメージ自身のパッケージマネージャー(apt/yum)を使用してダウンロードを行います。
4. タイムゾーンとホスト名の設定
システムログを正確に記録するために、タイムゾーンを日本に設定しましょう:
virt-customize -a ubuntu-22.04.qcow2 --timezone "Asia/Tokyo" --hostname web-srv-01
5. 設定ファイルをVMにアップロードする
既存のnginx.confやバックアップスクリプトがある場合は、--uploadオプションを使用します:
virt-customize -a ubuntu-22.04.qcow2 --upload /path/to/local/nginx.conf:/etc/nginx/nginx.conf
結果の確認
すべてが意図通りに設定されたか確認するには、virt-inspectorを使用してVMを起動せずにイメージの内容を「覗き見る」ことができます:
virt-inspector -a ubuntu-22.04.qcow2
重要な注意点: virt-customizeは元のファイルを直接上書きします。安全のため、実行前にバックアップをコピーしておいてください。万が一、コマンドを間違えて/etcを削除してしまっても、復元できるようにするためです。
cp ubuntu-22.04.qcow2 ubuntu-custom-v1.qcow2
作業時間をさらに短縮するには、すべてのオプションを1つのコマンドにまとめるのが効率的です。これにより、イメージのマウント/アンマウントを繰り返す手間が省けます:
virt-customize -a my-image.qcow2 \
--hostname my-vm \
--root-password password:secret \
--ssh-inject root:file:~/.ssh/id_rsa.pub \
--install nginx,git \
--selinux-relabel
virt-customizeを使いこなすことは、プロフェッショナルなInfrastructure as Code (IaC) への第一歩です。重たいイメージを使い回す代わりに、わずか数秒で独自の軽量テンプレートを作成できるようになります。

