Сборка локального сервера CVSup


При обновлении из исходного кода каждый сервер должен подключаться к серверу FreeBSD CVSup и загружать последние версии файлов исходного кода. Если у вас много серверов, то обновление операционной системы на них — весьма трудоемкое занятие. Обеспечение выхода в Интернет через брандмауэр для всех этих серверов в крупных компаниях может быть нежелательным — сетевой администратор откроет по вашей просьбе порт TCP 5999 для одной машины, но не для всех. Все зеркала поддерживаются добровольцами, которые предоставляют для этого свои серверы и полосу пропускания, а также тратят время на поддержку серверов. Зачем загружать одно и то же снова и снова?

Предположим, вы входите на каждый свой сервер по очереди и обновляете исходный код системы. В промежутках между началом обновления исходного кода на разных машинах код на зеркале может немного измениться. Код на зеркалах обновится не сразу, а процесс обновления на ваших машинах уже идет. Если у вас несколько рабочих систем, то лучше всего, если они будут абсолютно идентичны. Даже если на них установлены версии -stable «выпуска» от 7.1 до 7.2, такое расхождение представляет собой потенциальный источник проблем. Его устранение сильно облегчит выявление неполадок. Надо исключить саму возможность появления мысли вроде «Та-ак. Сервер 86 загибается. Может, из-за того, что на серверах установлены различные версии FreeBSD?», иначе вы рискуете сойти с ума. Преодолеть такие трудности позволит запуск центрального сервера CVSup (он же cvsupd-cepвер), то есть локального зеркала исходного кода FreeBSD.

Запустить cvsupd-сервер не так-то просто, но это намного проще, чем запустить веб-сервер и обеспечить его безопасность. «Порт» /usr/ports/net/cvsup-mirror поддерживает все мудреные этапы конфигурирования зеркала. На самом деле этот «порт» — всего лишь сценарий, выполняющий настройку других программ. Сценарий предложит значения по умолчанию для параметров настройки cvsupd-сервера, и все.

Одна из зависимостей cvsup-mirror — это полный комплект программного обеспечения CVSup. Несмотря на то что программа csup как клиент заменила CVSup, сам cvsupd-сервер по-прежнему остается частью CVSup. По умолчанию при установке CVSup устанавливается и графический интерфейс. Прежде чем начать настраивать зеркало, настоятельно рекомендую установить CVSup без графического интерфейса. Для обеспечения работы сервера вам совершенно не нужен графический интерфейс и все необходимое для его работы программное обеспечение X Window. (Если у вас уже установлен сервер X Window, то можно не беспокоиться об установке графического интерфейса, потому что в таком случае вам не придется устанавливать полный комплект X Window только из-за одной программы.)

# cd /usr/ports/net/cvsup-without-gui
# make all install clean
# cd /usr/ports/net/cvsup-mirror
# make all install clean

После загрузки работа сценария приостановится и появится приглашение для ввода информации. Ответ по умолчанию указан в квадратных скобках. Нажатие клавиши Enter означает ввод ответа по умолчанию.

В первую очередь нужно указать зеркало, откуда будут загружаться обновления (1). Не принимайте значение по умолчанию, вместо этого укажите достаточно близкий к вам общедоступный сервер. Обычные конечные пользователи не смогут получить доступ к основному серверу CVSup, который зарезервирован для обслуживания официальных зеркал FreeBSD. (Даже я, будучи одним из разработчиков, не имею доступа к основному серверу cvsup-master, разве только в экстраординарных обстоятельствах и по специальному запросу.) Затем нужно решить, как часто будет обновляться содержимое зеркала (2). Зеркала, с которых вы будете загружать обновления, сами обновляются не чаще одного раза в час, поэтому нет смысла выбирать более короткий интервал. Обычно я устанавливаю значение 168, что соответствует обновлению репозитария один раз в неделю. Если я начну обновлять свои сервера чаще, чем раз в неделю, значит, я делаю что-то не так!

Процесс обновления запускается из сгоп (глава 15). В большинстве случаев я удаляю задание на выполнение обновления репозитария и обновляю его вручную. Для обновления группы серверов до одной и той же версии -stable я сначала обновляю исходный код на сервере cvsupd, а затем обновляю с этого сервера остальные все машины. Зачастую я обновляю код на тестовой машине, провожу многоэтапное всестороннее тестирование качества и затем обновляю программы на остальных машинах с тем же комплектом исходного кода. Такой подход обеспечивает хорошее качество кода и идентичность систем. Нет никаких требований к частоте обновления кода; в конце концов, это ваш код, поэтому исходите из своих потребностей!

Do you wish to mirror the main source repository [у]? у
Where would you like to put it [/home/ncvs]?
(Перевод: Зеркалировать репозитарий основного исходного кода?
Где бы вы хотели хранить его содержимое)

Репозитарий основного исходного кода содержит исходный код FreeBSD, а поддержка локального зеркала — основная цель данного примера, /home/ncvs — это местоположение CVS-репозитария по умолчанию, используйте его, если у вас нет достаточно веских причин для назначения другого каталога. В обоих случаях значения по умолчанию вполне приемлемы.

