Ubuntu 22.04 の Autoinstall は、インストール時の入力を user-data に寄せて、同じ条件のクリーンインストールを再現しやすくする仕組みです。検証用 VM、PXE 起動、初期構築の標準化に向いています。
この記事では、Ubuntu 22.04 Server の ISO 起動を前提に、NoCloud で meta-data と user-data を配布し、最小構成で自動インストールを流す手順を確認します。現在の本番環境を変更する記事ではなく、既存の Ubuntu 22.04 手順を保守するための参考資料として扱います。
- Ubuntu 22.04 Autoinstall の位置づけ
- NoCloud 用の
meta-dataとuser-dataの配置 - パスワードハッシュ、ストレージ、ネットワークの最小例
- ISO 起動時の kernel parameter
- ログ確認と再実行時の注意点
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Autoinstall の位置づけ
Autoinstall は、Ubuntu Server インストーラーである Subiquity と cloud-init のデータを組み合わせて動きます。キーボード、ロケール、ユーザー、SSH、ネットワーク、ストレージ、追加パッケージなどを事前に定義できます。
| 要素 | 役割 |
user-data | Autoinstall の本体設定を記述する |
meta-data | NoCloud datasource 用の補助ファイル |
ds=nocloud-net | HTTP で設定ファイルを取得する指定 |
late-commands | インストール終盤に実行する追加処理 |
作業ディレクトリを用意する
HTTP で配布する例として、Web サーバーの公開ディレクトリ配下に Autoinstall 用のディレクトリを作成します。
sudo mkdir -p /var/www/html/autoinstall
sudo touch /var/www/html/autoinstall/meta-data
sudo ls -la /var/www/html/autoinstallパスワードハッシュを作成する
identity.password には平文パスワードではなくハッシュを指定します。SSH 公開鍵認証を使う場合でも、検証用ユーザーの扱いを明示しておきます。
openssl passwd -6 -salt $(openssl rand -hex 8) 'replace-with-password'user-data を作成する
最小構成の user-data を作成します。インターフェイス名、公開鍵、パスワードハッシュ、ストレージ方針は環境に合わせて変更します。
sudo tee /var/www/html/autoinstall/user-data >/dev/null <<'EOF'
autoinstall:
version: 1
locale: ja_JP.UTF-8
keyboard:
layout: jp
identity:
hostname: ubuntu-2204
username: myadmin
realname: myadmin
password: "$6$replace-with-generated-password-hash"
ssh:
install-server: true
allow-pw: false
authorized-keys:
- ssh-ed25519 AAAAreplace-with-public-key
network:
version: 2
ethernets:
enp1s0:
dhcp4: true
storage:
layout:
name: direct
packages:
- qemu-guest-agent
late-commands:
- curtin in-target --target=/target systemctl enable ssh
EOF設定ファイルを確認する
YAML は空白の位置で意味が変わります。起動前にファイルの中身と HTTP 配布結果を確認します。
sudo test -s /var/www/html/autoinstall/user-data
sudo test -f /var/www/html/autoinstall/meta-data
curl -fsS http://127.0.0.1/autoinstall/user-data
curl -fsS http://127.0.0.1/autoinstall/meta-dataHTTP で配布できることを確認する
インストール対象のマシンから見える URL で取得できる必要があります。別ホストから同じ URL を確認し、firewall や経路の問題を切り分けます。
hostname -I
curl -fsS http://10.0.51.71/autoinstall/user-data
curl -fsS http://10.0.51.71/autoinstall/meta-dataISO 起動時の指定
Ubuntu Server ISO の起動時に kernel parameter として autoinstall と ds=nocloud-net を渡します。HTTP の URL は、インストール対象から到達できるアドレスにします。
linux /casper/vmlinuz ip=dhcp autoinstall ds="nocloud-net;s=http://10.0.51.71/autoinstall/"
initrd /casper/initrd
bootシリアルコンソールで確認する
仮想環境やリモートコンソールで確認する場合は、コンソール指定を追加します。画面が見えない場合でも、シリアル側にログを出せるようにします。
linux /casper/vmlinuz ip=dhcp autoinstall ds="nocloud-net;s=http://10.0.51.71/autoinstall/" console=ttyS0
initrd /casper/initrd
bootインストールログを確認する
失敗した場合は、インストーラーと cloud-init のログを確認します。YAML 構文、HTTP 取得、ストレージ指定、ネットワーク指定で止まることが多いです。
sudo ls -la /var/log/installer
sudo cat /var/log/installer/subiquity-server-debug.log
sudo cat /var/log/installer/autoinstall-user-data
sudo journalctl -u cloud-init --no-pager再実行時に注意すること
Autoinstall はディスク初期化を伴うため、再実行すると既存データを失う可能性があります。検証環境でも、対象ディスク、VM、ストレージ layout を確認してから実行します。
- 対象ディスクが想定どおりか確認する
- 既存 VM の再利用時は古い cloud-init 状態を消す
- HTTP 配布先を環境ごとに分ける
- SSH 公開鍵と初期ユーザーを固定しすぎない
- 手順変更後はクリーンインストールで再確認する
meta-data と instance-id
meta-data は空でも動く構成がありますが、検証を繰り返す場合は instance-id を明示すると状態の追跡がしやすくなります。
sudo tee /var/www/html/autoinstall/meta-data >/dev/null <<'EOF'
instance-id: ubuntu-2204-autoinstall-001
local-hostname: ubuntu-2204
EOF
curl -fsS http://127.0.0.1/autoinstall/meta-data関連手順との使い分け
USB メディアだけで手作業インストールする場合は、ISO の書き込みと手入力で十分です。複数台や検証 VM を同じ条件で作り直す場合は、Autoinstall や PXE と組み合わせる方が再現性を高めやすくなります。
| 方式 | 向いている場面 |
| USB メディア | 単発の手作業インストール |
| Autoinstall | 同じ条件のクリーンインストール |
| PXE / Autoinstall | 複数台やリモート環境の初期構築 |
| テンプレート VM | 構築済み状態を複製する検証環境 |
まとめ
Ubuntu 22.04 の Autoinstall は、インストール手順を user-data と起動パラメータに寄せることで、クリーンインストールの再現性を高める仕組みです。最初は DHCP、最小ストレージ、SSH 公開鍵、HTTP 配布確認までに範囲を絞ると切り分けしやすくなります。
運用では、対象ディスク、ネットワーク到達性、YAML 構文、ログ確認、再実行時のデータ消失を必ず確認します。PXE と組み合わせる場合も、まず単体の NoCloud 配布で user-data が読み込まれることを確認してから広げます。

