3. Как вести зеркало FreeBSD
Пред. |  | След.

## 3. Как вести зеркало FreeBSD

Теперь вам известно, какая потребуется машина и как предоставлять сервисы, но не как получить их самому. :-) В этом разделе описывается процесс ведения зеркала и поддержания его в актуальном состоянии, в том числе какие инструменты использовать и какие сайты выбирать в качестве источников для синхронизации.

### 3.1. FTP

Файлы, доступные по FTP, составляют большую часть зеркала. Они включают дистрибутивные наборы, необходимые для установки по сети, ветви (branches), в которых отражено текущее состояние исходных текстов, образы ISO для записи компакт-дисков с дистрибутивами для установки, образами «живых» файловых систем и пакетами, дерево портов, исходные дистрибутивы для сборки портов и кучу готовых пакетов. И, разумеется, все вышеописанное — для разных версий FreeBSD и различных архитектур.

#### 3.1.1. При помощи программ для FTP-зеркалирования

Для выкачивания файлов вы можете использовать программу FTP-зеркалирования. Вот некоторые из наиболее часто использующихся:

- `ftp/mirror`

- `ftp/ftpmirror`

- `ftp/emirror`

- `ftp/spegla`

- `ftp/omi`

- `ftp/wget`

Ранее наиболее популярным вариантом был `ftp/mirror`, хотя из-за того, что эта программа написана на perl(1), существуют различные ограничения, в особенности при зеркалировании больших файловых структур, таких как FreeBSD. Утверждается, впрочем, что в текущей версии последняя проблема исправлена за счет дополнительного алгоритма сравнения структуры каталогов.

Вообще говоря, протокол FTP не лучшим образом подходит для поддержки зеркала. Измененный файл передается целиком; кроме того, невозможно создание единого потока данных, который мог бы повысить эффективность передачи за счет большого TCP-окна.

#### 3.1.2. При помощи rsync

Более эффективным будет синхронизация FTP-области при помощи rsync. Для этого следует установить пакет `net/rsync`, который был описан в разделе Раздел 2.4.2, «Rsync (необязательный сервис для FTP зеркала)». Поскольку доступ по протоколу rsync не является обязательным, выбранный вами сайт может его не поддерживать. Возможно, вам придется немного поискать в сетевой окрестности зеркало, поддерживающее rsync.

### Примечание:

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

Строка для синхронизации FreeBSD по rsync выглядит примерно так:

`%` `rsync -vaz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/`

Загляните в документацию по rsync, также доступную по адресу http://rsync.samba.org/ за дополнительной информацией по различным опциям rsync. Обратите внимание, что в случае синхронизации модуля целиком (а не отдельного каталога) необходимо явно указать результирующий каталог, потому что каталог с именем модуля (в данном случае "FreeBSD") не создается. Для поддержания актуальности вам потребуется создать скрипт для запуска подобной команды из cron(8).

#### 3.1.3. При помощи CVSup

Немногие сайты, в первую очередь центральный `ftp-master.FreeBSD.org` предоставляют для синхронизации FTP-области доступ по протоколу CVSup. Вам потребуется клиент CVSup, предпочтительно из пакета `net/cvsup` (см. также Раздел 2.4.4, «CVSup (желателен для зеркал репозитория CVS)»). Пример конфигурационного файла (`supfile`) для синхронизации с `ftp-master.FreeBSD.org`:

# # FreeBSD archive supfile from master server # *default host=ftp-master.FreeBSD.org *default base=/usr *default prefix=/pub #*default release=all *default delete use-rel-suffix *default umask=002 # If your network link is a T1 or faster, comment out the following line. #*default compress FreeBSD-archive release=all preserve

Судя по всему, синхронизация при помощи CVSup — лучший по эффективности способ поддержки зеркала, однако он доступен лишь с небольшого числа сайтов.

### Примечание:

Прочтите документацию по CVSup, например, cvsup(1), и обратите внимание на опцию `-s`. Она может уменьшить объем операций ввода-вывода, предполагая, что записанная информация о каждом файле корректна.

### 3.2. Зеркалирование CVS репозитория

Существует несколько способов синхронизации CVS репозитория. CVSup наиболее общий метод.

#### 3.2.1. Использование CVSup

Программа CVSup немного описана в (Раздел 2.4.4, «CVSup (желателен для зеркал репозитория CVS)» и Раздел 3.1.3, «При помощи CVSup»).

Настроить CVSup зеркало очень просто. Установка `net/cvsup-mirror` проверит, что все нужные программы установлены и затем соберет всю необходимую информацию для конфигурирования зеркала.

### Примечание:

Не забудьте почитать полезную подсказку здесь.

#### 3.2.2. Другие методы

