4.5. 为使用 TFTP 网络引导准备文件

如果您的机器连接到了一个局域网,您可以从网络上的另外一台机器上面通过 TFTP 来引导它。如果您倾向从另外一台机器上面引导安装系统,则引导文件需要放在那台机器上面的某个特殊地方,并且配置好能够能够支持对您的机器进行引导。

您需要设置一台 TFTP 服务器,并且对于很多机器来说,还需要一台 DHCP 服务器 ,或 BOOTP 服务器。

BOOTP 是一种 IP 协议,用来告诉一台计算机它自己 IP 地址以及从网络何处获得启动映像。 DHCP (Dynamic Host Configuration Protocol) 是一个更灵活,向后兼容的 BOOTP 扩展。有些系统只能通过 DHCP 来配置。

普通文件传输协议(Trivial File Transfer Protocol (TFTP))被用于为客户提供引导映像。理论上,任意服务器,在任意平台上只要实现了这些协议就都能够被应用。在这一节的一些例子里面,我们将提供在 SunOS 4.x、SunOS 5.x (即 Solaris) 和 GNU/Linux 上面的一些操作例子。

[注意]注意

对于 Debian GNU/Linux 服务器,我们推荐使用 tftpd-hpa。它由 syslinux bootloader 的同一作者开发,因此不会导致很多问题。另一个好的选择是 atftpd

4.5.1. 设置 DHCP 服务器

一个 DHCP 服务器自由软件是 ISC dhcpd。对于 Debian GNU/Linux,推荐使用 isc-dhcp-server 软件包。这里是它的一个简单的配置示例文件(参阅 /etc/dhcp/dhcpd.conf):

  1. option domain-name "example.com";
  2. option domain-name-servers ns1.example.com;
  3. option subnet-mask 255.255.255.0;
  4. default-lease-time 600;
  5. max-lease-time 7200;
  6. server-name "servername";
  7. subnet 192.168.1.0 netmask 255.255.255.0 {
  8. range 192.168.1.200 192.168.1.253;
  9. option routers 192.168.1.1;
  10. }
  11. host clientname {
  12. filename "/tftpboot.img";
  13. server-name "servername";
  14. next-server servername;
  15. hardware ethernet 01:23:45:67:89:AB;
  16. fixed-address 192.168.1.90;
  17. }

在这个例子中,一台服务器 servername 负责执行包括 DHCP 服务器、TFTP 服务器和网关在内的所有工作。您需要修改域名选项,以及服务器名和客户端硬件地址。filename 选项应该是将要从 TFTP 获取的文件名。

在编辑了 dhcpd 配置文件后,您需要使用下面的命令重新启动:/etc/init.d/isc-dhcp-server restart

4.5.1.1. 在 DHCP 配置中打开 PXE 引导功能

这里是另外一个采用 TFTP 的 Pre-boot Execution Environment (PXE) 方法的 dhcp.conf 配置例子。

  1. option domain-name "example.com";
  2. default-lease-time 600;
  3. max-lease-time 7200;
  4. allow booting;
  5. allow bootp;
  6. # The next paragraph needs to be modified to fit your case
  7. subnet 192.168.1.0 netmask 255.255.255.0 {
  8. range 192.168.1.200 192.168.1.253;
  9. option broadcast-address 192.168.1.255;
  10. # the gateway address which can be different
  11. # (access to the internet for instance)
  12. option routers 192.168.1.1;
  13. # indicate the dns you want to use
  14. option domain-name-servers 192.168.1.3;
  15. }
  16. group {
  17. next-server 192.168.1.3;
  18. host tftpclient {
  19. # tftp client hardware address
  20. hardware ethernet 00:10:DC:27:6C:15;
  21. filename "pxelinux.0";
  22. }
  23. }

注意对于 PXE 引导来说,客户端文件名 pxelinux.0 是一个 boot loader,而非一个内核映象(参见下面的 第 4.5.4 节 “将 TFTP 映像放到适当的位置”)。

