手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 KVM VM テンプレートの作成 – autoinstall と qcow2 の複製元を作る

Ubuntu 26.04 仮想化基盤の関連記事

この記事では、Ubuntu 26.04 の KVM 環境で再利用する VM テンプレートを作成する流れを整理します。ここでいうテンプレートは、後続の VM 作成で複製元にする qcow2 イメージです。

ISO、autoinstall、virt-install、qcow2、UEFI / OVMF、停止済みテンプレートという流れを分けて確認します。VM テンプレートは単なるインストール済みイメージではなく、後続の VM 作成で設定の揺れを減らすための複製元です。

この記事で扱うこと
  • VM テンプレートを作る目的
  • 既存 domain と qcow2 の整合性確認
  • ISO と autoinstall seed の準備
  • virt-install によるテンプレート VM の作成
  • インストール完了後に停止した qcow2 をテンプレートとして残す考え方
対象 OSUbuntu 26.04 Server
仮想化基盤KVM / QEMU / libvirt
テンプレート形式qcow2
インストール方式Ubuntu Server ISO + autoinstall
接続 URIqemu:///system
  1. 既存 domain と qcow2 の状態を確認する
  2. ISO とイメージ格納先を確認する
  3. autoinstall seed を HTTP で参照できるようにする
  4. virt-install でテンプレート VM を作成する
  5. インストール完了と停止状態を確認する
  6. libvirt domain を削除し、qcow2 をテンプレートとして残す
参考
書籍
参考書籍

作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ

ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

VM テンプレートを作る目的

VM を毎回 ISO からインストールすると、時間がかかり、初期設定の揺れも発生します。テンプレート用の qcow2 を一度作っておくと、後続の VM はそのイメージを複製して作成できます。

ここでは、テンプレート VM を一時的に libvirt domain として作成し、autoinstall でインストールを完了させます。インストール後に VM が停止したら、domain を undefine して qcow2 イメージだけを残します。

テンプレートは実行中の VM ではなく、複製元として保管する停止済みのディスクイメージです。後続の VM 作成では、この qcow2 をコピーして個別 VM 用のディスクを作ります。

既存 domain と qcow2 の状態を確認する

テンプレート作成をやり直す前に、libvirt domain と qcow2 の状態を分けて確認します。domain が残っているのにディスクがない、またはディスクだけが残っている、という状態を放置すると、再実行時に意図しない上書きや失敗につながります。

コマンド
virsh --connect qemu:///system dominfo ubuntu-template-40g
test -e /var/lib/libvirt/images/ubuntu-template-40g.qcow2
ls -lh /var/lib/libvirt/images/ubuntu-template-40g.qcow2
domain が存在せず、qcow2 だけが存在する場合は、テンプレート作成済みとして扱えます。domain が存在するのに qcow2 がない場合は中途半端な状態なので、domain の削除や作り直しを先に判断します。

ISO とディレクトリを確認する

Ubuntu Server ISO と、VM イメージを置くディレクトリを確認します。ISO は /var/lib/libvirt/images/iso、VM イメージは /var/lib/libvirt/images に置く例にします。

コマンド
sudo install -d -o root -g root -m 0755 /var/lib/libvirt/images
sudo install -d -o root -g root -m 0755 /var/lib/libvirt/images/iso
ls -lh /var/lib/libvirt/images/iso
ls -ld /var/lib/libvirt/images

ISO ファイル名は環境に合わせます。記事では例として ubuntu-26.04-live-server-amd64.iso を使います。実際の ISO 名が異なる場合は読み替えます。

autoinstall seed を用意する

Ubuntu Server の自動インストールでは、NoCloud datasource として user-datameta-data を参照させます。ここでは HTTP で seed を配信する前提にします。

コマンド
sudo install -d -o root -g root -m 0755 /var/www/html/autoinstall/ubuntu-template
sudo touch /var/www/html/autoinstall/ubuntu-template/meta-data
sudo chmod 0644 /var/www/html/autoinstall/ubuntu-template/meta-data

user-data には実際の初期ユーザー、SSH 鍵、パッケージ、後処理などを定義します。ここでは構造を示すための最小例に留めます。実運用ではパスワードや秘密情報を記事の例に直接入れないようにします。

設定ファイル例
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu-template
    username: ubuntu
    password: "$6$CHANGE_ME_HASHED_PASSWORD"
  ssh:
    install-server: true
    allow-pw: false
  packages:
    - qemu-guest-agent
  late-commands:
    - curtin in-target --target=/target -- systemctl enable qemu-guest-agent

