跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 部署指南 / 设置安装服务器 / 设置 UEFI HTTP 引导服务器
适用范围 SUSE Linux Enterprise Server 15 SP5

18 设置 UEFI HTTP 引导服务器

本章介绍如何设置和配置 UEFI HTTP 引导服务器。

18.1 简介

HTTP 引导结合了 DHCP、DNS 和 HTTP,可让您通过网络引导和部署系统。HTTP 引导可用作 PXE 的高性能替代功能。HTTP 引导允许通过 HTTP 从 URI 引导服务器,从而可从本地网络外部的服务器快速传输大型文件,例如 Linux 内核和根文件系统。

18.1.1 配置客户端计算机

根据您的特定硬件在物理客户端计算机上启用 HTTP 引导。有关如何在特定计算机上启用 HTTP 引导的更多信息,请参见相关文档。

18.1.2 准备

例如,此处所述的设置使用 192.168.111.0/24 (IPv4) 和 2001:db8:f00f:cafe::/64 (IPv6) IP 子网,服务器 IP 地址为 192.168.111.1(IPv4) 和 2001:db8:f00f:cafe::1/64 (IPv6)。请根据您的特定设置调整这些值。

在您打算用作 HTTP 引导服务器的计算机上安装以下软件包:dhcp-serverapache2(或 lighttpd)和 dnsmasq

18.2 配置服务器

18.2.1 DNS 服务器

虽然配置 DNS 服务器是可选步骤,但这可让您为 HTTP 引导服务器指派一个用户友好的名称。要设置 DNS 服务器,请在 /etc/dnsmasq.conf 文件中添加以下内容:

interface=eth0
addn-hosts=/etc/dnsmasq.d/hosts.conf

/etc/dnsmasq.d/hosts.conf 文件中的 IP 地址指派域名:

192.168.111.1 www.httpboot.local
2001:db8:f00f:cafe::1 www.httpboot.local

启动 DNS 服务器。

systemctl start dnsmasq
注意
注意:使用 shim 引导加载器

由于 UEFI 2.7 中的某个变化,我们建议使用 SLE 15 或更新版本中的 shim 引导加载器,以避免该附加 DNS 节点可能导致的错误。

18.2.1.1 配置 DHCPv4 服务器

设置 DHCP 服务器之前,需在 /etc/sysconfig/dhcpd 中指定服务器的网络接口:

DHCPD_INTERFACE="eth0"
DHCPD6_INTERFACE="eth0"

这样一来,DHCP 服务器就只会在 eth0 接口上提供服务。

要设置同时用于 PXE 引导和 HTTP 引导的 DHCPv4 服务器,请在 /etc/dhcpd.conf 文件中添加以下配置:

option domain-name-servers 192.168.111.1;
option routers 192.168.111.1;
default-lease-time 14400;
ddns-update-style none;
class "pxeclients" {
  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
  option vendor-class-identifier "PXEClient";
  next-server 192.168.111.1;
  filename "/bootx64.efi";
}
class "httpclients" {
  match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
  option vendor-class-identifier "HTTPClient";
  filename "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
}
subnet 192.168.111.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.111.100 192.168.111.120;
  default-lease-time 14400;
  max-lease-time 172800;
}

请注意,DHCPv4 服务器必须使用 HTTPClient 参数来表示供应商类别 ID,因为客户端使用该参数来标识 HTTP 引导服务。

启动 DHCP 守护程序:

systemctl start dhcpd

18.2.1.2 配置 DHCPv6 服务器

要设置 DHCPv6 服务器,请在 /etc/dhcpd6.conf 中添加以下配置:

option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
subnet6 2001:db8:f00f:cafe::/64 {
        range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;
        option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
        option dhcp6.name-servers 2001:db8:f00f:cafe::1;
        option dhcp6.vendor-class 0 10 "HTTPClient";
}

