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.1
的服务器上,使用包含 DHCP、DNS 和网关的子网192.168.1.0/24
。确保根据网络布局更改所有 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 客户端 ID
。然后,DHCP 服务器提供指派的 IP 地址。接下来装载安装内核,并发送另一个 DHCP 请求,但此客户端 ID
不同,它是以 RFC 4361 格式发送的。DHCP 服务器不会将此 ID 识别为相同的客户端,而是查找一个可用的动态 IP 地址,但此地址不可用,因此安装将会停止。
解决方法是将客户端配置为发送 RFC 2132 客户端 ID。要在安装期间发送 RFC 2132 客户端 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 客户端 ID
是基于硬件类型(01
表示以太网)后接硬件地址(MAC 地址)构建的,例如:
01:52:54:00:02:c2:67
在识别到某台计算机包含多个网络接口时,RFC 4361 DHCPv4 客户端 ID
会尝试纠正问题。新 DHCPv4 客户端 ID
的格式与 DHCPv6 客户端 ID
相同。此 ID 以 0xff
前缀(而不是硬件类型)开头,后接 DHCPv6 IAID(描述计算机上的接口的接口地址关联 ID),再后接用于唯一标识计算机的 DHCPv6 唯一标识符 (DUID)。
如果使用上述基于硬件类型和基于硬件地址的 DUID,新的 RFC 4361 DHCPv4 客户端 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》(AutoYaST 指南)。另请参见 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
检查
tftpd
/etc/sysconfig/tftp中的
配置,并根据需要添加或更改选项。有关更多细节,请参见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
文件。根据第 16 章 “设置网络安装源”中所述的设置替换 install
参数的路径。另外,请将 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
参数。有关 install
参数的更多信息,请参见第 7.3.3 节 “指定安装源”。
17.3 PXELINUX 配置选项 #
此处列出的选项是 PXELINUX 配置文件中所有可用选项中的一部分。
APPEND OPTIONS
将一个或多个选项添加到内核命令行。添加的这些选项对自动引导和手动引导都适用。这些选项添加在内核命令行的最前面,通常允许用显式输入的内核选项覆盖它们。
APPEND -
不追加任何选项。在
LABEL
段中用一个连字符作为参数的APPEND
可用于覆盖全局APPEND
。DEFAULT KERNEL_OPTIONS...
用于设置默认内核命令行。如果 PXELINUX 自动引导,则该选项的作用相当于已在引导提示符处输入了在 DEFAULT 后输入的所有内容(表示自动引导的 auto 选项除外,它是自动添加的)。
如果配置文件不存在或其中未定义 DEFAULT 项,则默认使用内核名称“linux”且不带任何选项。
IFAPPEND 标志
根据标志值将特定项添加到内核命令行。只有 PXELINUX 提供
IFAPPEND
项。标志需赋一个值,具体如表 17.1 “通过IFAPPEND
生成和添加的内核命令行选项”所述:表 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
以小写十六进制添加 UUIDs,具体请参见
/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
当在引导提示符下按下功能键时,将显示指定的文件。这可以用于执行预引导联机帮助(大致是关于内核命令行选项)。为了向后兼容先前的发行版,F10 也可以输入为
F0
。请注意目前尚无法将文件名与 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,这可根据 Supports Wake-on
行中的 g
标志确定。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 连接到您的网络内的某台主机,然后从该主机发送幻数据包。