PXE 启动设置#

dgx-server UEFI BIOS 支持 PXE 启动。需要几个手动自定义步骤才能使 PXE 启动基础操作系统镜像。

注意

本文档旨在作为参考使用。未提供配置 DHCP、HTTP 和 TFTP 服务器的明确说明。最终用户的 IT 团队应配置这些服务器以适应其公司的环境和安全准则。

要求#

  • TFTP 服务器

    • 提供 TFTP 服务的软件。

  • HTTP 服务器

    • HTTP 服务器用于传输大型文件,例如 iso 镜像和 initrd。或者,TFTP 也可用于此目的。以下示例中使用 HTTP。

  • DHCP 服务器

    • 提供动态主机配置协议 (DHCP) 服务的软件。

      注意

      TFTP 服务器、HTTP 服务器和 DHCP 服务器都可以配置在同一系统上,或者它们可以分别位于不同的系统上。

  • Linux 引导加载程序

  • IP 地址:<ftp ip>

  • 完全限定主机名:<ftp host>

本主题提供有关如何为 DGX 系统设置 PXE 启动环境的一些指导。有关完整详细信息,请参阅在线文档以了解如何设置 PXE 启动服务器。在此示例中,xinetd 用于提供 TFTP 服务;dnsmasq 用于提供 DHCP 服务;syslinux 用作引导加载程序。

PXE 服务器概述#

