使用 Linux 发行版 ISO 设置 PXE 安装

使用 Linux 发行版 ISO 设置 PXE 安装

在我的家庭局域网上,我有

  • 路由器/交换机,同时也是 DHCP 服务器
  • 一个桌面
  • 一台(非常非常旧的)笔记本电脑,甚至无法从 USB 启动

我想使用 PXE 在该笔记本电脑上安装(32 位)Linux 发行版。

我有两个问题(据我所知):

  1. 我看到的页面讨论了这样做(例如这个问题网站上)都说我需要在我的计算机上设置 DHCP 服务器...这很好,只是已经有其他 DHCP 服务器了。笔记本电脑不会更喜欢其他服务器吗?

  2. 任何可启动的 32 位 ISO 都可以工作吗?

  3. 我如何知道发行版已安装 ISO 中的哪些文件要复制到哪里?

注意:更具体地说,我将尝试安装Linux精简版

答案1

注意Linux Lite 自己的文档建议如果无法从 USB 启动,则使用 PLoP 启动管理器:PLoP 是一个启动管理器,可以从 CD 甚至软盘启动,并且包含内置的基本 USB 存储支持。

https://www.plop.at/en/bootmanager/download.html

https://www.howtogeek.com/howto/16822/boot-from-a-usb-drive-even-if-your-BIOS-wont-let-you/

我曾经使用它在 BIOS 中不支持 USB 的旧系统上启动基于 USB 的安装。

但如果您想使用 PXE,PXE 启动的总体事件顺序如下:

  1. PXE BIOS 扩展(或现代系统中 UEFI 固件的内置网络驱动程序)激活网卡,并发出添加了一些特殊标识符的 DHCP 请求:

    • (PXE选项vendor-class-identifier#60)设置为以单词开头的字符串PXEClient,并包含标识所使用的处理器架构的代码。这可以选择用于为不同的客户端类型提供定制的 PXE 启动解决方案,但在简单的设置中,DHCP 服务器可以忽略这一点。
    • DHCP 请求将表明客户端想要知道 DHCP 选项 #66 和 #67 的值:TFTP 服务器名称和启动文件客户端应分别加载。
  2. DHCP 服务器实际上有两种方式提供 TFTP 服务器名称和启动文件名称:它可以使用上述 DHCP 选项,或者由于 DHCP 可以向后兼容 BootP,因此它可以使用旧的 BootP 字段next-serverbootfile-name在 DHCP 数据包中提供信息。

(某些 PXE BIOS 扩展可能存在错误,并且仅支持其中之一。我见过一种 PXE 固件,如果使用 DHCP 选项 #67,则在启动文件名中添加额外的零字节,但使用 BootP 传统样式可以正常工作解决此类问题可能需要使用 Wireshark 或tcpdump查看实际的 DHCP 和 TFTP 请求和响应以找出问题所在。)

  1. PXE BIOS 扩展将使用 DHCP 响应配置网络接口,从指定的 TFTP 服务器下载指定的文件,并执行该文件。原则上,此后发生的任何事情都完全由该文件中的程序代码(PXE 引导加载程序)控制。实际上,当今 Linux 圈子中最常见的两种 PXE 引导加载程序可能是PXELinuxSYSLINUX 系列的,或PXE。这两者本质上都会从网络配置开始,并使用不同的特殊标识符发出另一个 DHCP 请求。这允许 DHCP 服务器使用另一个 DHCP 选项来告诉 PXE 引导加载程序在何处加载引导加载程序配置文件。

    • 对于 PXELINUX,这是可选的:如果没有额外的选项,它将尝试从加载引导加载程序本身的同一 TFTP 服务器下载其配置。例如,如果下载 PXELINUX 的 TFTP 路径是/pxe/pxelinux.0,那么它将尝试从 下载其配置/pxe/pxelinux.cfg/default
    • 对于 iPXE,必须使用 DHCP 选项指定配置文件的名称,但 iPXE 内置了对 HTTP 的支持,因此它可以接受常规 HTTP URL 作为 DHCP 选项值。
  2. 引导加载程序配置文件可能包含一个漂亮的引导菜单的定义,或者只是告诉引导加载程序加载特定的 Linux 内核及其 initrd/initramfs 文件。它的工作方式与常规 GRUB 类似,只是加载是通过网络而不是从磁盘进行的。引导加载程序配置文件可能包括 Linux 内核的引导选项,就像 GRUB 的配置一样。在网络安装场景中,您通常需要使用引导选项来指定安装程序应在何处找到 ISO 映像或其内容:在现代发行版中,此选项的值通常采用 HTTP URL 的形式。

  3. 一旦 PXE 引导加载程序成功将内核和 initramfs 文件加载到客户端系统的 RAM,它的工作就完成了:它启动 Linux 内核并将 initramfs 内容和任何内核引导选项交给它,然后引导加载程序被覆盖为内核将系统从 16 位兼容模式转换为真正的 32 位保护模式,并重新排列虚拟内存映射以满足其自身的需要。 Linux NIC 驱动程序将在驱动程序启动时重置网络适配器,因此 IP 地址配置通常会丢失。 (现代 UEFI 系统已在 64 位保护模式下启动,但 UEFI 在安全启动方面有其自身的复杂性。)

  4. 在大多数提供基于网络的安装的发行版中,initramfs 包含其自己的 DHCP 客户端,因此引导脚本将仅发出 DHCP 请求(再次)来获取网络地址参数。然后 initramfs 中安装程序的第一部分启动,连接到内核启动参数指定的 URL 以下载其自身的更多部分,并最终开始操作系统安装过程。

所以对于你的问题:

1.) 如果您的路由器的 DHCP 服务器可以配置为向客户端提供必要的 DHCP 选项值,则您不需要第二个 DHCP 服务器。您是正确的,在同一网络中拥有两个不协调的 DHCP 服务器会使事情变得随机且复杂。

2.) ISO 内的安装程序需要支持基于网络的安装。

3.) 基本上,您需要找到两个文件:内核文件和 initramfs 文件。 ISO 映像上最常见的 32 位 Linux 引导加载程序可能是ISOLINUXSYSLINUX 系列:您只需读取isolinux.cfgsyslinux.cfg配置文件,找到内核和 initramfs 文件的路径以及任何必要的引导选项,然后将它们复制到您的配置中网络引导加载程序的选择。一些发行版提供了专门用于网络启动的单独的 kernel+initramfs 集:查看 ISO 的内容以查找名为images/netboot或类似的目录。

由于您将指定用于获取这些文件的 TFTP 路径名,因此您基本上可以将它们放置在您喜欢的任何位置。但您可能希望保持简单,只需将它们放置在您选择的 TFTP 服务器的默认“TFTP 根目录”目录中即可。

一旦您完成了将正确的内核和 initramfs 文件传递​​给客户端的部分,您只需要了解如何提供其余的 ISO 内容。通常,只需将 ISO 或其提取的内容(或循环安装的 ISO 映像)放置到 Web 服务器上的任何方便的位置,然后将指定 ISO URL 的内核引导选项添加到 PXE 引导加载程序中即可配置。

  • 对于现代 RHEL/CentOS/Fedora 及其克隆版本,所需的内核启动选项如下ip=dhcp inst.stage2=http://some.www.server/root/of/ISO
  • Debian/Ubuntu 在其安装程序 initramfs 中具有足够的功能来deb.debian.org直接联系发行版的存储库服务器(如 ),因此如果允许传出连接,您可能根本不需要完整的 ISO。

相关内容