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

优质
小牛编辑
115浏览
2023-12-01

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

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

反向地址解析协议( 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 地址)。 如果您还不知道这个信息,可以 启动进入“Rescue”模式(例如使用回复软盘)并且使用 /sbin/ifconfig eth0 命令。

在使用 Linux 2.2.x 内核的 RARP 服务器系统上, 您需要通以下的命令来植入内核 RARP 表:

# /sbin/rarp -s 
client-hostname
client-enet-addr
# /usr/sbin/arp -s 
client-ip
client-enet-addr

如果您得到如下信息

SIOCSRARP: Invalid argument

您可能需要加载 RARP 内核模块或重新编译内核并使之支持 RARP。试试在运行 modprobe rarp 命令后再尝试一遍 rarp 命令。

使用 Linux 2.4.x 内核的 RARP 服务器系统上并没有 RARP 模块,您应该使用 rarpd 程序替代。操作过程很类似下面将提到的在 SunOS 上的用法。

在 SunOS 里, 您需要确定客户机的以太网硬件地址已经列在“ethers”数据库(在 /etc/ethers 文件中或者通过 NIS/NIS+)和“hosts”数据库中,然后您需要启动 RARP 守护程序, 在 SunOS 4 里,使用(以 root 身份): /usr/etc/rarpd -a 命令;在 SunOS 5 里,则使用 /usr/sbin/rarpd -a 命令。

4.3.2. 设置 BOOTP 服务器

在 GNU/Linux 下面有两种 BOOTP 服务器。他们是 CMU bootpd和另外一种实际上是 DHCP 服务器的程序 ISC dhcpd,他们被包含在 Debian GNU/Linux 的 bootpdhcp 软件包中。

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

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

现在,您必须创建一个 /etc/bootptab 文件。它具有和一些老 BSD 文件很相似并使用相同的加密格式。这些文件包括 printcaptermcap,和 disktab。参见 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 映像放到适当的位置” 处获得更多的信息。

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

4.3.3. 设置 DHCP 服务器

ISC dhcpd 是一种自由软件 DHCP 服务器。在 Debian GNU/Linux 里,它被包含在 dhcp 软件包中。这里有它的一个配置文件的范例(通常是 /etc/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/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB; 
  fixed-address 192.168.1.90;
}

注:新的(并且是推荐的) dhcp3 软件包使用 /etc/dhcp3/dhcpd.conf作为其配置文件。

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

在编辑了 dhcpd 配置文件后,您需要使用下面的命令重新启动它:/etc/init.d/dhcpd restart作为其配置文件。

4.3.4. 开启 TFTP 服务器

要准备好 TFTP 服务器,您首先需要确定 tftpd 已经启动。这通常可以在 /etc/inetd.conf添加如下字句来实现:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Debian 包通常在安装后会自动把这条设置好。

检查那个文件并且记住被用作 in.tftpd 的参数的目录,您接下来将会需要它。 -l 参数能够让某些版本的 in.tftpd 将所有的请求记录到系统日志中。 这将在检查错误的时候会很有用。如果您必须修改 /etc/inetd.conf, 您将必须提醒正在运行的 inetd进程该文件已经被改变。在 Debian 系统中,您应该执行 /etc/init.d/inetd reload;而在其它系统中,找到 inetd 所对应的进程 ID,并且运行 kill -HUP inetd-pid

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

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

对于用 PXE 引导来说,您所需的只是设置 netboot/netboot.tar.gz 压缩包。简单地将此包解压到 tftpd 引导映像目录下。 并确保您的 DHCP 服务器配置将会把 /debian-installer/ia64/elilo.efi 以启动所需的文件名传递至tftpd