Skip to main content

KVM/virsh で Ubuntu 26.04 を自動セットアップ — autoinstall + seed ISO

Author
blackratel

はじめに
#

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-datameta-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/ubuntu

late-commands はインストール完了直後にインストーラー環境から実行されるコマンドで、/target がインストール先ファイルシステムのマウントポイントになる。ここで sudo の NOPASSWD 設定を投入している。

3. seed ISO 作成
#

xorrisouser-datameta-data を焼いて seed ISO を作成する。ボリュームラベル cidata が cloud-init の NoCloud データソース認識に必要。

xorriso -as mkisofs \
  -volid cidata \
  -joliet -rock \
  -output seed.iso \
  user-data \
  meta-data

4. ディスクイメージ作成
#

qemu-img create -f qcow2 ubuntu26.qcow2 20G

qcow2 形式の 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-argsautoinstall 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