Текст предоставил Mike Meyer.
Если у вас множество машин, для которых вы хотите отслеживать одно и то же дерево
исходных текстов, то загрузка кода и перестроение системы полностью выглядит как ненужная
трата ресурсов: дискового пространства, пропускной способности сети и процессорного
времени. Так оно и есть, и решением является выделение одной машины, которая выполняет
основной объём работы, в то время как остальные используют результаты работы посредством
NFS. В этом разделе описывается именно этот метод.
Первым делом определите набор машин, на которых выполняется один и тот же набор
бинарных программ, и мы будем называть его набором для построения. Каждая машина может иметь собственное
уникальное ядро, но они будут работать с одними и теми же программами пользователя. Из
этого набора выберите машину, которая будет являться машиной для построения. Она станет машиной, на которой будут
строиться ядро и всё окружение. В идеальном случае с достаточно незагруженным CPU для
выполнения команд make buildworld и make
buildkernel. Вам также потребуется выбрать машину, которая будет тестовой для проверки обновлений
программного обеспечения прежде, чем оно будет запущено в промышленную эксплуатацию. Это
должна быть машина, которая может
быть в нерабочем состоянии достаточно долго. Это может быть машина для построения, но не
обязательно.
Все машины в этом наборе для построения должны монтировать каталоги /usr/obj и /usr/src с одной и той же
машины и в одну и ту же точку монтирования. В идеальном случае они располагаются на
разных дисках машины построения, но они могут также монтироваться по NFS на этой машине.
Если у вас имеется несколько наборов для построения, то каталог /usr/src должен быть на машине построения, а по NFS он должен быть
смонтирован на остальных.
Наконец, удостоверьтесь в том, что файл /etc/make.conf на
всех машинах набора для построения соответствует машине построения. Это означает, что
машина построения должна строить все части основного системного набора, которые будут
устанавливаться на каждой машине из набора для построения. Кроме того, у каждой машины
построения должно быть задано имя ядра посредством переменной KERNCONF в файле /etc/make.conf, а машина
построения должна перечислить их все в переменной KERNCONF,
причём первым должно быть имя её собственного ядра. Машина построения должна хранить
конфигурационные файлы ядра каждой машины в каталоге /usr/src/sys/arch/conf, если на ней
будут строиться соответствующие ядра..
Теперь, когда всё это сделано, вы готовы к построению. Постройте ядро и всё окружение
так, как это описано в Разд. 19.4.7.2 на
машине построения, но ничего не устанавливайте. После того, как процесс построения
завершится, перейдите к тестовой машине и установите только что построенное ядро. Если
эта машина монтирует каталоги /usr/src и /usr/obj посредством NFS, то при перезагрузке в
однопользовательский режим вам потребуется задействовать сеть и смонтировать их. Самым
простым способом сделать это является переход во многопользовательский режим и запуск
команды shutdown now для перехода в однопользовательский режим.
После этого вы можете установить новое ядро и всё окружение, а затем выполнить команду
mergemaster обычным образом. После выполнения этих действий
перезагрузитесь для возвращения к обычному режиму работы во многопользовательском режиме
с этой машиной.
После того, как вы убедитесь в нормальной работе всего на тестовой машине, проведите
ту же самую процедуру для установки нового программного обеспечения на каждой из
оставшихся машин из набора для построения.
Те же самые идеи могут использоваться и для дерева портов. Первым критическим шагом
является монтирование /usr/ports с одной и той же машины на
всех компьютерах в наборе для построения. Затем вы можете корректно настроить /etc/make.conf для использования общего каталога с дистрибутивными
файлами. Вы должны задать переменную DISTDIR так, чтобы она
указывала на общедоступный каталог, доступный тому пользователю, который отображается в
пользователя root для ваших точек монтирования NFS. Каждая
машина должна задавать WRKDIRPREFIX так, чтобы она указывала на
локальный каталог построения. Наконец, если вы собираетесь строить и распространять
пакеты, то должны задать переменную PACKAGES так, чтобы она
указывала на каталог, соответствующий DISTDIR.