使用 iPXE 通过网络安装¶
本指南介绍如何通过网络使用 PXE 安装 Clear Linux* OS。
概述¶
PXE 是描述客户端-服务器与网络引导软件交互的行业标准,并使用 DHCP 和 TFTP 协议。本指南介绍了一种使用 PXE 环境安装 Clear Linux OS 的方法。
名为 iPXE 的 PXE 扩展新增了对 HTTP、iSCSI、AoE 和 FCoE 等协议的支持。iPXE 支持在没有内置 PXE 支持的计算机上使用网络引导。
要通过 iPXE 安装 Clear Linux OS,必须创建一个 PXE 客户端。图 1 描述了 PXE 服务器和 PXE 客户端之间的信息流。

图 1:PXE 信息流。
警告
通过 PXE 过程引导的 Clear Linux OS 映像会自动擦除 PXE 客户端系统上的所有数据和分区,并创建 3 个新分区来安装该映像。
必备条件¶
使用 iPXE 引导之前,请做好以下准备。
将 PXE 服务器和 PXE 客户端连接到专用网络上的交换机,如图 2 所示。

图 2:网络拓扑。
在 PXE 客户端的引导顺序中,网络引导选项需要优先于磁盘引导选项。
PXE 服务器必须:
- 具有以太网/局域网引导选项。
- 具有至少两个网络适配器。
- 连接到公共网络。
- 禁用安全引导选项。
注解
您必须在 BIOS 中禁用安全引导选项,因为用于引导 Clear Linux OS 的 UEFI 二进制文件未经签名。
配置¶
要使用 iPXE 自动设置 Clear Linux OS,请使用随 ICIS 附带的 configure-ipxe.sh
脚本。有关该脚本的其他说明,请参阅 ister-cloud-init-svc GitHub* 存储库中的指南。
要手动设置 Clear Linux OS,请执行以下步骤。
定义 iPXE 引导配置使用的变量。
ipxe_app_name=ipxe ipxe_port=50000 web_root=/var/www ipxe_root=$web_root/$ipxe_app_name tftp_root=/srv/tftp external_iface=eno1 internal_iface=eno2 pxe_subnet=192.168.1 pxe_internal_ip=$pxe_subnet.1 pxe_subnet_mask_ip=255.255.255.0 pxe_subnet_bitmask=16
登录并获得 root 特权。
sudo -s
将 pxe-server 捆绑包添加到 Clear Linux OS 系统。该捆绑包含有运行 PXE 服务器所需的所有文件。
sudo swupd bundle-add pxe-server
下载 Clear Linux OS 的最新网络引导版本,并提取文件。
sudo mkdir -p $ipxe_root sudo curl -o /tmp/clear-pxe.tar.xz \ https://cdn.download.clearlinux.org/current/clear-$(curl \ https://cdn.download.clearlinux.org/latest)-pxe.tar.xz sudo tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root sudo ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux
注解
确保初始 ramdisk 文件命名为
initrd
,内核文件命名为linux
(这是一个指向实际内核文件的符号链接)。创建包含以下内容的 iPXE 引导脚本。在 iPXE 引导过程中,iPXE 引导脚本会指示 PXE 客户端下载引导和安装 Clear Linux OS 所需的文件。使用先前提供给初始 ramdisk 和内核文件的名称。
sudo cat > $ipxe_root/ipxe_boot_script.ipxe << EOF #!ipxe kernel linux quiet init=/usr/lib/systemd/systemd-bootchart \ initcall_debug tsc=reliable no_timer_check noreplace-smp rw \ initrd=initrd initrd initrd boot EOF
pxe-server 捆绑包含一个名为 nginx 的轻量级 Web 服务器。为 nginx 创建一个配置文件,以便 Clear Linux OS 为 PXE 客户端提供以下内容:
sudo mkdir -p /etc/nginx/conf.d sudo cat > /etc/nginx/conf.d/$ipxe_app_name.conf << EOF server { listen $ipxe_port; server_name localhost; location /$ipxe_app_name/ { root $web_root; autoindex on; } } EOF sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
注解
创建一个单独的 nginx 配置文件,以便在非标准端口号上提供网络引导映像。此操作会保存现有的 nginx 配置。
启动 nginx 并启用引导时启动选项。
sudo systemctl start nginx sudo systemctl enable nginx
pxe-server 捆绑包包含一个轻量级 DNS 服务器,该服务器与 systemd-resolved 中提供的 DNS 存根侦听器冲突。请禁用 DNS 存根侦听器,并暂时停止 systemd-resolved。
sudo mkdir -p /etc/systemd sudo cat > /etc/systemd/resolved.conf << EOF [Resolve] DNSStubListener=no EOF sudo systemctl stop systemd-resolved
为专用网络的网络适配器分配一个静态 IP 地址,并使用以下命令重新启动 systemd-networkd:
sudo mkdir -p /etc/systemd/network sudo cat > /etc/systemd/network/70-internal-static.network << EOF [Match] Name=$internal_iface [Network] DHCP=no Address=$pxe_internal_ip/$pxe_subnet_bitmask EOF sudo systemctl restart systemd-networkd
配置 NAT,将流量从专用网络路由到公共网络。此操作会让 PXE 服务器充当路由器。要使这些更改在重启期间保持不变,请使用以下命令将更改保存到防火墙:
sudo iptables -t nat -F POSTROUTING sudo iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE sudo systemctl enable iptables-save.service sudo systemctl restart iptables-save.service sudo systemctl enable iptables-restore.service sudo systemctl restart iptables-restore.service
注解
防火墙会遮掩数据包,使其看起来像来自 PXE 服务器,并对公共网络隐藏 PXE 客户端。
配置内核,将网络数据包转发到不同的接口。否则,NAT 将不起作用。
sudo mkdir -p /etc/sysctl.d sudo echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf sudo echo 1 > /proc/sys/net/ipv4/ip_forward
pxe-server 捆绑包包含 iPXE 固件映像,这些映像允许没有 iPXE 实现的计算机执行 iPXE 引导。创建一个 TFTP 托管目录,并用以下命令用 iPXE 固件映像填充该目录:
sudo mkdir -p $tftp_root sudo ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe
pxe-server 捆绑包包含一个名为 dnsmasq 的轻量级 TFTP、DNS 和 DHCP 服务器。为 dnsmasq 创建一个配置文件,以便监听这些功能的专用 IP 地址。专用网络上的 PXE 客户端将使用此 IP 地址。
sudo cat > /etc/dnsmasq.conf << EOF listen-address=$pxe_internal_ip EOF
将通过 TFTP 向 PXE 客户端提供 iPXE 固件映像的选项添加到 dnsmasq 配置文件中。
sudo cat >> /etc/dnsmasq.conf << EOF enable-tftp tftp-root=$tftp_root EOF
将为 PXE 客户端托管 DHCP 服务器的选项添加到 dnsmasq 配置文件中。
sudo cat >> /etc/dnsmasq.conf << EOF dhcp-leasefile=/var/db/dnsmasq.leases dhcp-authoritative dhcp-option=option:router,$pxe_internal_ip dhcp-option=option:dns-server,$pxe_internal_ip dhcp-match=set:pxeclient,60,PXEClient* dhcp-range=tag:pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,15m dhcp-range=tag:!pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,6h dhcp-match=set:ipxeboot,175 dhcp-boot=tag:ipxeboot,http://$pxe_internal_ip:$ipxe_port/$ipxe_app_name/ipxe_boot_script.ipxe dhcp-boot=tag:!ipxeboot,undionly.kpxe,$pxe_internal_ip EOF
该配置提供以下重要功能:
- 将没有 iPXE 实现的 PXE 客户端定向到 TFTP 服务器,以获取特定于体系结构的 iPXE 固件映像,从而允许这些客户端执行 iPXE 引导。
- 仅在具有指定子网中 IP 地址的网络适配器上激活。
- 将 PXE 客户端定向到 DNS 服务器。
- 将 PXE 客户端定向到 PXE 服务器,以便通过 NAT 进行路由。
- 将专用网络分成两个 IP 地址池。一个地址池用于网络引导,一个地址池在引导后使用。每个地址池都有自己的租赁时间。
为 dnsmasq 创建一个文件,记录它向 PXE 客户端提供的 IP 地址。
sudo mkdir -p /var/db sudo touch /var/db/dnsmasq.leases
启动 dnsmasq 并启用引导时启动。
sudo systemctl enable dnsmasq sudo systemctl restart dnsmasq
启动 systemd-resolved。
sudo systemctl start systemd-resolved
注解
如果使用 dnsmasq DNS 服务器,systemd-resolved 会动态更新专用网络的 DNS 服务器列表。该设置会创建一个直通 DNS 服务器,该服务器依赖于
/etc/resolv.conf
中列出的 DNS 服务器。打开 PXE 客户端的电源,观看客户端引导并安装 Clear Linux OS。
引导后,Clear Linux OS 会自动对硬盘分区,自行安装,更新到最新版本,然后重新引导。
祝贺您!您已成功安装并配置了 PXE 服务器,使 PXE 客户端能够通过网络引导并安装 Clear Linux OS。