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-dataとmeta-dataを作成する - 取得確認と切り分けの観点を整理する
PXE / Autoinstall の役割分担
PXE boot では、最初に DHCP が client へ boot 情報を渡し、client は TFTP から bootloader を取得します。その後、GRUB が kernel と initrd を読み込み、Ubuntu installer は HTTP で ISO や NoCloud seed を参照します。
| 要素 | 役割 |
| DHCP | PXE client へ TFTP server と boot file 名を通知する |
| TFTP | grubnetx64.efi、grub.cfg、kernel、initrd を配布する |
| HTTP | Ubuntu ISO と Autoinstall seed を配布する |
| GRUB | boot menu と kernel parameter を管理する |
| Autoinstall | locale、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-templatebootloader と kernel / initrd を配置する
grubnetx64.efi を TFTP root に置きます。ISO から casper/vmlinuz と casper/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/initrdGRUB 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
EOFNoCloud seed を作成する
meta-data と user-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
EOFHTTP と 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.10DHCP 側で通知する内容
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.efi、grub.cfg、casper/vmlinuz、casper/initrdを取得できるか - HTTP で ISO、
user-data、meta-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-data と meta-data を分け、hostname、network、storage、SSH key を明確に管理します。PXE は便利ですが、DHCP と自動初期化の影響範囲が大きいため、検証 network から段階的に広げるのが安全です。



