PXE / Autoinstall を使うと、Ubuntu 22.04 Server をネットワーク起動し、インストーラーへの入力を user-data に寄せて自動インストールできます。DHCP、TFTP、HTTP の役割を分けて確認すると、起動できないときの切り分けがしやすくなります。
この記事では、Ubuntu 22.04 の PXE / Autoinstall 検証として、DHCP で bootloader の場所を通知し、TFTP で GRUB と kernel / initrd を配布し、HTTP で ISO と Autoinstall 設定を配布する流れを確認します。Ubuntu 22.04 は既存手順の保守対象として扱います。
- PXE / Autoinstall の全体像
- DHCP、TFTP、HTTP の役割分担
- ISO、kernel、initrd、GRUB 設定の配置
- Autoinstall 用
user-dataの配布 - 起動できないときの切り分け順序
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
全体の役割を分ける
PXE / Autoinstall は複数のサービスが連携します。どこで止まっているかを判断するため、役割を分けて確認します。
| 役割 | 確認すること |
| DHCP | IP アドレス、next-server、filename を通知する |
| TFTP | GRUB、kernel、initrd を配布する |
| HTTP | ISO、user-data、meta-data を配布する |
| Autoinstall | インストーラーの入力値を自動化する |
作業ディレクトリを用意する
TFTP と HTTP の配布先を分けて作成します。ここでは TFTP root を /srv/tftp、HTTP 配布先を /var/www/html とします。
sudo mkdir -p /srv/tftp/grub /srv/tftp/casper
sudo mkdir -p /var/www/html/iso /var/www/html/autoinstall
ls -ld /srv/tftp /var/www/html/iso /var/www/html/autoinstallISO を HTTP で配布する
Ubuntu Server ISO は HTTP で取得できる場所に置きます。PXE 起動後のインストーラーがこの ISO を取得します。
sudo cp ubuntu-22.04.5-live-server-amd64.iso /var/www/html/iso/
ls -lh /var/www/html/iso/ubuntu-22.04.5-live-server-amd64.iso
curl -I http://192.0.2.10/iso/ubuntu-22.04.5-live-server-amd64.isoISO から kernel と initrd を取り出す
TFTP で配布する vmlinuz と initrd を ISO から取り出します。
sudo mount /var/www/html/iso/ubuntu-22.04.5-live-server-amd64.iso /mnt
sudo cp /mnt/casper/vmlinuz /srv/tftp/casper/
sudo cp /mnt/casper/initrd /srv/tftp/casper/
sudo umount /mnt
find /srv/tftp/casper -type f -lsGRUB EFI を配置する
UEFI PXE 用の GRUB EFI ファイルを TFTP root に配置します。ファイル名は DHCP の filename と合わせます。
sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/grubx64.efi
sudo chown -R tftp:tftp /srv/tftp
ls -l /srv/tftp/grubx64.efiGRUB 設定を作成する
GRUB から kernel と initrd を読み込み、HTTP 上の ISO と Autoinstall 設定を指定します。
sudo tee /srv/tftp/grub/grub.cfg >/dev/null <<'EOF'
set timeout=10
set default=0
menuentry "Ubuntu 22.04 Autoinstall" {
set gfxpayload=keep
linux /casper/vmlinuz ip=dhcp url=http://192.0.2.10/iso/ubuntu-22.04.5-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.0.2.10/autoinstall/
initrd /casper/initrd
}
EOF
sudo chown -R tftp:tftp /srv/tftp/grub
cat /srv/tftp/grub/grub.cfgAutoinstall 設定を配置する
user-data と meta-data を HTTP で配布します。パスワードハッシュと SSH 公開鍵は実環境に合わせて置き換えます。
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
storage:
layout:
name: direct
EOF
sudo tee /var/www/html/autoinstall/meta-data >/dev/null <<'EOF'
instance-id: ubuntu-2204-pxe-001
local-hostname: ubuntu-2204
EOF
curl -fsS http://192.0.2.10/autoinstall/user-data >/dev/null
curl -fsS http://192.0.2.10/autoinstall/meta-dataDHCP の通知内容を確認する
DHCP 側では、PXE クライアントへ TFTP サーバーと boot file を通知します。next-server と filename が TFTP 側の配置と一致していることを確認します。
grep -E "next-server|filename" /etc/dhcp/dhcpd.conf
ls -l /srv/tftp/grubx64.efi
sudo systemctl status isc-dhcp-server --no-pagerTFTP で取得できることを確認する
PXE 対象端末と同じネットワーク側から、GRUB と設定ファイルを TFTP で取得できることを確認します。
tftp 192.0.2.10 -m binary -c get grubx64.efi
rm -f grubx64.efi
tftp 192.0.2.10 -m binary -c get grub/grub.cfg
rm -f grub.cfgHTTP で取得できることを確認する
HTTP 側は、ISO と Autoinstall 設定を別々に確認します。TFTP は通るがインストーラーが進まない場合は HTTP 側を重点的に見ます。
curl -I http://192.0.2.10/iso/ubuntu-22.04.5-live-server-amd64.iso
curl -fsS http://192.0.2.10/autoinstall/user-data >/dev/null
curl -fsS http://192.0.2.10/autoinstall/meta-dataパケットとログを見る
PXE 起動が途中で止まる場合は、DHCP、TFTP、HTTP を分けてパケットとログを見ます。
sudo tcpdump -ni any port 67 or port 68 or port 69
journalctl -u isc-dhcp-server -n 100 --no-pager
journalctl -u tftpd-hpa -n 100 --no-pager起動順に切り分ける
PXE / Autoinstall は、段階ごとに見る対象が変わります。先の工程を疑う前に、前段が成功しているかを確認します。
| 止まる場所 | 見る対象 |
| IP が付かない | DHCP の subnet、range、INTERFACESv4 |
| bootloader が来ない | next-server、filename、TFTP root |
| kernel 起動後に止まる | ISO URL、HTTP 到達性 |
| 自動入力されない | user-data、meta-data、datasource 指定 |
USB メディアとの使い分け
単発のインストールであれば USB メディアが簡単です。PXE / Autoinstall は、複数台や検証環境を同じ条件で作り直したい場合に向いています。
- USB メディアは単発作業に向く
- PXE はネットワーク起動できる環境に向く
- Autoinstall は入力値を再現したい場合に向く
- DHCP / TFTP / HTTP のどこで止まるかを分けて確認する
まとめ
Ubuntu 22.04 の PXE / Autoinstall は、DHCP、TFTP、HTTP、Autoinstall 設定を分けて考えると扱いやすくなります。DHCP は boot file を通知し、TFTP は GRUB と kernel / initrd を配布し、HTTP は ISO と user-data を配布します。
起動できない場合は、IP 取得、TFTP 取得、HTTP 取得、Autoinstall 読み込みの順に確認します。各段階を小さく検証してから連携させることで、問題箇所を見つけやすくなります。