If your machine uses UEFI to boot, you will have to specify a boot loader appropriate for UEFI machines, for example

  1. group {
  2. next-server 192.168.1.3;
  3. host tftpclient {
  4. # tftp client hardware address
  5. hardware ethernet 00:10:DC:27:6C:15;
  6. filename "debian-installer/amd64/bootnetx64.efi";
  7. }
  8. }

4.5.2. 架设 BOOTP 服务器

在 GNU/Linux 下面可以使用两种 BOOTP 服务器。首先是 CMU bootpd,另外一种实际上是 DHCP 服务器:ISC dhcpd。Debian GNU/Linux 中它们分别被包含在 bootpisc-dhcp-server 软件包。

为了使用 CMU bootpd,您必须首先将 /etc/inetd.conf 中相关的注释标记去掉(或者加入一些新行)。在 Debian GNU/Linux 里,您可以运行 update-inetd --enable bootps,然后执行 /etc/init.d/inetd reload 来实现此任务。万一您的 BOOTP 服务器不是运行在 Debian 上,这行看起来应该像这样:

  1. bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120

现在,您必须创建一个 /etc/bootptab 文件。它具有和一些经典的 BSD 文件很相似,并使用相同的加密格式。这些文件包括 printcaptermcapdisktab。参见 bootptab 的手册页以获得更多的信息。对于 CMU bootpd,您将需要知道客户机硬件(MAC)地址。这里有一个示例 /etc/bootptab

  1. client:\
  2. hd=/tftpboot:\
  3. bf=tftpboot.img:\
  4. ip=192.168.1.90:\
  5. sm=255.255.255.0:\
  6. sa=192.168.1.1:\
  7. ha=0123456789AB:

您至少需要修改 “ha” 选项,它指定了客户机的硬件地址。“bf” 选项则指定了一个客户机应该通过 TFTP 取得的文件名称。请从 第 4.5.4 节 “将 TFTP 映像放到适当的位置” 处获得更多的信息。

相反,通过 ISC dhcpd 设置 BOOTP 就非常容易。因为它把 BOOTP 客户程序看成一个特殊的 DHCP 客户端。部分体系结构需要经过复杂的设置才能从 BOOTP 启动客户端。如果您的机器属于这种情况,请阅读第 4.5.1 节 “设置 DHCP 服务器”。否则,大概只需要将 allow bootp 指令添加到包含客户机的子网的配置部分 /etc/dhcp/dhcpd.conf,并用命令 /etc/init.d/isc-dhcp-server restart 重新启动 dhcpd

4.5.3. 开启 TFTP 服务器

要准备好 TFTP 服务器,您首先需要确定 tftpd 已经启动。

对于 tftpd-hpa 有两种方式可以启动服务。它可以通过系统的 inetd 守护程序启动,或者设置为独立的守护程序。这可以在安装软件包的时候选择,也可以用重新配置软件包方式修改。

[注意]注意

因为历史原因,TFTP 服务器使用 /tftpboot 作为映像文件目录。然而,Debian GNU/Linux 软件包遵守 Filesystem Hierarchy Standard 使用其他的目录。例如,tftpd-hpa 默认使用 /srv/tftp。您或许要适当地调整一下配置文件示例。

Debian 中所有 in.tftpd 参数默认都会将 TFTP 请求记录到系统日志中。有些还支持 -v 选项增加详细程度。万一遇到引导问题,建议先检查这些日志信息,这对于分析错误是一个好的起始点。

4.5.4. 将 TFTP 映像放到适当的位置

接下来,将 第 4.2.1 节 “在哪里能找到安装映像” 中找到的 TFTP 启动映像放置到 tftpd 引导映像目录中。您可能需要将该文件链接到 tftpd 所使用的引导特定客户端的文件名。不幸的是,这个文件名完全决定于 TFTP 客户程序,而且没有一个强制的标准。

For PXE booting, everything you should need is set up in the netboot/netboot.tar.gz tarball. Simply extract this tarball into the tftpd boot image directory. Make sure your dhcp server is configured to pass pxelinux.0 to tftpd as the filename to boot. For UEFI machines, you will need to pass an appropriate EFI boot image name (such as /debian-installer/amd64/bootnetx64.efi).