此配置定义引导 URL 的类型、供应商类别和其他必需的选项。与 DHCPv4 设置类似,需要提供引导 URL,该 URL 必须包含 IPv6 地址。还需要指定供应商类别选项。在 DHCPv6 中,它由企业编号和供应商类别数据(长度和内容)组成。由于 HTTP 引导驱动程序会忽略企业编号,因此可将其设为 0。供应商类别数据的内容必须是 HTTPClient;否则,客户端将会忽略该服务。

较旧的 HTTP 引导实施不遵循 RFC 3315,需要使用不同的配置:

option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = string;
        subnet6 2001:db8:f00f:cafe::/64 {
        range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;
        option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi;
	option dhcp6.name-servers 2001:db8:f00f:cafe::1;
	option dhcp6.vendor-class "HTTPClient";
}

启动 dhcpv6 守护程序。

systemctl start dhcpd6
18.2.1.2.1 设置同时用于 PXE 引导和 HTTP 引导的 DHCPv6 服务器

使用以下配置可以配置同时用于 PXE 引导和 HTTP 引导的 DHCPv6 服务器:

option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};

subnet6 2001:db8:f00f:cafe::/64 {
        range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;

        class "PXEClient" {
	        match substring (option dhcp6.vendor-class, 6, 9);
	}

        subclass "PXEClient" "PXEClient" {
	        option dhcp6.bootfile-url "tftp://[2001:db8:f00f:cafe::1]/bootloader.efi";
	}

	class "HTTPClient" {
	        match substring (option dhcp6.vendor-class, 6, 10);
	}

	subclass "HTTPClient" "HTTPClient" {
	        option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
		option dhcp6.name-servers 2001:db8:f00f:cafe::1;
		option dhcp6.vendor-class 0 10 "HTTPClient";
	}
}

您也可以按如下所示将供应商类别与特定体系结构相匹配:

class "HTTPClient" {
        match substring (option dhcp6.vendor-class, 6, 21);
	}

subclass "HTTPClient" "HTTPClient:Arch:00016" {
        option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
	option dhcp6.name-servers 2001:db8:f00f:cafe::1;
	option dhcp6.vendor-class 0 10 "HTTPClient";
}

在此示例中,HTTPClient:Arch:00016 表示 AMD64/Intel 64 HTTP 引导客户端。此配置允许服务器同时为不同的体系结构提供服务。

18.2.1.2.2 配置防火墙

如果防火墙中的 RP 过滤器丢弃了 DHCPv6 数据包,请检查其日志。如果日志中包含 rpfilter_DROP 项,请在 /etc/firewalld/firewalld.conf 中使用以下配置禁用该过滤器:

IPv6_rpfilter=no

18.2.1.3 部署 TFTP 服务器(可选)

要同时为 PXE 引导和 HTTP 引导提供支持,请部署 TFTP 服务器。安装 tftp 并启动服务:

 systemctl start tftp.socket
systemctl start tftp.service

还需要安装用于 PXE 引导的特定 tftpboot-installation 软件包:运行 zypper se tftpboot 命令以列出可用的 tftp-installation 软件包,然后安装所需系统版本和体系结构的软件包,例如 tftpboot-installation-SLE-15-SP3-x86_64 例如,tftpboot-installation-SLE-VERSION-x86_64(将 VERSION 替换为实际版本)。将 SLE-VERSION-x86_64 目录的内容复制到 TFTP 服务器的根目录中:

有关详细信息,请参见 /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README

18.2.1.4 设置 HTTP 服务器

将第一个系统 ISO 映像的所有内容复制到 /srv/www/htdocs/sle/ 目录中。然后编辑 /srv/www/htdocs/sle/grub.cfg 文件。使用下面的示例作为参考:

timeout=60
default=1

menuentry 'Installation IPv4' --class opensuse --class gnu-linux --class gnu --class os {
    set gfxpayload=keep
    echo 'Loading kernel ...'
    linux /sle/boot/x86_64/loader/linux install=http://www.httpboot.local/sle
    echo 'Loading initial ramdisk ...'
    initrd /sle/boot/x86_64/loader/initrd
}

