>Здравствуйте.
>Хочу решить следующую задачу по оптимизации процесса обновления дерева портов и исходников
>системы FreeBSD не нескольких серверах.
>В сети работает несколько серверов под управлением ОС FreeBSD. Каждый сервер подключен
>к интернету. Дело в том, что обновлять отдельно каждый как-то не
>выгодно финансово, посколько приходится за одно обновление платить в несколько раз
>больше.
>Скажите, каким образом можно организовать следующую схему:
>один сервер будет обновляться по интернету, а остальные сервера будут обновляться уже
>с первого сервера. Тогда учитывая, что трафик локальный бесплатный, платить придется
>только один раз.
>Может у кого-то реализованы подобные схемы? Пожалуйста, поделитесь опытом.
Первым делом советую почитать man development.
У меня это организовано примерно так:
На основном сервере есть каталог /FreeBSD, в котором располагается полное дерево CVS от FreeBSD (/FreeBSD/FreeBSD-CVS). Оно обновляется по CVSup раз в сутки, можно и чаще. Потом cvs'ом получаю каталог /FreeBSD/ports, в котором содержатся соответственно порты:
cd /FreeBSD; cvs -d /home/ncvs co -A -P ports
/home/ncvs - это симлинк на /FreeBSD/FreeBSD-CVS.
Есть каталог /FreeBSD/FreeBSD-5.4, где опять же cvs'ом с тегом RELENG_5_4 получен каталог src:
mkdir /FreeBSD/FreeBSD-5.4
cd /FreeBSD/FreeBSD-5.4
cvs -d /home/ncvs co -P -rRELENG_5_4 src
Таким образом можно наплодить каталогов для разных веток. Далее кидаются симлинки:
ln -s /FreeBSD/ports /usr/ports
ln -s /FreeBSD/FreeBSD-5.4/src /usr/src
Создается каталог для дистфайлов:
mkdir /distfiles
У меня он вынесен на отдельный раздел, почему - объясню позже. Далее
ln -s /distfiles /usr/ports/distfiles
После чего создаем еще один каталог (у меня он тоже на отдельном разделе):
mkdir -p /build/obj
ln -s /build/obj /usr/obj
После этого можно расшарить по NFS каталоги /FreeBSD (read-only), /build (read-only) и /distfiles (read-write).
Теперь можно собрать систему:
cd /usr/src
make buildworld
make buildkernel KERNCONF=...
На других серверах примонтируем mainserver:/FreeBSD mainserver:/build mainserver:/distfiles кидаем соответствующие симлинки для /usr/ports, /usr/src и /usr/obj и можно просто
cd /usr/src
make installkernel KERNCONF=...
make installworld
Правда, этот процесс оказывается чуточку сложнее, но суть такова.
Далее, идем в любой порт и делаем make, который кладет дистфайлы в /distfiles (именно поэтому он расшарен в read-write).
Таким образом достигается:
1. Централизованное хранение исходников (src) и портов (ports)
2. Централизованное хранение distfiles
3. Сборка мира осуществляется на одной машине (mainserver) (если, конечно в /etc/make.conf на всех машинах прописано примерно одно и то же).
4. Т.к. сборка делается только в одном месте, уменьшаются накладные расходы.
В кратце все, надеюсь объяснил доступным языком.