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-server、apache2(或 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
由于 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 引导,请插入电缆并选择正确的引导选项。