19.5. 跟踪多台机器

贡献者Mike Meyer.

如果您有多台机器想跟踪同样的源码树, 那么让它们都下载源码并重建所有东西,看起有点浪费资源: 磁盘空间、网络带宽以及 CPU 周期。 解决的办法是让一台机器处理大部分的工作,而其它的机器通过 NFS 装载 (mount) 这些工作。这部分列举了一种这样做的方法。

19.5.1. 准备

首先,确定一批机器,运行的二进制代码是同一套---我们称作 建造套件(build set)。每台机器可以有定制内核, 但他们运行的是相同的用户区二进制文件(userland binaries)。 从这个集起,选择一台机器做为 建造机器(build machine)。 这将是用于建造(build)系统和内核的机器。想像一下,它应该是一台快速的机器, 有足够的空余的 CPU 来执行make buildworld。 您也想要选一台机器做为 测试机器(test machine), 这个将用于软件的更新生成产品之前对他们进行测试。这个 必须 是一台您能提供的平时也可使用的机器。 它可以是“建造机器”,但没这个必要。

在这个“建造套件”里的所有机器需要从同一台机器、 同一个点上装载 /usr/obj/usr/src。理想地, 它们在“建造机器”上的两个不同的驱动器里, 但是在那台机器上可以进行 NFS 装载。如果您有多个“建造套件”, /usr/src 应该在某个“建造机器”上, 而在其它机器上进行 NFS 装载。

最后,确认“建造套件”里所有机器上的 /etc/make.conf 与“建造机器”里的相同。 这意味着“建造机器”必须建造部分基本系统用于 “建造套件”里所有机器的安装。同样, 每台“建造机器”要有它自已的内核名字,使用 /etc/make.conf 里的 KERNCONF 进行设置,并且每台“建造机器”应该把它们列在 KERNCONF 里,同时把自已的内核列在最前。 “建造机器”的 /usr/src/sys/arch/conf 里一定要有每台机器的内核配置文件,如果它想建造它们的内核的话。

19.5.2. 基本系统

既然所有的妥当了,就准备建造所有的东西。如Section 19.4.7.2中描述的一样在“建造机器”上建造内核和系统, 但是什么也不安装。在建造结束后,转到“测试机器”上, 安装您刚建造的内核。如果这台机器通过 NFS 装载了 /usr/src/usr/obj, 在您重启到单用户模式里,您需要启动网络然后装载他们。 最简单的方式是启动到多用户模式下,然后执行 shutdown now 转到单用户模式。一旦进入,您就可以安装新的内核和系统,并执行 mergemaster,就像平常一样。完成后, 重启返回到一般多用户模式操作这台机器。

在您确信所有在“测试机器”里都工作正常后, 就使用相同的过程在“建造套件”里的其它机器里安装新的软件。

19.5.3. Ports

类似的想法是使用 ports 树。 第一个关键的步骤是从同一台机子里装载 /usr/ports 到“建造套件”里的所有机子。 然后正确设置 /etc/make.conf 共享 distfiles。您应把 DISTDIR 设置到一个共享的目录里, 那里可以被任何一个 root 用户写入,并且是由您的 NFS 装载映射的。设置每一台机子的 WRKDIRPREFIX 到一个本地建造 (build) 目录。最后,如果您要建造和发布包 (packages),那么您应该设置 PACKAGES 到一个类似于 DISTDIR 的目录。