24.6. 多台机器的升级

当有多台主机需要追踪相同的原始码树时,要在每一台主机的系统下载原代码与重新编译所有的东西会耗费不少磁盘空间、网络带宽与 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 中的描述,编译内核和世界(world),但不要在建置机上安装任何东西。相反,将构建好的内核安装到测试机上。在测试机上,通过 NFS 挂载 /usr/src/usr/obj 。然后,运行 shutdown now 进入单用户模式,以便安装新的内核和世界,像往常一样运行 mergemaster 。完成后,重新启动,回到正常的多用户操作。

在验证了测试机器上的所有东西都正常工作之后,使用同样的程序在构建集的其他机器上安装新的软件。

同样的方法可以用在 ports 树上。第一步是通过 NFS 将 /usr/ports 共享给构建集中的所有机器。要配置 /etc/make.conf 以共享 distfiles ,请将 DISTDIR 设置为一个共同的共享目录,该目录可由 NFS 挂载映射到的任何用户 root 来写入。如果要在本地构建 ports,每台机器都应将 WRKDIRPREFIX 设置为本地构建目录。另外,如果联编系统要联编并向联编组中的机器分发软件包,则应将联编系统上的 PACKAGES 设置为与 DISTDIR 类似的目录。