17 准备网络引导环境 #
本章介绍如何配置 DHCP 和 TFTP 服务器,以提供所需的基础结构来通过 PXE 进行引导。
可以通过预引导执行环境 (PXE) 安装 SUSE® Linux Enterprise Server。客户端硬件需支持通过 PXE 引导。网络需要提供 DHCP 服务器和 TFTP 服务器,以向客户端提供所需的数据。本章将引导您设置所需的服务器。
PXE 只会引导内核和 initrd。可以使用此方法引导进入安装环境或在线系统。要设置安装源,请参见第 16 章 “设置网络安装源”。
此部分讨论复杂引导场景中需要的配置任务。其中包含了 DHCP、PXE 引导、TFTP 和网络唤醒的“准备应用”配置示例。
这些示例假设 DHCP、TFTP 和 NFS 服务器都驻留在 IP 为 192.168.1.1
的同一台计算机上。所有服务都可以驻留在不同的计算机上,不会出现任何问题。请务必根据需要更改 IP 地址。
17.1 设置 DHCP 服务器 #
DHCP 服务器为网络客户端提供动态(第 17.1.1 节 “动态地址指派”)和静态 IP 地址指派(第 17.1.2 节 “指派静态 IP 地址”)。它会播发服务器、路由和域。对于 TFTP 服务器,DHCP 还提供内核和 initrd 文件。需要装载哪些文件取决于目标计算机的体系结构,以及使用的是传统 BIOS 还是 UEFI 引导方式。客户端会在其 DHCP 请求中传输其体系结构类型。DHCP 服务器根据此信息确定必须下载哪些文件用于引导。
从 SUSE Linux Enterprise 15.0 开始,某些特殊情况会导致 PXE 引导失败以及 AutoYaST 安装失败。有关详细信息和解决方法,请参见第 17.1.3 节 “PXE 和 AutoYaST 安装失败”。
17.1.1 动态地址指派 #
以下示例演示如何设置一个向客户端动态指派 IP 地址,以及播发服务器、路由器、域和引导文件的 DHCP 服务器。
以
root
登录到主管 DHCP 服务器的计算机。通过执行
systemctl enable dhcpd
启用 DHCP 服务器。向位于
/etc/dhcpd.conf
的 DHCP 服务器配置文件中的子网配置追加以下几行:# The following lines are optional option domain-name "my.lab"; option domain-name-servers 192.168.1.1; option routers 192.168.1.1; option ntp-servers 192.168.1.1; ddns-update-style none; default-lease-time 3600; # The following lines are required option arch code 93 = unsigned integer 16; # RFC4578 subnet 192.168.1.0 netmask 255.255.255.0 { next-server 192.168.1.1; range 192.168.1.100 192.168.1.199; default-lease-time 3600; max-lease-time 3600; if option arch = 00:07 or option arch = 00:09 { filename "/EFI/x86/grub.efi"; } else if option arch = 00:0b { filename "/EFI/aarch64/bootaa64.efi"; } else { filename "/BIOS/x86/pxelinux.0"; } }
此配置示例在 IP 为
192.168.1.0/24
的服务器上,使用包含 DHCP、DNS 和网关的子网192.168.1.1
。确保根据网络布局更改所有 IP 地址。关于dhcpd.conf
中可用选项的更多信息,请参见dhcpd.conf
手册页。执行
systemctl restart dhcpd
重启动 DHCP 服务器。
17.1.2 指派静态 IP 地址 #
DHCP 服务器还可以向网络客户端指派静态 IP 地址和主机名。一个用例是向服务器指派静态地址。另一个用例是仅限指派有静态 IP 地址且不提供动态地址池的客户端加入网络。
根据以下示例修改上述 DHCP 配置:
group { host test { hardware ethernet MAC_ADDRESS; fixed-address IP_ADDRESS; } }
host 语句指派安装目标的主机名。要将主机名和 IP 地址绑定到特定主机,必须指定客户端的硬件 (MAC) 地址。请将此示例中使用的所有变量替换为与您的环境匹配的实际值,然后保存更改并重启动 DHCP 服务器。
17.1.3 PXE 和 AutoYaST 安装失败 #
从 SUSE Linux Enterprise 15.0 和 ISC DHCP 4.3.x 开始,某些特殊情况会导致 PXE 引导失败以及 AutoYaST 安装失败。如果您的 DHCP 服务器没有可用的动态 IP 地址池,只允许在每个客户端上使用预定义的静态地址,并且客户端发送 RFC 4361 客户端标识符,那么,PXE/AutoYaST 安装将无法正常进行。(仅允许指派给特定网络客户端的地址且不提供动态地址池,会阻止随机计算机加入网络。)
当某个新系统在 PXE 中启动时,它会使用基于硬件类型以及网络接口 MAC 地址构建的客户端标识符,将一个请求发送到 DHCP 服务器和标识符本身。这是一个 RFC 2132 client-id
。然后,DHCP 服务器提供指派的 IP 地址。接下来装载安装内核,并发送另一个 DHCP 请求,但此 client-id
不同,它是以 RFC 4361 格式发送的。DHCP 服务器不会将此 ID 识别为相同的客户端,而是查找一个可用的动态 IP 地址,但此地址不可用,因此安装将会停止。
解决方法是将客户端配置为发送 RFC 2132 客户端 ID。要在安装期间发送 RFC 2132 client-id
,请使用 linuxrc
传递以下 ifcfg
命令:
ifcfg=eth0=dhcp,DHCLIENT_CLIENT_ID=01:03:52:54:00:02:c2:67, DHCLIENT6_CLIENT_ID=00:03:52:54:00:02:c2:67
传统上在以太网中使用的 RFC 2132 DHCPv4 client-id
是基于硬件类型(01
表示以太网)后接硬件地址(MAC 地址)构建的,例如:
01:52:54:00:02:c2:67
在识别到某台计算机包含多个网络接口时,RFC 4361 DHCPv4 client-id
会尝试纠正问题。新 DHCPv4 client-id
的格式与 DHCPv6 client-id
相同。此 ID 以 0xff
前缀(而不是硬件类型)开头,后接 DHCPv6 IAID(描述计算机上的接口的接口地址关联 ID),再后接用于唯一标识计算机的 DHCPv6 唯一标识符 (DUID)。
如果使用上述基于硬件类型和基于硬件地址的 DUID,新的 RFC 4361 DHCPv4 client-id
将是:
将 MAC 地址的最后几个字节用作 IAID:
ff:00:02:c2:67:00:01:xx:xx:xx:xx:52:54:00:02:c2:67
当 IAID 是简单的递增编号时:
ff:00:00:00:01:00:01:xx:xx:xx:xx:52:54:00:02:c2:67
DUID 链路层时间戳 (DUID-LLT) 中的 xx:xx:xx:xx 字段是创建时间戳。DUID 链路层 (DUID-LL) (00:03:00:01:$MAC
) 没有时间戳。
有关使用 linuxrc
的详细信息,请参见 AutoYaST Guide。另请参见 man 4 initrd
,以及 man 5 wicked-config
、wicked duid
--help
和 wicked iaid --help
中选项 dhcp4
"create-cid"
和 dhcp6 "default-duid"
的文档。
17.2 设置 TFTP 服务器 #
以下过程说明如何准备服务器,以便能够使用通过 TFTP 导出的文件远程引导采用 UEFI 和 BIOS 的客户端计算机。
17.2.1 安装 TFTP 服务器 #
要安装 TFTP 服务器,请执行以下过程:
安装
tftp
软件包。>
sudo
zypper in tftp
检查
/etc/sysconfig/tftp
中的tftpd
配置,并根据需要添加或更改选项。有关更多细节,请参见man 8 tftpd
。不更改该配置,TFTP 守护程序也可正常工作。文件的默认根目录为/srv/tftpboot
。确保
tftpd
在引导时已启动,并重启动它以读取新配置。>
sudo
systemctl enable tftp.socket
>
sudo
systemctl restart tftp.socket
17.2.2 安装引导所需的文件 #
SUSE Linux Enterprise Server 提供在 BIOS 或 UEFI 计算机上通过 PXE 引导所需的文件。支持以下硬件体系结构:
AMD64/Intel 64
AArch64
POWER
IBM Z
从特定硬件体系结构引导所需的文件已包含在某个 RPM 软件包中。请在运行 TFTP 服务器的计算机上安装此软件包:
>
sudo
zypper in tftpboot-installation-SLE-OS_VERSION-ARCHITECTURE
请将 OS_VERSION 替换为 SUSE Linux Enterprise Server 安装版本号(例如 SLE-15-SP3-x86_64),将 ARCHITECTURE 替换为系统的体系结构(例如 x86_64
)。因此,生成的文本如下所示:tftpboot-installation-SLE-15-SP3-x86_64。运行 zypper se tftpboot
来搜索所有可用版本和体系结构。
这些文件将安装在 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE
中。您也可以将 SUSE Linux Enterprise Server 的其他版本和体系结构的文件复制到 /srv/tftpboot
目录。
客户端和服务器硬件体系结构可能不同。例如,您可以通过安装 tftpboot-installation-SLE-15-SP3-aarch64 软件包运行 AMD64/Intel 64 TFTP 服务器,并为 AArch64 客户端计算机提供可引导环境。
/srv/tftpboot/
目录
如果您的计算机上已存在目录 /srv/tftpboot/
,则所有文件将安装到 /usr/share/tftpboot-installation/
。如果您正在从旧版 SLES 升级 PXE 服务器,就会采用这种安装方式。
要修复此问题,请将 /usr/share/tftpboot-installation/
中的文件手动复制到 /srv/tftpboot/
。或者,去除 /srv/tftpboot/
并重新安装 tftpboot-installation-SLE-OS_VERSION-ARCHITECTURE 软件包。
17.2.3 配置 PXELINUX #
在编辑器中打开文件 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/net/pxelinux.cfg/default
。根据install
中所述的设置替换 第 16 章 “设置网络安装源” 参数的路径。另外,请将 TFTP_SERVER 替换为 TFTP 服务器的 IP 地址。有关 PXELINUX 配置选项的概述,请参见第 17.3 节 “PXELINUX 配置选项”。
default linux # install label linux ipappend 2 kernel boot/ARCHITECTURE/loader/linux append initrd=boot/ARCHITECTURE/loader/initrd instsys=tftp://TFTP_SERVER/SLE-OS_VERSION-ARCHITECTURE/boot/ARCHITECTURE/root install=PROTOCOL://SERVER_IP:/PATH display message implicit 1 prompt 1 timeout 50
有关 append
行中使用的引导参数的细节,请参见第 7.3 节 “重要引导参数列表”。
如果需要,请编辑 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/net/pxelinux.cfg/message
,以在引导菜单中显示消息。
17.2.4 使用 GRUB2 为 EFI 准备 PXE 引导 #
通常不需要修改 GRUB2 配置文件,但默认设置不包含安装系统的网络资源。要通过网络执行完整的 SUSE Linux Enterprise Server 安装,需要在 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/EFI/BOOT/grub.cfg
文件的 linuxefi
指令中指定 install
参数。有关 第 7.3.3 节 “指定安装源” 参数的更多信息,请参见install
。
17.3 PXELINUX 配置选项 #
此处列出的选项是 PXELINUX 配置文件中所有可用选项中的一部分。
APPEND OPTIONS
将一个或多个选项添加到内核命令行。添加的这些选项对自动引导和手动引导都适用。这些选项添加在内核命令行的最前面,通常允许明确输入的内核选项覆盖它们。
APPEND -
不追加任何选项。在
APPEND
段中用一个连字符作为参数的LABEL
可用于覆盖全局APPEND
。DEFAULT KERNEL_OPTIONS...
用于设置默认内核命令行。当 PXELINUX 自动引导时,它会执行指定的项,并追加
auto
选项。如果配置文件不存在或其中未定义 DEFAULT 项,则默认使用内核名称“linux”且不带任何选项。
IFAPPEND FLAG
根据 FLAG 值将特定项添加到内核命令行。只有 PXELINUX 提供
IFAPPEND
项。需要按照表 17.1 “通过IFAPPEND
生成和添加的内核命令行选项”中所述为 FLAG 指定一个值:表 17.1︰ 通过IFAPPEND
生成和添加的内核命令行选项 #参数
生成的内核命令行/说明
1
ip=CLIENT_IP:BOOT_SERVER_IP:GW_IP:NETMASK
根据从 DHCP//BOOTP 或 PXE 引导服务器输入的内容替换占位符。
注,此选项不可替换为在引导系统中运行 DHCP 客户端。若不定期更新,PXE BIOS 所获得的租用将失效,致使 DHCP 服务器可重新使用该 IP 地址。
2
BOOTIF=MAC_ADDRESS_OF_BOOT_INTERFACE
当安装服务器在收到 DHCP 服务器的答复前逐个探测 LAN 接口时,此选项可用于避免超时。使用此选项可让 initrd 程序确定系统是从哪个接口引导的。linuxrc 会读取此选项并使用该网络接口。
4
SYSUUID=SYSTEM_UUID
以小写的十六进制值添加 UUID,具体请参见
/usr/share/doc/packages/syslinux/pxelinux.txt
LABEL LABEL KERNEL IMAGE APPEND OPTIONS...
指示如果输入了 LABEL 作为要引导的内核,则 PXELINUX 应改为引导 IMAGE,并且应使用指定的
APPEND
选项。这些设置会替换文件的 global 部分第一条LABEL
命令前面指定的设置。IMAGE 的默认值与 LABEL 的相同,如果未指定APPEND
,则默认情况下使用 global 项(如果有)。最多允许 128 个LABEL
条目。PXELINUX 使用以下语法:
label MYLABEL kernel MYKERNEL append MYOPTIONS
标签的数据报处理如同文件名一样,它们在数据报处理之后必须唯一。例如,“v2.6.30”和“v2.6.31”这两个标签在 PXELINUX 下是无法区分的,因为它们在数据报处理之后的 DOS 文件名相同。
该内核不必是 Linux 内核。它也可以是引导扇区或 COMBOOT 文件。
LOCALBOOT TYPE
在 PXELINUX 上,指定
LOCALBOOT 0
取代KERNEL
选项表示调用该特定标签,这样就会从本地磁盘引导而不是从内核引导。参数
说明
0
执行正常安装。
4
在“通用网络驱动程序接口”(UNDI)驱动程序仍然驻留在内存中的情况下执行本地引导
5
在整个 PXE 堆栈(包括 UNDI 驱动程序)仍然驻留于内存中的情况下执行本地引导
不定义所有其他的值。如果对 UNDI 或 PXE 堆栈不甚了解,请指定
0
。TIMEOUT TIME-OUT
表示在自动引导之前在引导提示符下等待的时间(以 1/10 秒为单位)。用户按了键盘上的任意键后,超时将会取消(假设从用户完成命令开始)。如果超时值为零,则将完全禁用超时(这也是默认值)。允许的最大超时值为 35996(即小于一小时)。
PROMPT flag_val
如果
flag_val
为 0,则仅当按下 Shift 或 Alt 键,或者在 Caps Lock 或 Scroll Lock 状态下,才显示引导提示符(这是默认设置)。如果flag_val
为 1,则始终显示引导提示符。F2 FILENAME F1 FILENAME ..etc.. F9 FILENAME F10 FILENAME
当在引导提示符下按下功能键时,将显示指定的文件。这可以用于执行预引导联机帮助(大致是关于内核命令行选项)。为了向后兼容先前的发行版,10 也可以输入为
F0
F。请注意目前尚无法将文件名与 F11 和 F12 绑定。
17.4 为 PXE 引导准备目标系统 #
请将 PXE 选项包含在 BIOS 引导序列中来为系统 BIOS 的 PXE 引导作准备。
在 BIOS 中,不要将 PXE 选项置于硬盘引导参数的前面。否则,每次引导系统时,系统都会尝试重新自我安装。
17.5 使用网络唤醒进行远程唤醒 #
网络唤醒 (WOL) 是一种以太网标准,用于通过网络向计算机发送唤醒信号来远程唤醒计算机。此信号称为“幻数据包”。请在要启用远程唤醒的客户端计算机上,以及要用于发送唤醒信号的每台计算机上安装 WOL。幻数据包通过 UDP 端口 9 广播到客户端计算机上的网络接口的 MAC 地址。
当计算机关机时,它们通常不会彻底关闭,而是保持在低电量模式。如果网络接口支持 WOL,则会在计算机处于关闭状态时侦听幻数据包唤醒信号。您可以手动发送幻数据包,或者在发送方计算机上的 cron 作业中安排唤醒。
17.5.1 先决条件 #
WOL 与支持 WOL 的有线和无线以太网卡均可配合使用。
您可能需要在系统 BIOS/UEFI 中启用 WOL。
检查用于 PXE 引导的 BIOS/UEFI 设置,并确保已禁用该设置,以防止意外重新安装。
调整防火墙,以允许在 UDP 端口 9 上传输流量。
17.5.2 校验有线以太网支持 #
运行以下命令确定有线以太网接口是否支持 WOL:
>
sudo
ethtool eth0 | grep -i wake-on Supports Wake-on: pumbg Wake-on: g
示例输出显示 eth0 支持 WOL,这可根据 g
行中的 Supports Wake-on
标志确定。Wake-on: g
表示 WOL 已启用,因此此接口已准备好接收唤醒信号。如果 WOL 未启用,请使用以下命令将其启用:
>
sudo
ethtool -s eth0 wol g
17.5.3 校验无线接口支持 #
通过 WiFi 远程唤醒(或 WoWLAN)需要使用支持 WoWLAN 的无线网络接口。使用 iw
命令可测试该功能,该命令由 iw 软件包提供:
>
sudo
zypper in iw
确定您的设备名称:
>
sudo
iw dev phy#0 Interface wlan2 ifindex 3 wdev 0x1 addr 9c:ef:d5:fe:01:7c ssid accesspoint type managed channel 11 (2462 MHz), width: 20 MHz, center1: 2462 MHz txpower 20.00 dBm
在此示例中,用于查询 WoWLAN 支持的设备名称是 phy#0
。此示例显示此设备不支持该功能:
>
sudo
iw phy#0 wowlan show command failed: Operation not supported (-95)
此示例显示一个接口支持 WoWLAN,但未启用:
>
sudo
iw phy#0 wowlan show WoWLAN is disabled
将其启用:
>
sudo
iw phy#0 wowlan enable magic-packet WoWLAN is enabled: * wake up on magic packet
17.5.4 安装和测试 WOL #
要使用 WOL,请在客户端和发送方计算机上安装 wol 软件包:
>
sudo
zypper in wol
在客户端计算机上安装 wol-udev-rules。此软件包会安装一条 udev 规则,该规则会在系统启动时自动启用 WOL。
获取客户端计算机上的网络接口的 MAC 地址:
>
sudo
ip addr show eth0|grep ether link/ether 7c:ef:a5:fe:06:7c brd ff:ff:ff:ff:ff:ff
在示例输出中,7c:ef:a5:fe:06:7c
是 MAC 地址。
将您的客户端计算机关机,并从同一子网中的另一台计算机向其发送唤醒信号:
>
wol 7c:ef:a5:fe:06:7c
如果您的目标计算机和第二台设备位于同一网络,但在不同的子网中,请指定目标计算机的广播地址:
>
wol -i 192.168.0.63 7c:ef:a5:fe:06:7c
由于 WOL 依赖于广播域,因此尽管发送方计算机可以在不同的网段中,但两台计算机必须位于同一网络。
可以从不同的网络发送幻数据包。一种方法是使用端口转发(如果您的路由器支持向广播地址进行端口转发)。更安全的方法是通过 SSH 连接到您的网络内的某台主机,然后从该主机发送幻数据包。