如果您的机器连接到了一个局域网,您可以从网络上的另外一台机器上面通过 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 上面的一些操作例子。
为了设置 RARP,需要知道需要安装系统的客户机以太网卡地址(网卡 MAC 地址)。如果您还不知道这个信息,可以启动进入“Rescue” 模式,并使用 ip addr show dev eth0
命令。
在一个使用 Linux 内核的 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
命令。
一个 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
。
在 GNU/Linux 下面可以使用两种 BOOTP 服务器。首先是 CMU bootpd,另外一种实际上是 DHCP 服务器:ISC dhcpd。Debian GNU/Linux 中它们分别被包含在 bootp
和 isc-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 文件很相似,并使用相同的加密格式。这些文件包括 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.4.5 节 “将 TFTP 映像放到适当的位置” 处获得更多的信息。
相反,通过 ISC dhcpd 设置 BOOTP 就非常容易。因为它把 BOOTP 客户程序看成一个特殊的 DHCP 客户端。部分体系结构需要经过复杂的设置才能从 BOOTP 启动客户端。如果您的机器属于这种情况,请阅读第 4.4.2 节 “设置 DHCP 服务器”。否则,大概只需要将 allow bootp
指令添加到包含客户机的子网的配置部分 /etc/dhcp/dhcpd.conf
,并用命令 /etc/init.d/isc-dhcp-server restart
重新启动 dhcpd。
要准备好 TFTP 服务器,您首先需要确定 tftpd 已经启动。
对于 tftpd-hpa
有两种方式可以启动服务。它可以通过系统的 inetd
守护程序启动,或者设置为独立的守护程序。这可以在安装软件包的时候选择,也可以用重新配置软件包方式修改。
注意 | |
---|---|
因为历史原因,TFTP 服务器使用 |
Debian 中所有 in.tftpd 参数默认都会将 TFTP 请求记录到系统日志中。有些还支持 -v
选项增加详细程度。万一遇到引导问题,推荐先检查这些日志信息,这对于分析错误是一个好的起始点。
接下来,将 第 4.2.1 节 “在哪里能找到安装文件” 中找到的 TFTP 启动映像放置到 tftpd 引导映像目录中。您可能需要将该文件链接到 tftpd 所使用的引导特定客户端的文件名。不幸的是,这个文件名完全决定于 TFTP 客户程序,而且没有一个强制的标准。