<< Back to shouce.jb51.net

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

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

你需要设置一台 TFTP 服务器,并且对于很多机器来说,需要一台 BOOTP 服务器 , 或者是 DHCP 服务器.

BOOTP is an IP protocol that informs a computer of its IP address and where on the network to obtain a boot image. DHCP (动态主机配置协议 Dynamic Host Configuration Protocol) 是一个更灵活, 向后兼容的 BOOTP 拓展。有一些系统只能通过 DHCP 来配置。

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

4.6.1. 设置 BOOTP 服务器

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

为了使用 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.6.4节 , "移动 TFTP 映像到合适的位置" 处获得更多的信息。

另外一方面,通过 ISC dhcpd 设置 BOOTP 非常容易。因为它 把 BOOTP 客户程序看成一个特殊的 DHCP 客户。 一些结构需要一个复杂的设置才能从 BOOTP 引导客户。如果你的机器属于这种情况,请阅读 第4.6.2节 , "设置一个 DHCP 服务器" 节。 否则,你将很有可能只是加入allow bootp 到含有客户机的子网块并且用 /etc/init.d/dhcpd restart 来重新启动 dhcpd

4.6.2. 设置一个 DHCP 服务器

在 Debian GNU/Linux 里 ISC 是一个免费的 DHCP 服务器 dhcpd. 包括在 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.6.2.1. 在 DHCP 配置中打开 PXE 引导功能

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


option domain-name "example.com";

default-lease-time 6048;
max-lease-time 604800;

allow booting;
allow bootp;

# The next paragraph needs to be modified to fit your case
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
# the gateway address which can be different 
# (access to the internet for instance)
  option routers 192.168.1.1;
# indicate the dns you want to use
  option domain-name-servers 192.168.1.3;
}

host tftpserver {
# tftp server ip address
  fixed-address 192.168.1.90;
# tftp server hardware address
  hardware ethernet 01:23:45:67:89:AB;
}

group {
 next-server 192.168.1.3;
 host tftpclient {
# tftp client hardware address
  hardware ethernet  00:10:DC:27:6C:15;
  filename "/tftpboot/pxelinux.0";
 }
}

注意对于 PXE 引导来说,客户机的文件名 pxelinux.0 是一个引导装载程序, 不是一个内核映象(参见 第4.6.4节 , "移动 TFTP 映像到合适的位置" ).

4.6.3. 准备好 TFTP Server

如果要让 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 , 你将必须提醒在 Debian 机器上活动的 inetd 进程文件已经被改变,运行 /etc/init.d/inetd reload ; 找到那个进程对 inetd 的 ID ,并且运行 kill -HUP inetd-pid.

如果想用 Pre-boot Execution Environment (PXE) method of TFTP 引导,你将需要一台 TFTP 服务器以及 tsize 支持。 在一台 Debian GNU/Linux 服务器上面, atftpd 以及 tftpd-hpa 包符合要求,我们推荐 tftpd-hpa

4.6.4. 移动 TFTP 映像到合适的位置

接下来,放置你需要的 TFTP 引导映象到 tftpd 引导映象目录中 第4.2.1节 , "哪里能找到安装映像" 。 一般来说,这个目录将是 /tftpboot 。 你必须在那个文件和 tftpd 使用的引导特定客户机的文件之间建立一个链接。 不过文件名决定于 TFTP 客户程序,并且这里没有一个主要的标准。

对于用 PXE 引导来说,所有你需要设置只是有关 netboot/pxeboot.tar.gz 压缩包。 只需简单地解压这个包到 tftpd 引导映象目录下。确定你的 DHCP 服务器是被配置成为在引导时把 /pxelinux.0 传递至 tftpd