A.6. Использование Portsnap

A.6.1. Введение

Portsnap -- система для защищенного распространения дерева портов FreeBSD. Примерно раз в час генерируется ''снэпшот'' дерева портов, который затем архивируется и подписывается электронной подписью. Полученные файлы затем распространяются при помощи HTTP.

Подобно CVSup, portsnap использует активную (pull) модель обновлений: упакованное и подписанное дерево помещается на веб-сервер, откуда его должны забирать клиенты. Пользователь должен либо запустить portsnap(8) вручную, чтобы получить обновления, либо настроить периодическое задание при помощи cron(8).

По техническим причинам Portsnap не обновляет основное (''живое'') дерево портов в каталоге /usr/ports/, а работает со сжатой копией дерева в каталоге /var/db/portsnap/. Впоследствии эта копия используется для обновления основного дерева.

Замечание: Если Portsnap был установлен из Коллекции портов FreeBSD, каталогом для снэпшотов будет /usr/local/portsnap/, а не /var/db/portsnap/.

A.6.2. Установка

FreeBSD начиная с версии 6.0 содержит Portsnap в базовой поставке системы. Для более ранних релизов FreeBSD эта утилита может быть установлена из порта sysutils/portsnap.

A.6.3. Конфигурация Portsnap

Конфигурация Portsnap описывается файлом /etc/portsnap.conf. Для большинства пользователей вполне подойдет конфигурация по умолчанию; за подробностями обращайтесь к странице справочника portsnap.conf(5).

Замечание: При установке Portsnap из Коллекции портов используется файл конфигурации /usr/local/etc/portsnap.conf. При установке порта этот файл не создается; вам нужно создать его самостоятельно командой

# cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf

A.6.4. Первый запуск Portsnap

При первом запуске утилите portsnap(8) потребуется загрузить упакованный снэпшот полного дерева портов в каталог /var/db/portsnap/ (/usr/local/portsnap/, если Portsnap был установлен из Коллекции портов). На начало 2006 года размер снэпшота составляет около 41 МБ.

# portsnap fetch

После загрузки снэпшота из него может быть развернуто основное дерево портов. Это необходимо, даже есть каталог /usr/ports/заполнен каким-либо другим способом, например при помощи CVSup, поскольку позволяет установить точку отсчета, от которой portsnap будет определять необходимый объем изменений.

# portsnap extract

Замечание: В конфигурации установки по умолчанию каталог /usr/ports не создан. Если вы используете FreeBSD 6.0-RELEASE, создайте его самостоятельно перед первым запуском утилиты portsnap. В более поздних версиях FreeBSD или в версии из портов Portsnap автоматически создаст его при первом вызове.

A.6.5. Обновление дерева портов

После того как первоначальный снэпшот дерева портов будет развернут в каталог /usr/ports/, обновление дерева портов будет состоять из двух шагов: загрузки (fetch) обновлений к упакованному снэпшоту и последующего обновления (update) основного дерева. Оба шага могут быть выполнены одним запуском portsnap:

# portsnap fetch update

Замечание: Некоторые из старых версий portsnap не поддерживают такой синтаксис; в этом случае, используйте две последовательные команды:

# portsnap fetch
# portsnap update

A.6.6. Запуск portsnap из cron

Для того, чтобы избежать проблем с ''безумными толпами'' клиентов, одновременно приходящими на сервера Portsnap, команда portsnap fetch не запустится как задание cron(8). Для работы из cron предназначена специальная команда portsnap cron, которая перед загрузкой обновлений ожидает случайное время до 3600 секунд.

Кроме того, настоятельно не рекомендуется запускать из cron команду portsnap update, поскольку при пересечении с процессом сборки или установки какого-либо порта неизбежно возникнет конфликт. С другой стороны, безопасно обновить индексный файл INDEX, запустив portsnap -I update (разумеется, команду portsnap update без ключа -I для обновления оставшейся части дерева портов придется запустить вручную).

Для ежедневного обновления упакованного снэпшота и индексного файла при помощи portsnap и последующего отчета почтой об устаревших установленных пакетах добавьте в ваш файл /etc/crontab строку

0 3 * * * root portsnap -I cron update && pkg_version -vIL=

Замечание: Если системные часы не установлены в локальное время, пожалуйста, замените 3 на случайное число между 0 и 23, чтобы не создавать пиковых нагрузок на серверы portsnap.

Замечание: Старые версии утилиты portsnap не поддерживали несколько команд при одном запуске (например, cron update). Если команда, указанная выше, не сработает, попробуйте заменить portsnap -I cron update на portsnap cron && portsnap -I update.

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

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

Обновлено: 12.03.2015