21.5. Обновяване на множество машини

Contributed by Mike Meyer.

Ако имате няколко машини на които искате да имате едни и същи сорсови дървета, тогава, да извършвте за всички тях теглене на сорсовете и прекомпилация на всичко ще бъде загуба на ресурси: дисково пространство, мрежов трафик и процесорни цикли. Това е така и решението е на една машина да се извърши повечето работа, а останалите машини да монтират тази работа през NFS. Тази секция описва метод как да се постигне това.

21.5.1. Предварителни действия

Първо, определете набора от машини които ще използват едни и същи бинарни файлове, което ще наричаме build set. Всяка машина може да има свое си custom ядро, но всички ще използват едни и същи userland binaries. От тези машини изберете една, която ще бъде компилираща машина . Това ще машината на която the world и ядрото ще бъдат компилирани. В идеалния случай, това трябва да е бърза машина разполагаща с не натоварен процесор за изпълнението на make world. Добре е да изберете и машина която да бъде като тестова и на която ще се изтества софтуерните обновления преди те да бъдат използвани в production. Това трябва да бъде машина за която може да си позволите прекъсване в работата за дълъг период от време. Това може да е и компилиращата машината, но може и да не е.

Всички машини в този build set трябва да монтират /usr/obj и /usr/src от тази същата машина, и то в една и съща точка на монтиране. В идеалния случай, горните са на две различни устройства на компилиращата машина, но също така могат да бъдат и NFS-монтирани на тази машина. Ако имате няколко build sets, то /usr/src трябва да е на едната компилиращата машина, а NFS-монтирания на останалите.

Накрая се убедете, че /etc/make.conf на всички машини от build set е в съответствие с този на компилиращата машина. Това означава, че компилиращата машина трябва да изкомпилира всички части на base system които всяка машина от build set после ще инсталира. Също така, всяка машина трябва да има за своето ядро настроено име в KERNCONF от /etc/make.conf, а компилиращата машина трябва да съдържа всичките в KERNCONF, започвайки първо със своето собствено ядро. Компилиращата машина трябва да има конфигурационни файлове на ядрото за всяка машина в /usr/src/sys/arch/conf ако тя ще компилира тяхните ядра.

21.5.2. The Base System

Сега вече всичко е готово и можете да изкомпилирате всичко. Компилирайте ядрото и world както е описано в Section 21.4.6.2 на компилиращата машина, но не инсталирайте нищо. След като компилацията завърши, идете на тестовата машина и инсталирайте ядрото което току що компилирахте. Ако тази машина е монтира /usr/src и /usr/obj през NFS, когато я рестартирате в еднопотребителски режим ще трябва да вдигнете мрежата и да ги монтирате. Най-лесния начин да се направи това е да се зареди в многопотребителски режим, след което да се изпълни shutdown now за да се премине в еднопотребителски. Сега можете да инсталирате новото ядро и world и да изпълните mergemaster така както го правите обикновено. Когато сте готови, рестартирайте за да преминете в нормална многопотребителска среда за тази машина.

След като се убедите, че всичко на тестовата машина работи нормално използвайте същата процедура за да инсталирате новия софтуер на всяка от останалите машини от build set.

21.5.3. Ports

Същите идеи могат да се изпозват и за ports дървото. Първата важна стъпка е да се монтира /usr/ports от същата машина на всички машини от build set. След което можете да настроите /etc/make.conf така, че да споделите distfiles. Трябва да настроите DISTDIR на обща споделена директория в която може да пише всеки потребител root който е мапнат във вашите NFS mounts. Всяка машина трябва да настрои WRKDIRPREFIX на локална build директория. Накрая, ако ще компилирате и дистрибутирате пакети, трябва да настроите PACKAGES на директория сходна с DISTDIR.

Този и други документи можете да намерите в ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

За въпроси относно FreeBSD, прочетете документацията преди да попитате в <questions@FreeBSD.org>.
За въпроси относно този документ, e-mail <doc@FreeBSD.org>.