Portsnap — система для защищенного распространения дерева портов FreeBSD. Примерно раз в час генерируется «снэпшот» дерева портов, который затем архивируется и подписывается электронной подписью. Полученные файлы затем распространяются при помощи HTTP.
Подобно CVSup, portsnap использует активную (pull) модель обновлений: упакованное и подписанное дерево помещается на веб-сервер, откуда его должны забирать клиенты. Пользователь должен либо запустить portsnap(8) вручную, чтобы получить обновления, либо настроить периодическое задание при помощи cron(8).
По техническим причинам Portsnap
не обновляет основное («живое») дерево портов в
каталоге /usr/ports/
, а работает со сжатой
копией дерева в каталоге /var/db/portsnap/
.
Впоследствии эта копия используется для обновления основного
дерева.
Если Portsnap был установлен из
Коллекции портов FreeBSD, каталогом для снэпшотов будет
/usr/local/portsnap/
, а не
/var/db/portsnap/
.
FreeBSD начиная с версии 6.0 содержит
Portsnap в базовой поставке системы.
Для более ранних релизов FreeBSD эта утилита может быть установлена
из порта sysutils/portsnap
.
Конфигурация Portsnap описывается
файлом /etc/portsnap.conf
. Для большинства
пользователей вполне подойдет конфигурация по умолчанию;
за подробностями обращайтесь к странице справочника
portsnap.conf(5).
При установке Portsnap из
Коллекции портов используется файл конфигурации
/usr/local/etc/portsnap.conf
.
При установке порта этот файл не создается; вам нужно создать
его самостоятельно командой
#
cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf
При первом запуске утилите 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 автоматически создаст
его при первом вызове.
После того как первоначальный снэпшот дерева портов будет
развернут в каталог /usr/ports/
, обновление
дерева портов будет состоять из двух шагов:
загрузки (fetch) обновлений к упакованному
снэпшоту и последующего обновления (update)
основного дерева. Оба шага могут быть выполнены одним запуском
portsnap
:
#
portsnap fetch update
Некоторые из старых версий portsnap
не поддерживают такой синтаксис; в этом случае, используйте две
последовательные команды:
#
portsnap fetch
#
portsnap update
Для того, чтобы избежать проблем с «безумными
толпами» клиентов, одновременно приходящими на сервера
Portsnap, команда portsnap
fetch
не запустится как задание cron(8).
Для работы из cron
предназначена специальная
команда portsnap cron
, которая перед
загрузкой обновлений ожидает случайное время до 3600 секунд.
Кроме того, настоятельно не рекомендуется запускать из
cron
команду portsnap
update
, поскольку при пересечении с процессом сборки
или установки какого-либо порта неизбежно возникнет конфликт.
С другой стороны, безопасно обновить индексный файл
INDEX
, запустив
portsnap -I update
(разумеется, команду
portsnap update
без ключа -I
для обновления оставшейся части дерева портов придется запустить
вручную).
Для ежедневного обновления упакованного снэпшота и индексного
файла при помощи portsnap
и последующего
отчета почтой об устаревших установленных пакетах добавьте
в ваш файл /etc/crontab
строку
Если системные часы не установлены в локальное время,
пожалуйста, замените 3
на случайное
число между 0 и 23, чтобы не создавать пиковых нагрузок на
серверы portsnap.
Старые версии утилиты portsnap
не поддерживали несколько команд при одном запуске (например,
cron update
). Если команда, указанная выше,
не сработает, попробуйте заменить
portsnap -I cron update
на
portsnap cron && portsnap -I update
.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.