26.7.多台机器的追踪

当多台机器需要追踪同一个源代码时,让每个系统下载源码并重新编译一切,是对磁盘空间、网络带宽和 CPU 周期的一种浪费。解决方案是让一台机器做大部分的工作,而其余的机器通过 NFS 挂载这些工作。本节概述了一种这样做的方法。关于使用 NFS 的更多信息,请参阅网络文件系统(NFS)

首先,确定一组机器,它们将运行同一组二进制文件,称为 构建集。每台机器可以有一个定制内核,但将运行相同的用户空间二进制文件。从这组机器中,选择一台机器作为 构建机器,在上面构建 world 和内核。理想情况下,这是一台快速的机器,它有足够的空闲 CPU 来运行 make buildworldmake 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 类似的目录。