4. 守护进程设置

4.1. NFS 守护进程

只需导出客户端根文件系统所在的目录(有关此主题的更多信息,请参阅 exports 手册页)。最简单的方法是以 no_root_squash 和 rw 导出,但完美的设置是将大部分根文件系统以 root_squash 和 ro 导出,并在以下文件中使用单独的行:/etc/exports对于确实需要 no_root_squash 和/或 rw 的目录。只需从所有内容都为 rw 和 no_root_squash 开始,稍后进行微调。

当然,如果您计划完全从内存盘运行客户端,则根本不需要任何 NFS 服务器。

4.2. BOOTP 守护进程

我假设您已安装 bootpd 软件包。默认配置文件是/etc/bootptab,其语法在 bootptab 手册页中详细说明。让我们创建它。

首先,以 root 身份打开您最喜欢的文本编辑器。推荐使用 vim。是的,就是 vim。如果目前不是,那么是时候换成 vim 了。现在,输入以下行(它们是默认属性)。您在此处设置的所有属性,如果没有在客户端的特定属性列表中被覆盖,都将应用于客户端。
        .default\
                :sm=your subnet mask\
                :ds=the IP address of your DNS server\
                :ht=ethernet\
                :dn=your domain name\
                :gw=the IP address of your gateway\
                :sa=the IP address of the TFTP server\
                :bf=path to find the kernel image\
                :rp=path of the root filesystem\
                :hn
      
当然,并非所有这些参数都是必需的,这取决于您的网络配置和 BOOTP 实现,但在大多数情况下,这些参数都将有效。

然后,在您的网络中为每个客户端添加一个条目。一个条目应如下所示
        dns of the client\
                :ha=MAC address of the client\
                :ip=IP address of the client
      
上面的 MAC 地址是客户端的十六进制硬件地址,不带 ':' 字符。

这是一个示例/etc/bootptab文件
              .default\
                      :sm=255.255.0.0\
                      :ds=192.168.0.2\
                      :ht=ethernet\
                      :dn=frtest.org\
                      :gw=192.168.0.1\
                      :sa=192.168.0.2\
                      :bf=/tftpboot/kernel\
                      :rp=/nfsroot\
                      :hn

              foo\
                      :ha=001122334455\
                      :ip=192.168.2.12

              bar\
                      :ha=00FFEEDDCCBB\
                      :ip=192.168.12.42\
                      :ds=192.168.2.42
      

然后,使用 bootpd -s 命令运行 bootpd 守护进程(将其添加到启动脚本中也是一个好主意),或者将以下行添加到您的/etc/inetd.conf:
        bootps dgram udp wait root /usr/sbin/tcpd�bootpd -i -t 120
      

如果您想测试 BOOTP 服务器,请在您的/etc/bootptab中添加一个条目,并使用 bootptest 程序。

4.3. TFTP

设置 TFTP 守护进程并不难:只需安装 tftpd 软件包(如果有),并将以下行添加到您的/etc/inetd.conf(同样,我假设/tftpboot是内核镜像所在的目录)
        tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot
      
不要忘记 chmod 555/tftpboot目录,因为如果文件不是全局可读的,大多数 TFTP 服务器将不会发送文件。

您应该意识到从 inetd 运行 TFTP 守护进程所带来的限制。如果服务生成过于频繁,大多数 inetd 将会关闭该服务。因此,如果您有很多客户端,则应寻找另一个像 xinetd 这样的 inetd,或者运行独立的 TFTP 守护进程。

现在您已经正确设置了所有守护进程,您可以重启 inetd 并喝杯咖啡。别忘了告诉大家服务器设置已完成,这样您就可以在开始为客户端构建根文件系统之前觉得自己像个英雄。