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

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

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

The Reverse Address Resolution Protocol (RARP) 是一种告诉您的客户机它自己 IP 地址的方法。另外一种方法是采用 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 上面的一些操作例子。

4.3.1. 设置 RARP 服务器

为了设置 RARP,需要知道需要安装系统的客户机以太网卡地址(网卡 MAC 地址)。如果您还不知道这个信息,可以从 OpenPROM 的初始化引导信息中获得,请使用 OpenBoot .enet-addr 命令,或者 启动进入Rescue 模式(例如使用恢复软盘)并使用 ip addr show dev eth0 命令。

在一个使用 Linux 2.4 或 2.6 内核的 RARP 服务器系统,或者 Solaris/SunOS 上,使用 rarpd 程序。您需要确定客户机的以太网硬件地址已经列在 ethers 数据库(可以在 /etc/ethers 文件中或通过 NIS/NIS+)和 hosts 数据库中,然后您需要启动 RARP 守护程序。使用(以 root 身份):在多数 Linux 系统和 SunOS 5 (Solaris 2) 上使用 /usr/sbin/rarpd -a,有些 Linux 系统上使用 /usr/sbin/in.rarpd -a 命令,在 SunOS 4 (Solaris 1) 里,则使用 /usr/etc/rarpd -a 命令。

4.3.2. 设置 DHCP 服务器

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

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

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

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

4.3.3. 架设 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 上,这行看起来应该像这样:

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

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

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

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

By contrast, setting up BOOTP with ISC dhcpd is really easy, because it treats BOOTP clients as a moderately special case of DHCP clients. Some architectures require a complex configuration for booting clients via BOOTP. If yours is one of those, read the section 第 4.3.2 节 “设置 DHCP 服务器”. Otherwise you will probably be able to get away with simply adding the allow bootp directive to the configuration block for the subnet containing the client in /etc/dhcp/dhcpd.conf, and restart dhcpd with /etc/init.d/isc-dhcp-server restart.

4.3.4. 开启 TFTP 服务器

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

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

注意

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

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

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

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

4.3.5.1. SPARC TFTP 引导

一些 SPARC 体系通常使用子体系名称,比如 SUN4M 或者 SUN4C。因此,如果您的系统子体系是 SUN4C,其 IP 是 192.168.1.3,则文件名为 C0A80103.SUN4C。然而,有些子体系客户端所需要的文件仅仅是 client-ip-in-hex。一个简易的确定 16 进制 IP 地址的方法是在 shell 中输入下列命令(假设机器的 IP 为 10.0.0.4)。

$ printf '%.2x%.2x%.2x%.2x\n' 10 0 0 4

。要得到正确的文件名,您应该将所有的字母改成大写,并在必要时加上子体系名。

如果都正确完成,从 OpenPROM 使用 boot net 命令应该加载映像。假如映像找不到,查看 tftp 服务器的日志所需要的映像文件名。

您也可以通过把一个特定的文件名附加到 OpenPROM boot 命令的结尾来强制某些 SPARC 系统使用它。比如 boot net my-sparc.image。不过它仍然必须被请放置在 TFTP 服务器要查找的目录中。