手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 PXE / Autoinstall の基本設定 – DHCP / TFTP / HTTP を連携させる

Ubuntu 26.04 PXE / Autoinstall 関連の記事

Ubuntu 26.04 を物理サーバーや検証機へ繰り返しインストールする場合、PXE boot と Autoinstall を組み合わせると初期構築を再現しやすくなります。PXE は起動入口、Autoinstall は OS インストール内容、HTTP は ISO や NoCloud seed の配布、TFTP は最初の bootloader 配布を担当します。

この記事では、Ubuntu 26.04 の PXE / Autoinstall を、DHCP、TFTP、HTTP、GRUB、NoCloud seed、user-data / meta-data の境界に分けて構成します。既存の TFTP や DHCP の基本設定を前提に、Autoinstall 用のファイル配置と確認に焦点を当てます。

この記事で扱うこと
  • PXE / Autoinstall の役割分担を確認する
  • TFTP root と HTTP 配布 directory を用意する
  • GRUB の netboot 設定を作成する
  • NoCloud seed の user-datameta-data を作成する
  • 取得確認と切り分けの観点を整理する

PXE / Autoinstall の役割分担

PXE boot では、最初に DHCP が client へ boot 情報を渡し、client は TFTP から bootloader を取得します。その後、GRUB が kernel と initrd を読み込み、Ubuntu installer は HTTP で ISO や NoCloud seed を参照します。

要素役割
DHCPPXE client へ TFTP server と boot file 名を通知する
TFTPgrubnetx64.efigrub.cfg、kernel、initrd を配布する
HTTPUbuntu ISO と Autoinstall seed を配布する
GRUBboot menu と kernel parameter を管理する
Autoinstalllocale、network、storage、user、SSH、late-commands を定義する

directory を用意する

TFTP root 配下には GRUB と casper 用の directory を置き、HTTP 側には ISO と Autoinstall seed を置きます。ここでは TFTP root を /srv/tftp、HTTP document root を /var/www/html とします。

sudo install -d -o root -g root -m 0755 /srv/tftp/casper
sudo install -d -o root -g root -m 0755 /srv/tftp/grub
sudo install -d -o root -g root -m 0755 /var/www/html/iso
sudo install -d -o root -g root -m 0755 /var/www/html/autoinstall/ubuntu-template

bootloader と kernel / initrd を配置する

grubnetx64.efi を TFTP root に置きます。ISO から casper/vmlinuzcasper/initrd を取り出し、TFTP で取得できる場所に配置します。ISO ファイル名は実際の環境に合わせます。

sudo curl -L -o /srv/tftp/grubnetx64.efi https://releases.ubuntu.com/26.04/netboot/amd64/grubx64.efi
sudo mount -o loop,ro /var/www/html/iso/ubuntu-26.04-live-server-amd64.iso /mnt
sudo cp /mnt/casper/vmlinuz /srv/tftp/casper/vmlinuz
sudo cp /mnt/casper/initrd /srv/tftp/casper/initrd
sudo umount /mnt
sudo chmod 0644 /srv/tftp/grubnetx64.efi /srv/tftp/casper/vmlinuz /srv/tftp/casper/initrd

GRUB menu を作成する

grub.cfg では、installer が参照する ISO URL と NoCloud seed URL を指定します。ds=nocloud-net の URL は、末尾の / まで含めて指定します。

sudo tee /srv/tftp/grub/grub.cfg >/dev/null <<'EOF'
set timeout=30
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set web_server=192.0.2.10
set iso_url=http://${web_server}/iso/ubuntu-26.04-live-server-amd64.iso
set autoinstall_url=http://${web_server}/autoinstall
menuentry "Ubuntu 26.04 autoinstall ubuntu-template" {
  set gfxpayload=keep
  linux /casper/vmlinuz ip=dhcp url=${iso_url} autoinstall "ds=nocloud-net;s=${autoinstall_url}/ubuntu-template/" ---
  initrd /casper/initrd
}
if [ "$grub_platform" = "efi" ]; then
  menuentry "Boot from next volume" {
    exit 1
  }
  menuentry "UEFI Firmware Settings" {
    fwsetup
  }
