Portsnap - обновление исходных текстов портов

Версия для печатиОтправить другуPDF version

Portsnap - рекомендуемый метод обновления исходных текстов дерева портов. Тем более, что с 28 февраля 2013 года поддержка cvs прекращена.

Для начала начала ознакомимся с тем, как работает portsnap. Стоит отметить, что portsnap, не работает напрямую с основным деревом портов, которое расположено в /usr/ports, а использует рабочий каталог (по-умолчанию /var/db/portsnap), куда скачивается сжатая копия (snapshot) дерева портов, а оттуда уже обновляется основное дерево портов. Конфигурационный файл - /etc/portsnap.conf, который можно не трогать, однако если надумаете внести какие-то изменения, то все довольно хорошо прокомментировано.

Утилита portsnap имеет в своем распоряжении несколько команд:

  • fetch - скачивает "снимок" (snapshot), основного дерева портов с указанного в конфигурации сервера (используется только для интерактивной работы, не через cron)
  • cron - используется для запуска утилиты из планировщика заданий cron (запуск выполняется через случайный промежуток временни, ограниченный в 3600с)
  • extract - разворачивает дерево портов;  команда полностью удаляет существующее дерево портов, включая все внесенные в него изменения (как правило выполняется в первый раз и в случае, если нужно получить, чистое дерево портов или при использовании с опцией path)
  • update - служит для непосредственного обновления дерева портов с текущего "снимка", заменяя файлы и каталоги, которые были изменены

Итак, если у нас уже есть загруженное дерево портов, удалим директорию /usr/ports, поскольку возможно возникновение ошибок, если ранее пользовались другими способами обновления:

# rm -R /usr/ports

При первом запуске утилиты portsnap необходимо использовать такую последовательность команд (возможно довольно долгое выполнение процедуры, поскольку утилита копирует архив всей системы портов; в дальнейшем же, будут загружаться только обновления):

 

# portsnap fetch
# portsnap extract

Для всех дальнейших запусков:

 

# portsnap fetch
# portsnap update

По завершению обновления, индексация портов будет выполнена автоматически.

Для автоматизации процесса обновления существует специальная команда portsnap cron, о которой упоминалось выше. Имейте ввиду, что portsnap fetch, запущенный из cron'а работать не будет. И это не случайность. Сделано это специально, чтобы снизить количество одновременно подключающихся пользователей к серверу обновлений, поскольку portsnap cron, после запуска, до загрузки чего-либо, отсчитывает произвольный интервал времени от 1 до 3600 секунд.

echo  '# Ports update'  >> /etc/crontab
echo '22      2       *       *       *       root    /usr/sbin/portsnap cron > /dev/null 2>&1' >> /etc/crontab

Также, настоятельно не рекомендуется прописывать в cron команду portsnap update, поскольку может получится неприятная ситуация, например, если вы компилируете какую-то программу а cron запустит в этот момент обновление портов, что приведет к конфликту. Однако, не забывайте, что в данном варианте не обновляется дерево портов. Для обновления самих портов нужно вручную выполнить команду portsnap update, из командной строки.

Однако, лично мое мнение - все же стоит поставить update в промежутке времени между 4 и 5 часами утра. Даже если работаю допозна, то в это время, обычно, уже сплю. Иначе, что это за автоматизация, если некоторые команды все же время от времени необходимо вводить с консоли!

 

echo '12      4       *       *       *       root    /usr/sbin/portsnap update > /dev/null 2>&1' >> /etc/crontab
Ваша оценка: Нет Средняя: 5 (3 голоса)

Вставай, Україно!

Литература

Админ не нервничает при переходе улицы, перебирая пальцами в воздухе, он пытается сохраниться.