HTTP で参照できることを確認します。例では seed 配信元を 192.0.2.10 としています。これは記事用の例示アドレスです。

コマンド
curl -I http://192.0.2.10/autoinstall/ubuntu-template/user-data
curl -I http://192.0.2.10/autoinstall/ubuntu-template/meta-data

virt-install スクリプトを作成する

virt-install でテンプレート VM を作成します。重要なのは、インストール元 ISO、autoinstall seed URL、qcow2 ディスク、UEFI boot、シリアルコンソールを明示することです。テンプレート作成では、VM を使い続けることではなく、インストール済み qcow2 を安全に残すことが目的になります。

設定ファイル例
sudo tee /usr/local/bin/virt-install-ubuntu-template-40g.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
virt-install \
  --connect qemu:///system \
  --name ubuntu-template-40g \
  --os-variant ubuntu24.04 \
  --vcpus 2 \
  --memory 4096 \
  --machine q35 \
  --disk path=/var/lib/libvirt/images/ubuntu-template-40g.qcow2,size=40,format=qcow2,sparse=true \
  --location /var/lib/libvirt/images/iso/ubuntu-26.04-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd \
  --extra-args 'cloud-config-url=/dev/null ip=dhcp autoinstall ds=nocloud-net;s=http://192.0.2.10/autoinstall/ubuntu-template/ console=ttyS0' \
  --boot uefi \
  --network network=default \
  --graphics none \
  --console pty,target_type=serial \
  --noautoconsole
EOF
sudo chmod 0755 /usr/local/bin/virt-install-ubuntu-template-40g.sh
--os-variant は利用している libosinfo の定義に依存します。Ubuntu 26.04 用の定義がまだない環境では、近い Ubuntu の variant を指定することがあります。ここでは例として ubuntu24.04 を使っていますが、利用環境で osinfo-query os を確認して調整します。

テンプレート VM を作成する

作成したスクリプトを実行します。autoinstall が正しく動くと、インストール完了後に VM は停止します。テンプレート作成では、この停止状態になることが重要です。

コマンド
sudo /usr/local/bin/virt-install-ubuntu-template-40g.sh

別端末で libvirt domain の状態を確認します。インストール中は running、完了後は shut off になります。

コマンド
virsh --connect qemu:///system dominfo ubuntu-template-40g
virsh --connect qemu:///system domstate ubuntu-template-40g
ls -lh /var/lib/libvirt/images/ubuntu-template-40g.qcow2

libvirt domain を削除して qcow2 を残す

テンプレート VM が停止したら、libvirt domain を削除します。ここで削除するのは domain 定義であり、テンプレートとして使う qcow2 は残します。UEFI / OVMF を使うため、NVRAM も合わせて削除します。

コマンド
sudo virsh --connect qemu:///system undefine ubuntu-template-40g --nvram
ls -lh /var/lib/libvirt/images/ubuntu-template-40g.qcow2

この状態で残った ubuntu-template-40g.qcow2 が、後続の VM 作成で複製元になります。テンプレート自体を起動して使い続けるのではなく、コピーして個別 VM 用のディスクを作るのが基本です。

複数サイズのテンプレートを作る場合

用途に応じて 40GB、80GB など複数のテンプレートを用意することもできます。大きなテンプレートを一つだけ作るより、用途別にサイズを分けておくと、後続の VM 作成で扱いやすくなります。

テンプレート名用途ディスクサイズ
ubuntu-template-40g.qcow2小規模 VM、検証用40GB
ubuntu-template-80g.qcow2少し余裕を持たせたい VM80GB

確認ポイント

  • Ubuntu Server ISO が存在する
  • autoinstall の user-datameta-data を HTTP で取得できる
  • virt-install がエラーなく完了する
  • インストール完了後に VM が shut off になる
  • virsh undefine --nvram 後も qcow2 が残っている
  • 作成済みテンプレートを再実行で上書きしない運用になっている

まとめ

KVM の VM テンプレートは、後続の VM 作成を安定させるための複製元です。ISO、autoinstall、virt-install、qcow2、UEFI / OVMF、停止状態の確認を分けて考えると、テンプレート作成の流れが整理しやすくなります。

この段階でテンプレート qcow2 ができていれば、次はそのイメージを複製して、個別の VM 定義、ネットワーク、CPU、メモリ、ディスクを設定する流れに進めます。

Ubuntu 26.04 仮想化基盤の関連記事
Ubuntu 26.04 KVM VM テンプレートの作成 – autoinstall と qcow2 の複製元を作る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る