はじめに #
KVM 環境で Ubuntu 26.04 の VM を何度も作成する機会があり、毎回インストーラーを手動操作するのが手間だったため、完全ノータッチで VM を立ち上げる構成を整えた。
autoinstall は Ubuntu のインストーラー(Subiquity)が提供する機能で、設定ファイルを seed ISO として渡すだけで、対話操作なしにインストールが自動で完了する。
autoinstall の仕組み #
Ubuntu 20.04 以降のサーバーインストーラー(Subiquity)は autoinstall という設定ファイル形式をサポートしている。#cloud-config ヘッダーを持つ YAML ファイルに、ロケール・ネットワーク・ストレージ・ユーザーなどを記述しておくと、インストーラーが対話なしに処理を進める。
この設定ファイル(user-data)をインストーラーに渡す方法はいくつかあるが、今回は NoCloud データソースを使った seed ISO 方式を採用した。
seed ISO の中身は user-data と meta-data の 2 ファイルだけで、ボリュームラベルを cidata にするルールがある。
セットアップ手順 #
1. パスワードハッシュ生成 #
autoinstall の identity.password には平文ではなく SHA-512 ハッシュを渡す必要がある。openssl passwd -6 で生成する。
PASSWORD_HASH=$(openssl passwd -6 "${PASSWORD}")2. user-data の作成 #
#cloud-config
autoinstall:
version: 1
locale: ja_JP.UTF-8
keyboard:
layout: jp
network:
version: 2
ethernets:
enp1s0:
addresses:
- 192.168.122.43/24
gateway4: 192.168.122.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
storage:
layout:
name: lvm
identity:
hostname: ubuntu26
username: ubuntu
password: "$6$..." # SHA-512 ハッシュ
ssh:
install-server: true
allow-pw: true
packages:
- vim
- curl
- git
late-commands:
- echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntulate-commands はインストール完了直後にインストーラー環境から実行されるコマンドで、/target がインストール先ファイルシステムのマウントポイントになる。ここで sudo の NOPASSWD 設定を投入している。
3. seed ISO 作成 #
xorriso で user-data と meta-data を焼いて seed ISO を作成する。ボリュームラベル cidata が cloud-init の NoCloud データソース認識に必要。
xorriso -as mkisofs \
-volid cidata \
-joliet -rock \
-output seed.iso \
user-data \
meta-data4. ディスクイメージ作成 #
qemu-img create -f qcow2 ubuntu26.qcow2 20Gqcow2 形式の thin provisioning のため、実際の使用量に応じて拡張される。
5. virt-install 実行 #
virt-install \
--name ubuntu26 \
--vcpus 2 \
--memory 4096 \
--disk "path=ubuntu26.qcow2,format=qcow2" \
--location "ubuntu-26.04-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd" \
--disk "path=seed.iso,device=cdrom" \
--os-variant "ubuntu24.04" \
--network network=default \
--graphics none \
--console pty,target_type=serial \
--extra-args "console=ttyS0,115200n8 autoinstall ds=nocloud" \
--noautoconsole \
--wait -1--extra-args に autoinstall ds=nocloud を渡すことで、インストーラーが seed ISO から user-data を読み込む。--wait -1 でインストール完了まで待機する。--os-variant は Ubuntu 26.04 のエントリが libosinfo 未収録のため ubuntu24.04 を代用している。
まとめ #
| 項目 | 内容 |
|---|---|
| インストール方式 | autoinstall(Subiquity) |
| 設定の渡し方 | seed ISO(NoCloud データソース) |
| seed ISO 作成ツール | xorriso |
| ネットワーク | netplan 静的IP |