PXE 服务器需要在以下区域进行配置

  • 引导加载程序 (grub)

  • TFTP 内容(内核和 initrd

    在此示例中,TFTP 配置为从 /local/tftp/ 提供文件。您需要配置 TFTP 服务器以从 /local/tftp 或您希望使用的目录提供文件。

  • HTTP 内容(iso 镜像)

    在此示例中,HTTP 配置为从 /local/http/ 提供文件。您需要配置 HTTP 服务器以从 /local/http 或您希望使用的目录提供文件。

  • DHCP

PXE 服务器配置#

x86_64 说明

在此示例中,HTTP 和 TFTP 服务器上的目录结构如下所示

/local/
   http/
      base_os_7.0.0/
         base_os_7.0.0.iso
   tftp/
      grub2/
         base_os_7.0.0/
            vmlinuz
            initrd
      grub.cfg
      bootx64.efi
      grubx64.efi

注意

vmlinuzinitrd 文件是相对于 TFTP 根目录 /local/tftp/ 指定的;ISO base_os_7.0.0.iso 的位置是相对于 HTTP 根目录 /local/http/ 指定的。

在此,DHCP 和 PXE 服务器配置为使用上述目录结构。负责部署 PXE 环境的人员应更改目录名称和结构以适应其基础架构。

您可以在 HTTP 和 TFTP 服务器上类似地设置目录结构。

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

set default=0
set timeout=-1
insmod all_video

menuentry 'Install BaseOS 7.0.0' {
  linuxefi /grub2/base_os_7.0.0/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
  initrdefi /grub2/base_os_7.0.0/initrd
}

注意

内核启动参数应与 /mnt/boot/grub/grub.cfg 中找到的相应 ISO 的启动菜单内容匹配。

当要安装的系统通过 PXE 启动时,位于 /local/tftp 上的引导文件将从 TFTP 服务器检索。(在此示例中,TFTP 服务器由 xinetd 服务提供,其配置文件 /etc/xinetd.d/tftp 指定引导文件位于 /local/tftp。)当系统通过 PXE 启动时,DHCP 服务器的 dhcpd.conf 文件中指定的 bootx64.efi 文件将通过 TFTP 传输检索(请参阅 配置 DHCP 服务器)。默认情况下,在 bootx64.efi 启动后,PXE 启动 grub.cfg 文件(在本例中为 grub2/grub.cfg)提供用于进一步启动的菜单选项。PXE 启动 grub.cfg 配置文件指定内核和 initrd 文件相对于 tftp 目录的位置。

  • 配置 HTTP 目录

通过将 Base OS 7.0.0 ISO 的副本放置在目录 /local/http/base_os_7.0.0/ 中来配置 HTTP 文件目录和 ISO 镜像。在此示例中,完整路径为 /local/http/base_os_7.0.0/`base_os_7.0.0.iso

  • 通过以下步骤配置 TFTP 目录

挂载 Base OS 7.0.0 ISO。假设您的挂载点为 /mnt

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

将内核和 initrd 从 ISO 复制到 tftp 目录

cp /mnt/casper/vmlinuz /local/tftp/grub2/base_os_7.0.0/
cp /mnt/casper/initrd /local/tftp/grub2/base_os_7.0.0/

卸载 Base OS 7.0.0 ISO

umount /mnt
  • 下载 x86_64 的 GRUB 软件包并将 PXE 启动的 *.efi shim 二进制文件复制到位

cd /tmp
wget https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/grub2-efi-x64-2.06-94.el9.x86_64.rpm
wget https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/shim-x64-15-15.el8_2.x86_64.rpm

注意

如果 https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages 上不存在 grub2-efi-x64-2.06-94.el9.x86_64.rpmshim-x64-15-15.el8_2.x86_64.rpm,请使用来自同一 https 位置的任一文件的最新版本。

使用以下命令解压 RPM

rpm2cpio grub2-efi-x64-2.06-94.el9.x86_64.rpm | cpio -idmv
rpm2cpio shim-x64-15-15.el8_2.x86_64.rpm | cpio -idmv

将以下二进制文件从解压后的 RPM 复制到 /local/tftp/grub2/

cp -p $(find . -name shimx64.efi) /local/tftp/grub2/shimx64.efi
cp -p $(find . -name grubx64.efi) /local/tftp/grub2/grubx64.efi
cd -

/local/tftp/grub2/ 中创建 shimx64.efi 的副本,并将副本命名为 bootx64.efi

cp -p /local/tftp/grub2/shimx64.efi /local/tftp/grub2/bootx64.efi

有关更多信息,请参阅 如何在 amd64 上网络启动服务器安装程序

x86_64 备用说明(如果 initrd 文件通过 TFTP 传输超时)

在某些情况下,initrd 的传输可能会通过 TFTP 超时。对此的一种解决方法是通过 HTTP 托管所需的文件 - initrdvmlinuz 和 ISO。通过 HTTP 托管这些文件可以使传输更快、更可靠。在此示例中,假设 HTTP 服务器文件从 /local/http 托管。HTTP 和 TFTP 服务器上的目录结构如下所示

/local/
   http/
      base_os_7.0.0/
         base_os_7.0.0.iso
         vmlinuz
         initrd
   tftp/
      grub2/
         grub.cfg
         bootx64.efi
         grubx64.efi

注意

在这种备用配置方法中,vmlinuzinitrd 文件以及 ISO base_os_7.0.0.iso 现在都相对于 HTTP 根目录 /local/http/ 指定。

以这种方式配置时,grub.cfg 文件将包含如下所示的文本

set default=0
set timeout=-1
insmod all_video

menuentry 'Install BaseOS 7.0.0'  {
  linuxefi (http,<HTTP Server IP>)/base_os_7.0.0/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
  initrdefi (http,<HTTP Server IP>)/base_os_7.0.0/initrd
}

注意

内核启动参数应与 /mnt/boot/grub/grub.cfg 中找到的相应 ISO 的启动菜单内容匹配。

ARM64 说明

下载指定了正确架构的相关 grub 软件包

wget https://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/grub2-efi-aa64-2.06-94.el9.aarch64.rpm

使用以下命令解压 RPM

rpm2cpio grub2-efi-aa64-2.06-94.el9.aarch64.rpm | cpio -idmv

将以下二进制文件从解压后的 RPM 复制到 /local/tftp/grub2/

grubaa64.efi

HTTP 和 TFTP 服务器上的目录结构示例可能类似于

/local/
   http/
      base_os_7.0.0/
         base_os_7.0.0.iso
         vmlinuz
         initrd
   tftp/
      grub2/
         grub.cfg
         bootx64.efi
         grubaa64.efi

以这种方式配置时,grub.cfg 文件将包含类似于以下的行

set default=0
set timeout=-1
insmod all_video

menuentry 'Install BaseOS 7.0.0' {
    linuxefi (http,<HTTP Server IP>)/base_os_7.0.0/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
    initrdefi (http,<HTTP Server IP>)/base_os_7.0.0/initrd

注意

内核启动参数应与 /mnt/boot/grub/grub.cfg 中找到的相应 ISO 的启动菜单内容匹配。

TFTP 和 HTTP 服务器验证#

在设置 PXE 服务器的所有元素后,在执行 PXE 安装之前,请验证 TFTP 和 HTTP 服务器是否正常工作。

TFTP 服务器验证

要验证 TFTP 服务器是否已正确设置,请从同一子网上的不同系统使用 tftp 获取将在 PXE 启动期间通过 tftp 获取的文件之一。在此示例中,TFTP 服务器已设置为从 /local/tftp 提供文件。grub 配置文件 grub.cfg 位于 /local/tftp/grub2/grub.cfg 上;因此,从 TFTP 命令提示符,通过 get grub2/grub.cfg 请求 grub.cfg。

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

HTTP 服务器验证

要验证 HTTP 服务器是否已正确设置,请使用 wget 命令获取将在 PXE 启动期间通过 HTTP 获取的文件之一。在此示例中,HTTP 服务器已设置为从 /local/http 提供文件。ISO base_os_7.0.0.iso 位于 /local/http/base_os_7.0.0/base_os_7.0.0.iso 上;因此,通过运行以下命令测试检索 base_os_7.0.0.iso 的 HTTP 请求

cd /tmp
wget http://<HTTP Server IP>/baseos-7/base_os_7.0.0.iso

用于配置系统网络接口的有用参数#

ip=dhcp:告诉 initramfs 使用 DHCP 自动配置系统的接口。

  • 如果只有一个接口连接到网络,这应该就足够了。

  • 如果多个接口连接到网络,则将使用第一个收到回复的接口。

基础操作系统安装程序独有的参数#

  • rebuild-raid 告诉安装程序在指定时重建数据 RAID。从出厂状态安装时应始终指定此参数,但在其他情况下是可选的。

  • md5checkdisc 指定此参数时不会执行安装。它只会解压 ISO 并检查其内容是否与 md5sum.txt 中描述的内容匹配。

  • offwhendone 在安装后关闭系统电源。否则,我们会在完成后重新启动。出厂安装将指定此参数。

  • nooemconfig 跳过 oemconfig 并创建默认用户 nvidia,播种初始密码。用于 PXE 安装或自动 VM 创建/安装中的无人值守安装。

  • force-ai 允许您提供自动安装文件。如果网络已设置,您可以提供 URL。否则,这必须是安装程序中存在的文件。

例如

force-ai=/ai/dgx_a100-ai.yaml
force-ai=http://your-server.com/your-ai.yaml

注意

有关在使用自定义自动安装文件以及 force-ai 参数时的特殊格式注意事项,请参阅 自动安装自定义 部分的注释。

配置 DHCP 服务器#

除了提供动态 IP 地址的通常作用之外,DHCP 服务器还负责提供 TFTP 服务器的 IP 地址和引导加载程序文件的名称。TFTP 服务器的地址在 DHCP 配置文件中指定为 next-server,引导加载程序文件指定为 filename。架构选项可用于检测客户端系统的架构并提供正确版本的 grub 引导加载程序(x86、IA-32、ARM 等)。

dhcpd.conf 的 PXE 部分的示例如下

class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";

next-server <TFTP_Server_IP>;

   # x86 UEFI
   if option arch = 00:06 {
      filename "grub2/bootx64.efi";
   # x64 UEFI
   } else if option arch = 00:07 {
      filename "grub2/bootx64.efi";
   # ARM 64-bit UEFI
   } else if option arch = 00:0b {
      filename "grub2/grubaa64.efi";
   } else {
      filename "pxelinux.0";
   }
}

下面显示了 dhcpd.conf 的系统子网部分的示例。目标网络为 10.10.10.0。DHCP 服务器将从指定的范围分配特定的 IP 地址。可以配置特定的 IP 地址。有关更多详细信息,请查阅 DHCP 服务器的 PXE 安装设置文档说明。

subnet 10.10.10.0 netmask 255.255.255.0

{ option broadcast-address 10.10.10.255;
  option routers 10.10.10.1;
  option subnet-mask 255.255.255.0;
  option interface-mtu 9000;
  range 10.10.10.200 10.10.10.250; }

(可选)配置 CX-4/5/6/7 卡以进行 PXE 启动#

DGX 服务器也可以使用 MLNX CX-4/5/6 卡进行 PXE 启动。如果您已登录到 DGX 服务器主机操作系统,并且运行 DGX Base OS 4.4 或更高版本,则可以使用 /usr/sbin/mlnx_pxe_setup.bash 工具执行本节中的步骤,该工具将启用找到的每个 MLNX Infiniband 设备的 UEFI PXE ROM。

否则,请继续执行以下手动步骤。

为 ConnectX 卡启用 UEFI#

要从 MLNX ConnectX-4/5/6/7 卡进行 PXE 启动,您必须首先启用要从中进行 PXE 启动的卡的 UEFI PXE ROM,因为默认情况下它是禁用的。这需要在 DGX 服务器主机操作系统本身上执行,不能远程完成。

按照使用 DOCA OFED 软件的这些步骤操作,该软件允许您安装与 MLNX_OFED 相同的驱动程序和工具。

  1. 要确定 MLNX ConnectX 卡的设备名称和当前配置,请运行 sudo mlxconfig query 命令

    $ sudo mlxconfig query
    
    Device #1:
    ----------
    
    Device type:    ConnectX4
    Name:           MCX455A-ECA_Ax
    Description:    ConnectX-4 VPI adapter card; EDR IB (100Gb/s) and 100GbE; single-port QSFP28; PCIe3.0 x16; ROHS R6
    Device:         /dev/mst/mt4115_pciconf3
    
    Configurations:                              Next Boot
             ...
             ...
             EXP_ROM_UEFI_x86_ENABLE             False(0)
             ...
             ...
    
  2. 启用 ConnectX 卡的 UEFI PXE ROM

    user@dgx1server$ sudo mlxconfig -y -d /dev/mst/mt4115_pciconf3 set EXP_ROM_UEFI_x86_ENABLE=1
    
  3. 重新启动服务器以使更改生效。

    user@dgx1server$ sudo reboot
    
  4. 重新启动后,确认配置已设置。

    user@dgx1server$ sudo mlxconfig query
    
    Device #1:
    ----------
    
    Device type:    ConnectX4
    Name:           MCX455A-ECA_Ax
    Description:    ConnectX-4 VPI adapter card; EDR IB (100Gb/s) and 100GbE; single-port QSFP28; PCIe3.0 x16; ROHS R6
    Device:         /dev/mst/mt4115_pciconf3
    
    Configurations:                              Next Boot
             ...
             ...
             EXP_ROM_UEFI_x86_ENABLE             True(1)
             ...
             ...
    

(可选)配置 DGX 服务器以自动进行 PXE 启动#

将 PXE 添加到 UEFI 启动顺序的顶部#

在具有 BMC 的系统上,您可以通过将 PXE 添加到 UEFI 启动顺序的顶部来指定 DGX 服务器进行 PXE 启动。这可以通过 IPMI 带外完成。

ipmitool -I lanplus -H <DGX_BMC_IP> -U <ADMIN> -P <PASSWORD> chassis bootdev pxe options=efiboot

注意

这仅将 DGX 服务器设置为 PXE 启动,但未指定尝试从哪个网络设备进行 PXE 启动的顺序。这是我们当前 UEFI 和 BMC 固件的限制。请参阅以下部分以指定网络设备启动顺序。

配置网络启动优先级#

UEFI 网络驱动器 BBS 优先级允许您指定要从中进行 PXE 启动的网络设备的顺序。要修改此设置,您必须重新启动 DGX 服务器,并在看到启动画面时按 F2Del 进入 UEFI 启动选择菜单。导航到 Boot 菜单,然后向下滚动到 UEFI NETWORK Drive BBS Priorities

_images/sbios-splash-screen-1.png

使用此菜单配置尝试从设备进行网络启动的顺序。

_images/sbios-splash-screen-2.png

保存并退出。

在完成网络启动优先级排序后,保存更改并重置。

_images/sbios-splash-screen-3.png

使 DGX 服务器进行 PXE 启动#

自动 PXE 启动过程#

如果您按照上面的可选步骤操作,您现在可以重新启动,UEFI 将尝试使用网络驱动器 BBS 优先级列表中指定的顺序使用设备进行 PXE 启动。

手动 PXE 启动过程#

如果您想手动触发 PXE 启动,请重新启动 DGX 服务器,并在看到启动画面时按 F2Del 进入 UEFI 启动选择菜单。

导航到 Save & Exit 菜单,向下滚动到 Boot Override 部分,然后选择要从中启动的相应网络端口。仅当您启用该卡的 UEFI PXE ROM 时,MLNX 卡才会出现。

_images/sbios-splash-screen-4.png

或者,您可以按 SBIOS 启动画面上的 F12,SBIOS 将迭代遍历每个 NIC 并尝试在每个 NIC 上进行 PXE 启动。尝试 NIC 的顺序由网络驱动器 BBS 优先级指定。

其他 IPMI 启动选项#

有关通过 IPMI 指定启动顺序的更多信息,请参阅 ipmitool 手册页中的 chassis 命令和 bootdev 子命令。

有关 IPMI 规范的更多信息,请参阅 智能平台管理接口规范 v2.0 rev. 1.1

自动安装自定义#

Base OS 7.x ISO 中有许多自动安装文件可供您参考;这些文件包含在

casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs

您可以挂载 ISO,然后挂载此 squashfs 以查看其中打包的许多自动安装文件

mkdir -p /tmp/iso_mnt
mkdir -p /tmp/squash_mnt
sudo mount /path/to/DGXOS-<version>-<date>.iso /tmp/iso_mnt/
sudo mount /tmp/iso_mnt/casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs /tmp/squash_mnt/
find /tmp/squash_mnt/ai/ -name '*.yaml'

对于某些部署,您可能希望使用自己的自动安装文件。本节将介绍内置自动安装文件中包含的一些部分,以及如何执行一些常见的自定义。

注意

安装程序期望使用统一的自动安装文件,而不是典型的拆分供应商/用户/元数据格式。这意味着用户提供的自动安装文件将需要考虑一些格式差异,即需要删除 autoinstall: 关键字,并相应地调整缩进

#
# typical user-data file
#
#cloud-config
autoinstall:
  version: 1
  identity:
    realname: 'DGX User'
    username: dgxuser
    password: '$6$g3vXaGj.MQpP/inN$l6.JtAueRAfMtQweK7qASjxXiEX8Vue3CvRcwON81Rt9BJmlEQKtnfOVSnCqHrTsy88PbMDDHq6k.iM6PWfHr1'

#
# unified autoinstall file
#
version: 1
identity:
  realname: 'DGX User'
  username: dgxuser
  password: '$6$g3vXaGj.MQpP/inN$l6.JtAueRAfMtQweK7qASjxXiEX8Vue3CvRcwON81Rt9BJmlEQKtnfOVSnCqHrTsy88PbMDDHq6k.iM6PWfHr1'

NVIDIA 特定的自动安装变量#

ISO 中包含的自动安装文件是特定于平台的,并且可以作为自定义版本的良好起点。它们中的许多文件都包含以 CHANGE_ 为前缀的变量,这些变量将被安装程序替换

  • CHANGE_STORAGE_REG 当不存在启动参数 ai-encrypt-root 时,这将删除并取消注释。取消注释此节会导致标准的磁盘分区方案,而无需 LUKS 加密。

  • CHANGE_STORAGE_ENC 当存在启动参数 ai-encrypt-root 时,这将删除并取消注释。取消注释此节会导致加密的根分区。

  • CHANGE_BOOT_DISK_NAME_x 这是一个磁盘名称,不带 /dev 前缀。对于期望 RAID 引导设备的平台(例如 DGX A100),可能存在多个(例如,CHANGE_BOOT_DISK_NAME_1CHANGE_BOOT_DISK_NAME_2)。

    注意

    安装程序将找到要在此处替换的相应磁盘名称。或者,可以使用 force-bootdisk 参数来指定磁盘名称。

  • CHANGE_BOOT_DISK_PATH_x 这与上面的 CHANGE_BOOT_DISK_NAME_x 变量相同,只不过它以 /dev/ 为前缀。

  • CHANGE_DESC_PLATFORM 安装程序将使用特定于平台的描述性名称替换此变量。

  • CHANGE_SERIAL_NUMBER 安装程序将使用 dmidecode 报告的序列号替换此变量。

  • CHANGE_INSTALL_PKGS 安装程序将使用特定于平台的软件包列表替换此值。软件包列表由 squashfs 中的 *-pkgs 文件指定。

    注意

    此处的软件包列表将包括 oem-config 及其依赖项。当您提供自己的自动安装文件时,您还希望执行 oem-config 提供的其他设置步骤,并在自动安装期间执行这些步骤。对于此用例,我们建议在 late-commands 部分中添加一个步骤以删除 oem-config 和 ubiquity 软件包

    late-commands:
     ...
     - curtin in-target -- apt-get purge -y oem-config ubiquity
    
  • CHANGE_REBUILD_RAID 这将根据是否存在 rebuild-raid 启动参数替换为 truefalse

  • CHANGE_IPMISOL 这将根据是否存在 ai-encrypt-root 启动参数替换为 truefalse。当我们使用加密设置系统时,我们还会撤消 IPMI 串行 over LAN 配置,以确保 LUKS 密码短语提示显示在控制台上而不是串行 over LAN 接口上。

注意

虽然可以自行替换这些值,但我们强烈建议让安装程序处理此操作。

常见自定义#

在本节中,我们将介绍一些在更自定义的部署中可能有用的常见自定义。

网络配置#

要在安装时配置网络,您可以将 network 部分添加到您的自动安装文件中。在此示例中,我们将创建一个 netplan 配置文件,该文件将 enp1s0f0 接口设置为使用 DHCP

network:
 version: 2
 ethernets:
   enp1s0f0:
    dhcp4: yes

创建用户#

要在安装时创建用户,您可以将 identity 部分添加到您的自动安装文件中。以下示例将系统主机名设置为 dgx,并创建一个用户 nvidia,密码为 nvidia

#  To generate an encrypted password:
#    printf '<plaintext_password>' | openssl passwd -6 -stdin
#
#  For example:
#    printf 'nvidia' | openssl passwd -6 -stdin
identity:
  hostname: dgx
  password: $6$8fqF54QDoaLMtDXJ$J02iNH1xW9hHtzH6APpUX4X4HkRx2xY2ZKy9DQpGOQhW7OOuTk3DwHr9FnAAh1JIyqn3L277Jy9MEzW4MyVsV0
  username: nvidia

有关更多示例,请参阅 Ubuntu 安装文档中的 自动安装配置参考手册