Использование методов, отличных от CVSup, не рекомендуется. Тем не менее, мы кратко упомянем их. Поскольку большая часть зеркал дает доступ к репозиторию CVS в числе прочих файлов, доступных по FTP, по пути `/pub/FreeBSD/development/FreeBSD-CVS`, могут быть использованы:

- FTP

- Rsync

- HTTP

### Важно:

AnonCVS не может использоваться для зеркалирования CVS репозитория, так как CVS не разрешает сам доступ к репозиторию, а только к извлечённым версиям модулей.

### 3.3. Зеркалирование страниц WWW

Лучшим способом будет извлечение (check out) из репозитория CVS модуля www. При условии наличия у вас копии репозитория, все, что для этого потребуется — выполнить команду

`%` `cvs -d /home/ncvs co www`

и сформировать задание для cron, которое будет регулярно выполнять операцию `cvs up -d -P`, например, каждый раз после обновления копии репозитория. Разумеется, файлы должны находиться в иерархии, доступной для публичного веб-доступа. Мы сознательно не будем обсуждать здесь процесс установки и конфигурации веб-сервера для этих целей.

Если у вас нет локальной копии репозитория, можно использовать CVSup для синхронизации копии веб-страниц. Пример конфигурации можно найти в файле `/usr/share/examples/cvsup/www-supfile`. Приведем его здесь:

# # WWW module supfile for FreeBSD # *default host=cvsup3.de.FreeBSD.org *default base=/usr *default prefix=/usr/local *default release=cvs tag=. *default delete use-rel-suffix # If your network link is a T1 or faster, comment out the following line. *default compress # This collection retrieves the www/ tree of the FreeBSD repository www

Использование пакета `ftp/wget` или иных инструментов для создания веб-зеркал не рекомендуется.

#### 3.3.1. Зеркала документации FreeBSD

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

Для начала вы должны создать копию исходных текстов документации (как и во многих других случаях, для этого предпочтителен CVSup). Вот пример файла конфигурации:

# # FreeBSD documentation supfile # *default host=cvsup3.de.FreeBSD.org *default base=/usr *default prefix=/usr/share *default release=cvs tag=. *default delete use-rel-suffix # If your network link is a T1 or faster, comment out the following line. #*default compress # This will retrieve the entire doc branch of the FreeBSD repository. # This includes the handbook, FAQ, and translations thereof. doc-all

Затем, вам потребуется несколько пакетов. К счастью, специально для этого существует мета-порт `textproc/docproj`. Также, необходимо установить некоторые переменные окружения, например `SGML_CATALOG_FILES`, и переменные в файле `/etc/make.conf`, главным образом переменную `DOC_LANG` (используйте файл `/usr/share/examples/make.conf` как шаблон). После этого можно выдать команду `make` в главном каталоге документации (по умолчанию это `/usr/share/doc`). Как и прежде, эти каталоги должны быть доступны для вашего веб-сервера (проверьте, что ссылки ведут в нужные места).

### Важно:

Процесс подготовки и построения документации, а также многие сопутствующие вопросы, подробно описан в документе Учебник по Проекту Документирования FreeBSD. Прочтите этот документ, в особенности если у вас возникли проблемы со сборкой стандартного комплекта документации.

### 3.4. Как часто синхронизироваться?

Каждое зеркало должно регулярно обновляться. Вам потребуется какой-то набор скриптов, выполняемых посредством cron(8). Поскольку каждый администратор, как правило, пишет такие скрипты сам и на свой лад, мы не можем выдать конкретных указаний. Общие же советы выглядят так:

1. Создайте скрипт с командой, которая запустит нужное приложение для обновления зеркала. Рекомендуем использовать скрипт на языке обычного `/bin/sh`.

2. Добавьте команд перенаправления вывода, чтобы записать диагностику работы в файл.

3. Попробуйте, как ваш скрипт работает. По завершении проверьте логи.

4. При помощи утилиты crontab(1) добавьте ваш скрипт в таблицу регулярных заданий crontab(5) соответствующего пользователя. Это должен быть пользователь, отличный от пользователя FTP-даемона, чтобы файлы в FTP-области без атрибута "чтение для всех" не были доступны анонимным FTP-пользователям. Данное свойство используется для тестирования перед выходом новых релизов, для того чтобы удостовериться, что все официальные зеркала содержат все необходимые файлы к моменту официального объявления релиза.

Некоторые рекомендуемые установки частоты обновления:

- FTP-набор: раз в сутки

- репозиторий CVS: раз в час

- WWW-страницы: раз в сутки

Пред. |  | След.
2. Требования к зеркалам FreeBSD | Начало | 4. С какого сервера синхронизироваться

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.