Do you wish to mirror the installed World Wide Web data [y]? n
Do you wish to mirror the GNATS bug tracking database [y]? n
Do you wish to mirror the mailing list archive [y]? n
(Перевод: Зеркалировать установленные данные Сети?
Зеркалировать базу данных GNATS (для отслеживания ошибок)?
Зеркалировать архив почтовых рассылок?)

Ответы на эти три вопроса помогут вам заполнить большой жесткий диск, который вы приберегли на черный день. В состав installed World Wide Web data входят установленные версии Справочника, Сборника вопросов и ответов и прочее содержимое веб-сайта FreeBSD. В базе данных GNATS хранятся все отчеты о проблемах (Problem Reports, PR), начиная с появления Проекта в прошлом веке. А архив почтовых рассылок содержит копии всех сообщений во всех почтовых рассылках FreeBSD. Мне и текущие-то рассылки FreeBSD некогда отслеживать, где уж там читать архивы!

Unique unprivileged user ID for running the client [cvsupin]?
Unique unprivileged group ID for running the client [cvsupin]?
Unique unprivileged user ID for running the server [cvsup]?
Unique unprivileged group ID for running the server [cvsup]?
(Перевод:
Уникальный ID непривилегированного пользователя для запуска клиента
Уникальный ID непривилегированной группы для запуска клиента Уникальный ID непривилегированного пользователя для запуска сервера Уникальный ID непривилегированной группы для запуска сервера)

Для работы сервера зеркала необходимы два уникальных числовых идентификатора (ID) пользователя и связанных с ними групп. Не используйте учетные записи nobody, nonroot и npgroup — эти пользователи являются владельцами других файлов в системе, запуск с их помощью зеркала cvsupd снизит уровень безопасности системы. Значения по умолчанию обычно вполне приемлемы, если, конечно, вы заранее не создали специальную учетную запись для Базиля ван Пупкинсона или еще кого-то.

Syslog facility for the server log [daemon]?
(Перевод: Источник syslog-сообщений сервера)

Подробнее о syslog мы поговорим в главе 19, а пока примем значение по умолчанию.

Maximum simultaneous client connections [8]?
(Перевод: Максимальное количество одновременных подключений клиентов)

Позднее вы без труда сможете изменить максимальное число одновременных подключений клиентов, а пока примем значение по умолчанию. Это число определяет количество машин, одновременно выполняющих обновление.

«Порт» предложит создать учетные записи пользователей и группы, выбранные ранее, и настроить syslogd. Позвольте ему сделать это.

Would you like me to set up your crontab for hourly updates [у]? у
(Перевод: Создать настройки в crontab для выполнения обновлений каждый час?)

Возможно, вам не требуется выполнять обновления в cvsupd ежечасно, если так — введите в ответ n.

Обновление зеркала будет производиться либо с помощью cron(8) (глава 15), либо вручную, запуском сценария /usr/local/etc/cvsup/update.sh. Вы должны указать полный путь к этой команде. В первый раз обновление выполняется достаточно долго из-за необходимости загрузить весь репозитарий исходного кода, но последующие обновления пройдут значительно быстрее. Чтобы сервер CVSup автоматически запускался, позволяя клиентам подключаться к нему для обновления исходного кода, поместите в файл /etc/rc.conf строку cvsupd_enable="YES".

Управление доступом

Желание быть хорошим системным администратором и наличие личного репозитария не означает, что вы хотите сделать загрузку с установленного зеркала доступной любому Базилю ван Пупкинсону. Сервер cvsupd позволяет управлять доступом компьютеров к зеркалу.

Файл /usr/local/etc/cvsup/cvsupd.access управляет списком хостов, которым разрешено подключаться к зеркалу. Строки, начинающиеся с символа «решетки» (#), являются комментариями, символ «плюс» (+) означает, что клиент может подключиться, а символ «минус» (-) — что такой возможности нет. Звездочка (*) означает, что клиент должен пройти аутентификацию, о которой говорится чуть ниже в этом разделе.

Каждое правило в cvsupd.access может ссылаться либо на имя хоста, либо на IP-адрес, но IP-адрес предпочтительнее. Также с IP-адресами можно применять сетевые маски. Например, в следующих строках разрешается доступ из сети 192.168.0.0/16 и запрещается доступ клиентов с любых других адресов:

+192.168.0.0/16
-0.0.0.0/0

Управление доступом по IP-адресам хорошо подходит для статических сетей. Однако вам может потребоваться более гибкая система, где клиенты подключаются со случайных IP-адресов. В этом случае предпочтительнее применить схему аутентификации на основе паролей. К сожалению, клиент csup не поддерживает возможность аутентификации. Если вам требуется поддержка механизма аутентификации, установите /usr/ports/net/cvsup и прочитайте страницу руководства cvsupd(8). Однако большинство администраторов считают более подходящим способ на основе IP-адресов.

Зеркала CVS и разработка

Если хотите поучаствовать в разработке FreeBSD, можете использовать зеркало CVS как локальный CVS-репозитарий. Добавьте свою учетную запись в группу cvsup — и вы получите привилегии, необходимые для выполнения операций в локальном CVS-репозитарии. Если вы не разработчик, то это не для вас.

Комментарии запрещены.