menuentry 'Installation IPv6' --class opensuse --class gnu-linux --class gnu --class os {
    set gfxpayload=keep
    echo 'Loading kernel ...'
    linux /sle/boot/x86_64/loader/linux install=install=http://www.httpboot.local/sle ipv6only=1 ifcfg=*=dhcp6,DHCLIENT6_MODE=managed
    echo 'Loading initial ramdisk ...'
    initrd /sle/boot/x86_64/loader/initrd
}
18.2.1.4.1 配置 lighttpd

要在 lighttpd 中同时启用 IPv4 和 IPv6 支持,请如下所示修改 /etc/lighttpd/lighttpd.conf

##
## Use IPv6?
##
#server.use-ipv6 = "enable"
$SERVER["socket"] == "[::]:80" {  }

启动 lighttpd 守护程序:

systemctl start lighttpd
18.2.1.4.2 配置 apache2

Apache 不需要额外的配置。启动 apache2 守护程序:

systemctl start apache2

18.2.1.5 为 HTTP 服务器启用 SSL 支持(可选)

要使用 HTTPS 引导,您需要将现有服务器证书转换为 DER 格式,并将其注册到客户端固件中。

假设您的服务器上已安装了证书,请使用以下命令将其转换为 DER 格式,以用于客户端:

openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 将服务器证书注册到客户端固件中

注册已转换证书的确切过程取决于客户端固件的具体实施。对于某些硬件,您需要使用包含证书的外部储存设备,通过固件 UI 手动注册证书。支持 Redfish 的计算机可以远程注册证书。有关注册证书的详细信息,请参见特定硬件的相应文档。

18.2.1.5.2 在 lighttpd 中启用 SSL 支持

由于 lighttpd 需要私用密钥和证书储存在同一个文件中,请使用以下命令整合这些数据:

cat CERTIFICATE.crt server.key > CERTIFICATE.pem

CERTIFICATE.pem 复制到 /etc/ssl/private/ 目录。

cp server-almighty.pem /etc/ssl/private/
chown -R root:lighttpd /etc/ssl/private/server-almighty.pem
chmod 640 /etc/ssl/private/server-almighty.pem

确保 mod_openssl 列在 /etc/lighttpd/modules.conf 文件的 server.modules 部分,例如:

server.modules = (
  "mod_access",
  "mod_openssl",
)

将下面几行添加到 /etc/lighttpd/lighttpd.conf 中的 SSL Support 部分:

# IPv4
$SERVER["socket"] == ":443" {
    ssl.engine                 = "enable"
    ssl.pemfile                = "/etc/ssl/private/server-almighty.pem"
}
# IPv6
$SERVER["socket"] == "[::]:443" {
    ssl.engine                 = "enable"
    ssl.pemfile                = "/etc/ssl/private/server-almighty.pem"
}

重启动 lighttpd 以激活 SSL 支持:

systemctl restart lighttpd
18.2.1.5.3 在 Apache 中启用 SSL 支持

打开 /etc/sysconfig/apache2 文件,并如下所示添加 SSL 标志:

APACHE_SERVER_FLAGS="SSL"

确保 ssl 模块列在 APACHE_MODULES 中,例如:

接下来,将私用密钥和证书复制到 /etc/apache2/ 目录中。

cp server.key /etc/apache2/ssl.key/
chown wwwrun /etc/apache2/ssl.key/server.key
chmod 600 /etc/apache2/ssl.key/server.key
cp server.crt /etc/apache2/ssl.crt/

创建 ssl vhost 配置。

cd /etc/apache2/vhosts.d
cp vhost-ssl.template vhost-ssl.conf

编辑 /etc/apache2/vhosts.d/vhost-ssl.conf 以更改私用密钥和证书:

SSLCertificateFile /etc/apache2/ssl.crt/server.crt
 SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

重启动 apache 以激活 SSL 支持:

systemctl restart apache2
18.2.1.5.4 修改 DHCP 配置

dhcpd.conf/dhcpd6.conf 中,将 http:// 前缀替换为 https://,然后重启动 DHCP 服务器。

systemctl restart dhcpd
systemctl restart dhcpd6

18.3 通过 HTTP 引导引导客户端

如果固件已支持 HTTP 引导,请插入电缆并选择正确的引导选项。