如果您的机器连接到了一个局域网,您可以从网络上的另外一台机器上面通过 TFTP 来引导它。如果您倾向从另外一台机器上面引导安装系统,则引导文件需要放在那台机器上面的某个特殊地方,并且配置好能够能够支持对您的机器进行引导。
您需要设置一台 TFTP 服务器,并且对于很多机器来说,还需要一台 DHCP 服务器 ,或 BOOTP 服务器。
BOOTP 是一种 IP 协议,用来告诉一台计算机它自己 IP 地址以及从网络何处获得启动映像。 DHCP (Dynamic Host Configuration Protocol) 是一个更灵活,向后兼容的 BOOTP 扩展。有些系统只能通过 DHCP 来配置。
一些较早的 HPPA 机器(比如 715/75)使用 RBOOTD 而不是 BOOTP。Debian 里面有一个 rbootd
软件包。
普通文件传输协议(Trivial File Transfer Protocol (TFTP))被用于为客户提供引导映像。理论上,任意服务器,在任意平台上只要实现了这些协议就都能够被应用。在这一节的一些例子里面,我们将提供在 SunOS 4.x、SunOS 5.x (即 Solaris) 和 GNU/Linux 上面的一些操作例子。
在 GNU/Linux 下面可以使用两种 BOOTP 服务器。首先是 CMU bootpd,另外一种实际上是 DHCP 服务器:ISC dhcpd。Debian GNU/Linux 中它们分别被包含在 bootp
和 dhcp3-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 文件很相似,并使用相同的加密格式。这些文件包括 printcap
、termcap
和 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.4 节 “将 TFTP 映像放到适当的位置” 处获得更多的信息。
相反,通过 ISC dhcpd 设置 BOOTP 就非常容易。因为它把 BOOTP 客户程序看成一个特殊的 DHCP 客户端。部分体系结构需要经过复杂的设置才能从 BOOTP 启动客户端。如果您的机器属于这种情况,请阅读第 4.3.2 节 “设置 DHCP 服务器”。否则,大概只需要将 allow bootp
指令添加到包含客户机的子网的配置部分,并重新启动 dhcpd 就可以了,重启的命令是:/etc/init.d/dhcpd3-server restart
。
一个 DHCP 服务器自由软件是 ISC dhcpd。对于 Debian GNU/Linux,推荐使用 dhcp3-server
软件包。这里是它的一个简单的配置示例文件(参阅 /etc/dhcp3/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; }
在这个例子中,一台服务器 servername
负责执行包括 DHCP 服务器、TFTP 服务器和网关在内的所有工作。您需要修改域名选项,以及服务器名和客户端硬件地址。filename
选项应该是将要从 TFTP 获取的文件名。
在编辑了 dhcpd 配置文件后,您需要使用下面的命令重新启动:/etc/init.d/dhcpd3-server restart
。
要准备好 TFTP 服务器,您首先需要确定 tftpd 已经启动。这通常可以在 /etc/inetd.conf
添加如下字句来实现:
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot
Debian 包通常在安装后会自动把这条设置好。
因为历史原因,TFTP 服务器使用 /tftpboot
作为映像文件目录。然而,Debian GNU/Linux 软件包遵守 Filesystem Hierarchy Standard 使用其他的目录。例如,tftpd-hpa
默认使用 /var/lib/tftpboot
。您或许要适当地调整一下配置文件示例。
检查 /etc/inetd.conf
文件记住被用作 in.tftpd 的参数的目录[2],您接下来会需要它。如果必须修改 /etc/inetd.conf
,您一定要提醒正在运行的 inetd 进程,该文件已经修改。在 Debian 系统中,应该执行 /etc/init.d/inetd reload
;而在其它系统中,找到 inetd 所对应的进程 ID,并执行 kill -HUP
。 inetd-pid
接下来,将 第 4.2.1 节 “在哪里能找到安装映像” 中找到的 TFTP 启动映像放置到 tftpd 引导映像目录中。您可能需要将该文件链接到 tftpd 所使用的引导特定客户端的文件名。不幸的是,这个文件名完全决定于 TFTP 客户程序,而且没有一个强制的标准。
[2] Debian 中所有 in.tftpd 参数默认都会将 TFTP 请求记录到系统日志中。有些还支持 -v
选项增加详细程度。万一遇到引导问题,建议先检查这些日志信息,这对于分析错误是一个好的起始点。