手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 PXE / Autoinstall 自動インストール – DHCP / TFTP / HTTP を連携させる

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 は複数のサービスが連携します。どこで止まっているかを判断するため、役割を分けて確認します。

役割確認すること
DHCPIP アドレス、next-server、filename を通知する
TFTPGRUB、kernel、initrd を配布する
HTTPISO、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/autoinstall

ISO を 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.iso

ISO から kernel と initrd を取り出す

TFTP で配布する vmlinuzinitrd を 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 -ls

GRUB 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.efi

GRUB 設定を作成する

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.cfg

Autoinstall 設定を配置する

user-datameta-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-data

DHCP の通知内容を確認する

DHCP 側では、PXE クライアントへ TFTP サーバーと boot file を通知します。next-serverfilename が TFTP 側の配置と一致していることを確認します。

grep -E "next-server|filename" /etc/dhcp/dhcpd.conf
ls -l /srv/tftp/grubx64.efi
sudo systemctl status isc-dhcp-server --no-pager

TFTP で取得できることを確認する

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.cfg

HTTP で取得できることを確認する

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 読み込みの順に確認します。各段階を小さく検証してから連携させることで、問題箇所を見つけやすくなります。

関連する記事
Ubuntu 22.04 PXE / Autoinstall 自動インストール – DHCP / TFTP / HTTP を連携させる

コメントを残す

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

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

トップへ戻る