Linux 上的 PXE 网络启动
本教程的目的是介绍使用网络(无论是本地网络还是非网络)引导和安装 Linux 的主题。
我们将在不使用光盘、USB 或其他可移动介质的情况下,仅使用 LAN 来安装 Linux。您的网络中预计至少有两台计算机,并且客户端需要能够使用 PXE 的 NIC 和 BIOS。
我们将从头到尾指导您,但需要一些基本的网络和 Linux 配置知识,以及您选择的编辑器的使用。像往常一样,您将了解什么是 PXE、如何配置 DHCP 服务器、如何配置 TFTP 服务器以便客户端可以访问文件,以及许多有趣的内容。让我们开始吧。
在本教程中您将学习:
什么是 PXE?
PXE 启动的典型网络布局
如何设置 DHCP 和 TFTP
如何配置 PXE 进行网络启动
什么是 PXE?
PXE(发音为“pixie”)代表预启动执行环境,由 Intel 和 Systemsoft 于 1999 年推出。简而言之,它是大多数现代网卡和 BIOS 都具备的功能,使系统能够从 LAN 启动,就像从 LAN 启动一样。硬盘或CD-ROM。
NIC 的固件中必须存在 PXE 支持,如果在 BIOS 中进行相应设置,将从 PXE 服务器获取 IP 地址并下载必要的启动映像。为了使 IP 地址可用,服务器必须提供 DHCP。
租用IP地址后,TFTP服务器(可以与DHCP服务器是同一台机器)将必要的文件分发给客户端,以便客户端可以在加载后启动它们。这就是整个想法,所以说得够多了,让我们开始工作吧?
PXE 启动的网络布局
在开始之前,了解要实现 PXE 启动所需的网络布局类型非常重要。作为示例,我们将向您展示如何设置测试环境。
我们的服务器是一台带有两个网卡的 Debian 机器,我们将安装的发行版也是 Debian。您可以使用任何其他发行版,但某些配置文件位置可能会有所不同。
本文不涉及如何设置实际安装的软件源。我们只会带您到一个可用的 Debian 安装程序,仅此而已。您会发现很多关于如何设置本地 Debian 存储库或如何在 Linux 上配置网关的教程。
所以,清单。我们将需要以下内容:
DHCP服务器
TFTP服务器
要传输到客户端的 initrd 和内核映像
我们在设置中选择了一种相当不寻常的方法,您就会明白原因。
Outside world ------> Router ------> Switch ------>(eth0) Server(eth1) ------> Client
因此,路由器以 192.168.0.x
的形式给出 DHCP 地址(小型家庭路由器)。服务器也将分发 DHCP 地址,通过 eth0
进行外部连接,并通过 eth1
与客户端进行内部连接。
客户端有唯一的以太网直接连接到 PXE 服务器,但这并不意味着您不能将服务器配置为 netinstall 的网关,或向客户端添加另一个 NIC 以进行外部访问。有很多可能性,当前重要的问题是通过 PXE 启动。让我们从安装 TFTP 服务器开始。
设置TFTP
TFTP 代表简单文件传输协议,在传输文件以与 PXE 一起使用时,它是事实上的“语言”。
在 Debian 上,我们这样安装:
$ sudo apt install tftpd-hpa pxelinux
使用以下
systemctl
命令启动 TFTP 服务器。$ sudo systemctl start tftpd-hpa
设置 DHCP
在开始通过网络安装之前,我们必须向客户端提供一个地址,这是通过使用动态主机配置协议来完成的。 DHCP 服务器有一个地址池,可根据请求提供 IP。
安装服务器部分:
$ sudo apt install isc-dhcp-server
编辑
/etc/dhcp/dhcpd.conf
文件,并根据您自己系统的 IP 地址和网络信息进行调整。我们的看起来像这样:ddns-update-style none; # Remember the semicolons at the end of each line! DHCPDARGS=eth1; default-lease-time 86400; max-lease-time 604800; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.30; filename "pxelinux.0"; option subnet-mask 255.255.255.0; } # There is more to this file than we've shown, but what you have here is enough for PXE.
稍微回顾一下:eth0 – 通过交换网络的外部世界 (192.168.0.x) 和 eth1 – 直接链接到客户端 (192.168.1.x)。
进行必要的更改后,您将需要重新启动 DHCP 服务。
$ sudo systemctl restart isc-dhcp-server
配置PXE
现在我们需要提供启动文件。为此,我们将从 Debian 下载网络启动映像。
将 netinstall 存档解压到
/srv/tftp
目录中。内容应如下所示:debian-installer/ pxelinux.0@ pxelinux.cfg@ version.info
确保所有文件都具有必要的权限:
$ sudo chmod -R a+r /srv/tftp/*
现在,希望一切顺利,您可以启动客户端并更改其 BIOS 设置以进行网络启动。
在结束之前,我们需要向您解释一下我们选择的网络设置。我们可能可以让它变得更简单,比如直接使用我们的 ISP 的连接,并且也能够访问网络(互联网)。我们的想法是,我们场景中的 PXE 服务器无法从 DHCP 获取其 IP 地址 (eth0),因为此设置不起作用:如果您不打算在服务器上使用两个 NIC 场景,就像我们所做的那样,你需要某种固定的IP地址。
因此,可能性是:直接连接 ISP、将路由器设置为仅提供静态 IP、使 PXE/DHCP/TFTP 服务器也成为网关或创建本地存储库。我们选择后者是因为它最适合我们的拓扑和目的,并且实际上只涉及在 LAN 上设置网络服务器。
如果我们能够解释您的所有选择,包括用于网关的 iptables 或用于 HTTP 服务器的 apache,那么这篇文章将会很长。相反,我们更愿意坚持标题并为您提供确切的内容:使用 Linux 进行网络引导。
请记住,这只是一个示例:与 NetbootCD 一样,只要服务器上有必要的空间,您就可以添加任意数量的发行版。
最后的想法
首先,我们建议您耐心等待。众所周知,PXE 的速度有点慢,无论您上周购买的顶级千兆交换机是什么。其次,阅读 dhcpd.conf 中的注释和示例,因为它们现在和以后都会有用。