26.7.多台机器的追踪 =================== 当多台机器需要追踪同一个源代码时,让每个系统下载源码并重新编译一切,是对磁盘空间、网络带宽和 CPU 周期的一种浪费。解决方案是让一台机器做大部分的工作,而其余的机器通过 NFS 挂载这些工作。本节概述了一种这样做的方法。关于使用 NFS 的更多信息,请参阅\ `网络文件系统(NFS) `__\ 。 首先,确定一组机器,它们将运行同一组二进制文件,称为 *构建集*\ 。每台机器可以有一个定制内核,但将运行相同的用户空间二进制文件。从这组机器中,选择一台机器作为 *构建机器*\ ,在上面构建 world 和内核。理想情况下,这是一台快速的机器,它有足够的空闲 CPU 来运行 ``make buildworld`` 和 ``make buildkernel``\ 。 选择一台机器作为 *测试机*\ ,在软件更新投入生产之前对其进行测试。这台机器 *必须* 能够承受长时间的故障。它可以是构建机,但不一定是。 这个构建集中的所有机器都需要通过 NFS 从构建机上挂载 **/usr/obj** 和 **/usr/src**\ 。对于多个构建集,\ **/usr/src** 应该在一台构建机上,其余的则通过 NFS 安装。 确保构建集中所有机器上的 **/etc/make.conf** 和 **/etc/src.conf** 与构建机一致。这意味着,构建机器必须构建构建组中任何机器要安装的基础系统的所有部分。另外,每个构建机器都应该在 **/etc/make.conf** 中用 ``KERNCONF`` 设置其内核名称,构建机器应该在其 ``KERNCONF`` 中列出所有的内核,将自己的内核列在前面。构建机器必须在其 **/usr/src/sys/arch/conf** 中为每个机器准备好内核配置文件。 在联编机上,按照\ `从源代码更新 FreeBSD `__ 中的说明,联编内核和世界,但不要在联编机上安装任何东西。相反,将构建好的内核安装到测试机上。在测试机上,通过 NFS 挂载 **/usr/src** 和 **/usr/obj**\ 。然后,运行 ``shutdown now`` 进入单用户模式,以便安装新的内核和世界,像往常一样运行 ``mergemaster``\ 。完成后,重新启动,回到正常的多用户操作。 在验证了测试机器上的所有东西都正常工作后,使用同样的程序将新的软件安装到构建集中的其他每台机器上。 同样的方法也可以用在 ports 上。第一步是通过 NFS 将 **/usr/ports** 共享给联编集中的所有机器。要配置 **/etc/make.conf** 来共享 distfiles,将 ``DISTDIR`` 设置为一个共同的共享目录,这个目录可以被 NFS 挂载的任何一个 ``root`` 用户所写入。如果要在本地构建 ports,每台机器都应将 ``WRKDIRPREFIX`` 设置为本地构建目录。另外,如果联编系统要联编并向联编组中的机器分发软件包,则应将联编系统上的 ``PACKAGES`` 设置为与 ``DISTDIR`` 类似的目录。