PXE 启动设置

本页介绍如何为 DGX Spark 配置 PXE 启动环境,涵盖安装 DGX OS 镜像和恢复镜像两种场景所需的 TFTP、HTTP、DHCP 服务器配置,以及在 DGX Spark 上启用 PXE 启动的操作步骤。

DGX Spark 的 UEFI BIOS 支持 PXE 启动。若要通过 PXE 启动 DGX OS 镜像或 DGX Spark 恢复镜像,需要完成若干手动配置步骤。

CAUTION

本文档仅作参考之用,不提供配置 DHCP、HTTP 和 TFTP 服务器的详细操作指南。

前置条件

  • TFTP 服务器:提供 TFTP 服务的软件
  • HTTP 服务器:用于传输 ISO 镜像和 initrd 等大文件;也可使用 TFTP 替代
  • DHCP 服务器:提供动态主机配置协议服务
    • 以上三台服务器可配置在同一台机器上,也可分别部署在不同机器上
  • Linux 引导加载程序
  • IP 地址<ftp ip>
  • 完全限定主机名<ftp host>

本指南使用 xinetd 提供 TFTP 服务,使用 dnsmasq 提供 DHCP 服务,使用 syslinux 作为引导加载程序。

PXE 服务器概览

PXE 服务器需要对以下几个方面进行配置:

  • 引导加载程序(grub)
  • TFTP 内容(内核与 initrd
    • 配置为从 /local/tftp/ 目录提供文件服务
  • HTTP 内容(ISO 镜像)
    • 配置为从 /local/http/ 目录提供文件服务
  • DHCP

DGX OS 镜像的 PXE 服务器配置

HTTP 和 TFTP 服务器上的目录结构:

Text
/local/
   http/
      base_os_7.0.0/
         base_os_7.0.0.iso

   tftp/
      baseos/
         vmlinuz
         initrd
      grub/
         grub.cfg
      grubnetaa64.efi.signed

NOTE

vmlinuzinitrd 文件的路径相对于 TFTP 根目录 /local/tftp/base_os_7.0.0.iso 的路径相对于 HTTP 根目录 /local/http/

/local/tftp/grub/grub.cfg 文件的内容应如下所示:

Text
set default=0
set timeout=5

menuentry 'Install BaseOS 7.0.0' {
   linux /baseos/vmlinuz fsck.mode=skip autoinstall ip=dhcp url=http://<Server IP>/base_os_7.0.0/base_os_7.0.0.iso nvme-core.multipath=n nouveau.modeset=0
   initrd /baseos/initrd
}

NOTE

内核启动参数应与对应 ISO 启动菜单(位于 /mnt/boot/grub/grub.cfg)中的内容保持一致。

系统通过 PXE 启动时,TFTP 服务器上 /local/tftp 目录中的启动文件将被获取。DHCP 服务器 dhcpd.conf 中指定的 grubnetaa64.efi.signed 文件通过 TFTP 传输获取。启动后,PXE 启动的 grub.cfg 提供菜单选项,并指定内核和 initrd 相对于 TFTP 目录的路径。

配置 HTTP 目录

将 Base OS 7.0.0 ISO 的副本放置到目录 /local/http/base_os_7.0.0/ 下,完整路径为 /local/http/base_os_7.0.0/base_os_7.0.0.iso

配置 TFTP 目录

挂载 Base OS 7.0.0 ISO:

Bash
sudo mount -o loop /local/http/base_os_7.0.0/base_os_7.0.0.iso /mnt

将 ISO 中的内核和 initrd 复制到 TFTP 目录:

Bash
cp /mnt/casper/vmlinuz /local/tftp/baseos/vmlinuz
cp /mnt/casper/initrd /local/tftp/baseos/initrd

卸载 Base OS 7.0.0 ISO:

Bash
umount /mnt

下载 GRUB 二进制文件并复制用于 PXE 启动

Bash
cd /tmp
wget -q http://ports.ubuntu.com/ubuntu-ports/dists/jammy/main/uefi/grub2-arm64/current/grubnetaa64.efi.signed
cp grubnetaa64.efi.signed /local/tftp/

恢复镜像的 PXE 服务器配置

HTTP 和 TFTP 服务器上的目录结构:

Text
/local/
   http/
      fastos/
         usb.customer.tar.gz
   tftp/
      fastos/
         vmlinuz
         initrd
      grub/
         grub.cfg
      grubnetaa64.efi.signed

NOTE

vmlinuzinitrd 文件的路径相对于 TFTP 根目录 /local/tftp/usb.customer.tar.gz 的路径相对于 HTTP 根目录 /local/http/

/local/tftp/grub/grub.cfg 文件的内容应如下所示:

Text
set default=0
set timeout=5

menuentry "Install DGX Spark FastOS" {
    linux /fastos/vmlinuz nouveau.modeset=0 console=tty0 console=ttyS0,921600 sbsa_gwdt.action=1 noui pxeinstall=true fastos_usbimg_url=http://<Server IP>/fastos/usb.customer.tar.gz ip=dhcp static_ip=<static ip>:<gateway ip>
    initrd /fastos/initrd
}

系统通过 PXE 启动时,TFTP 服务器上 /local/tftp 目录中的启动文件将被获取。DHCP 服务器 dhcpd.conf 中指定的 grubnetaa64.efi.signed 文件通过 TFTP 传输获取。启动后,PXE 启动的 grub.cfg 提供菜单选项,并指定内核和 initrd 相对于 TFTP 目录的路径。

配置 HTTP 目录

将 DGX OS 作为 /local/http/usb.customer.tar.gz 存放。从 https://developer.nvidia.com/downloads/dgx-spark/dgx-spark-recovery-image-1.135.29.tar.gz 下载恢复镜像归档文件,并将其重命名为 usb.customer.tar.gz

配置 TFTP 目录

usb.customer.tar.gz 解压到 /tmp 目录:

Bash
tar xpfv /tmp/usb.customer.tar.gz

将内核和 initrd 从 tar 包复制到 TFTP 目录:

Bash
cp /tmp/usbimg.customer/usb/vmlinuz /local/tftp/fastos/
cp /tmp/usbimg.customer/usb/initrd /local/tftp/fastos/

下载 GRUB 二进制文件并复制用于 PXE 启动

Bash
cd /tmp
wget -q http://ports.ubuntu.com/ubuntu-ports/dists/jammy/main/uefi/grub2-arm64/current/grubnetaa64.efi.signed
cp grubnetaa64.efi.signed /local/tftp/

TFTP 和 HTTP 服务器验证

TFTP 服务器验证

要验证 TFTP 服务器是否已正确设置,可从同一子网上的另一台机器使用 tftp 命令获取 PXE 启动期间将通过 TFTP 获取的文件之一。TFTP 服务器配置为从 /local/tftp 提供文件服务,grub 配置文件位于 /local/tftp/grub/grub.cfg

Bash
cd /tmp
tftp <TFTP_Server_IP>
get grub/grub.cfg
quit

HTTP 服务器验证

要验证 HTTP 服务器是否已正确设置,可使用 wget 命令获取 PXE 启动期间将通过 HTTP 获取的文件之一。HTTP 服务器配置为从 /local/http 提供文件服务,tar 包位于 /local/http/fastos/usb.customer.tar.gz

Bash
cd /tmp
wget http://<HTTP Server IP>/fastos/usb.customer.tar.gz

配置网络接口的常用参数

static_ip=<static ip>:<gateway ip>:指示 initramfs 使用静态 IP 地址配置系统网络接口。

Spark OS 安装程序专用参数

  • usb.skipfw:安装过程中跳过固件更新步骤
  • usb.shell:启动 shell 而非安装操作系统
  • noui:安装过程中禁用用户界面
  • autoinstall:安装过程中启用自动安装功能

配置 DHCP 服务器

DHCP 服务器除了分配动态 IP 地址外,还提供 TFTP 服务器的 IP 地址和引导加载程序文件名。TFTP 服务器地址通过 next-server 指定,引导加载程序文件通过 filename 指定。架构选项用于检测客户端系统架构并提供正确版本的 grub 引导加载程序。

dhcpd.conf 中 PXE 部分的示例:

Text
class "pxeclients" {
  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    filename "grubnetaa64.efi.signed";
    next-server <TFTP_Server_IP>;
    option root-path "/local/tftp";
}

完整的 dhcpd.conf 示例文件:

Text
authoritative;
default-lease-time 120;
max-lease-time 120;
ddns-update-style none;

subnet 192.168.99.0 netmask 255.255.255.0 {
pool {
   range 192.168.99.2;

# Required for PXE Boot
class "pxeclients" {
   match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
      filename "grubnetaa64.efi.signed";
      # TFTP Server IP address
      next-server 192.168.99.1;
      option root-path "/local/tftp/";
}

}
}

在 DGX Spark 上启用 PXE 启动

启用 PXE 启动之前,请先在 UEFI 菜单中禁用安全启动(Secure Boot)功能,或在 UEFI 菜单中注册 grubnetaa64.efi.signed

通过 Network Stack Configuration 菜单在 DGX Spark 上启用 PXE 启动。

选择要用于 PXE 启动的网卡(NIC)并启用 PXE 启动。

保存并退出。

完成上述设置后,使用 UEFI 启动菜单进行 PXE 启动并调整启动顺序。详见 https://docs.nvidia.com/dgx/dgx-spark-uefi/boot-tab.html

本页译自 NVIDIA 官方文档 PXE Boot Setup,由社区整理,仅供参考;如与官方英文文档不一致,请以官方为准。