fi
EOF

NoCloud seed を作成する

meta-datauser-data を HTTP で配布します。user-data には hostname、user、SSH、keyboard、storage、shutdown などを定義します。password hash や SSH 公開鍵は実環境の値に置き換えます。

sudo tee /var/www/html/autoinstall/ubuntu-template/meta-data >/dev/null <<'EOF'
instance-id: ubuntu-template
local-hostname: ubuntu-template
EOF
sudo tee /var/www/html/autoinstall/ubuntu-template/user-data >/dev/null <<'EOF'
#cloud-config
autoinstall:
  version: 1
  locale: en_US.UTF-8
  source:
    id: ubuntu-server
    search_drivers: false
  kernel:
    package: linux-generic
  identity:
    hostname: ubuntu-template
    username: admin
    realname: admin
    password: "$6$CHANGE_ME_HASHED_PASSWORD"
  ssh:
    install-server: true
    allow-pw: true
    authorized-keys:
      - "ssh-ed25519 CHANGE_ME_PUBLIC_KEY"
  keyboard:
    layout: jp
  shutdown: poweroff
  network:
    version: 2
    ethernets:
      enp1s0:
        dhcp4: true
        dhcp-identifier: mac
  storage:
    layout:
      name: lvm
EOF

HTTP と TFTP の取得を確認する

PXE client から見える network で、HTTP と TFTP の両方を確認します。HTTP だけ通っても TFTP が落ちていれば bootloader を取得できず、TFTP だけ通っても NoCloud seed が取れなければ自動インストールには進みません。

curl -I http://192.0.2.10/iso/ubuntu-26.04-live-server-amd64.iso
curl -I http://192.0.2.10/autoinstall/ubuntu-template/user-data
curl -I http://192.0.2.10/autoinstall/ubuntu-template/meta-data
printf 'get grubnetx64.efi\nquit\n' | tftp 192.0.2.10

DHCP 側で通知する内容

DHCP server では、PXE client に TFTP server と boot file 名を通知します。環境によって DHCP server の実装は異なりますが、UEFI x86_64 では grubnetx64.efi を配る構成が基本になります。

next-server 192.0.2.10;
filename "grubnetx64.efi";

切り分けの見方

PXE / Autoinstall は複数サービスの連携なので、失敗箇所を分けます。DHCP で boot 情報を受け取れない、TFTP で GRUB を取得できない、GRUB は出るが kernel parameter が違う、HTTP で seed を取れない、Autoinstall の YAML が通らない、というように段階ごとに確認します。

確認するポイント
  • DHCP が TFTP server と boot file 名を通知しているか
  • TFTP で grubnetx64.efigrub.cfgcasper/vmlinuzcasper/initrd を取得できるか
  • HTTP で ISO、user-datameta-data を取得できるか
  • ds=nocloud-net;s=... の URL 末尾に / があるか
  • Autoinstall の storage 定義が対象 disk と合っているか

まとめ

Ubuntu 26.04 の PXE / Autoinstall は、DHCP、TFTP、HTTP、GRUB、NoCloud seed を分けて見ると理解しやすくなります。TFTP は起動入口、HTTP は ISO と seed の配布、Autoinstall は OS の初期状態定義という役割です。

実運用では、対象ホストごとに user-datameta-data を分け、hostname、network、storage、SSH key を明確に管理します。PXE は便利ですが、DHCP と自動初期化の影響範囲が大きいため、検証 network から段階的に広げるのが安全です。

関連する記事
Ubuntu 26.04 PXE / Autoinstall の基本設定 – DHCP / TFTP / HTTP を連携させる

コメントを残す

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

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

トップへ戻る