21.5. 跟踪多台机器

贡献者 Mike Meyer.

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

21.5.1. 准备

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

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

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

21.5.2. 基本系统

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

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

21.5.3. Ports

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