virt-customizeでLinux Cloud Imageをカスタマイズ:VM起動不要で高速・軽量

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

テスト環境構築で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-customizelibguestfs-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) への第一歩です。重たいイメージを使い回す代わりに、わずか数秒で独自の軽量テンプレートを作成できるようになります。

Share: