Собственно, что такое порт в контексте FreeBSD. Порт в операционной системе FreeBSD, это папка с минимальным набором файлов, скелетом, необходимым для нахождения и скачивания на локальную машину исходных текстов программного обеспечения, его конфигурирования, компиляции и наконец установки уже готовой программы в соответствующие каталоги. Все эти манипуляции выполняются утилитой make с использованием конфигурационных файлов порта.
Файлы порта представляют из себя сценарии, записанные в обычные текстовые файлы. Порт как правило состоит из нескольких файлов:
distinfo Makefile pkg-plist pkg-descr
distinfo - Содержит имена файлов для скачивания и их контрольные суммы для проверки подлинности.
pkg-descr - Краткое описание программы, информация о разработчике, официальный сайт и т.д..
pkg-plist - Это список файлов, которые будут собраны в процессе установки программы, с директориями назначения. Файл используется для регистрации приложения в базе данных пакетов ( /var/db/pkg ).
Makefile - Основной файл сценария. Содержит массу различных опций и переменных, описывающих информацию о версии, разработчике, зависимостях данного приложения от других пакетов и библиотек, опции конфигурирования.
Кроме того, во многих портах можно обнаружить поддиректорию files, в ней как правило лежат различные патчи и дополнения.
Деревом портов FreeBSD называется древовидная структура в которой размещаются все порты. Дерево портов располагается по адресу /usr/ports, в директории ports, в свою очередь располагаются поддиректории, относящиеся к определенному классу программного обеспечения, например:
и так далее.
Обновить дерево портов FreeBSD можно несколькими способами. Один из них, на мой взгляд самый удобный, использовать штатную утилиту обновления портов – Portsnap.
Как было сказано выше, данная утилита является штатной, для операционной системы FreeBSD, поэтому присутствует в системе по-умолчанию, во всяком случае в версии 7.1, если ничего не путаю, то в старых версиях, например 5.4, нужно было ее, персонально, из портов ставить.
Программа Portsnap, не работает напрямую с основным деревом портов /usr/ports, она использует рабочий каталог, по-умолчанию /var/db/portsnap, туда скачивается сжатая копия ( snapshot ) дерева портов, а оттуда уже обновляется основное дерево портов. Конфигурационный файл живет по адресу /etc/portsnap.conf, в принципе его можно не трогать, но если вдруг надумаете, например, поменять адрес сервера, откуда программы будет качать исходники или расположение рабочей директории, там все довольно хорошо откомментировано.
Программа Portsnap, имеет несколько служебных команд для выполнения различных действий:
Итак, если это первый запуск portnap, делаем:
portsnap fetch
Теперь можно распаковать дерево:
portsnap extract .. .. Building new INDEX files... done.
Данная команда разворачивает все дерево целиком, поэтому время выполнения не зависит от того, как давно вы обновлялись.
Теперь обновляем:
portsnap update
Если обновление система обнаружит что обновление не требуется, будет выдано соответствующее сообщение:
portsnap update Ports tree is already up to date.
Процедура может быть весьма длительной.
Согласитесь, очень удобно периодически обновлять порты, практически не принимая в этом участия. Для этого у программы portsnap, есть специальная команда, cron. Это именно специальная команда, обычный portsnap fetch, из крона работать не будет. Сделано это не случайно, команда portsnap cron, после запуска, до загрузки чего-либо, отсчитывает произвольный интервал времени от 1 до 3600 секунд, это сделано разработчиками, что-бы снизить кол-во одновременно подключающихся пользователей к серверу обновлений, а затем приступает к работе.
Настоятельно не рекомендуется прописывать в cron команду update, может получится неприятная ситуация, например, если вы компилируете какую-то программу а cron запустит в этот момент обновление портов.
Что-бы избежать вышеописанной ситуации, нужно обновлять только индексный файл, для этого у программы portsnap, есть опция -I.
Итак, в конфигурационном файле /etc/crontab, прописываем следующую строку:
0 0 * * 0 root portsnap -I cron update
С такой конфигурацией, cron, будет выполнять обновление индекса в 00:00 каждого воскресенья.
Не забывайте, что в данном варианте у вас обновляется только индексный файл, а это не есть обновление дерева портов. Для обновления самих портов нужно вручную выполнить команду portsnap update, из командной строки. Делайте это периодически, как того требует ваша политика поддержания системы портов в актуальном состоянии.
Fetching 3 metadata files... /usr/sbin/portsnap: cannot open beea5333deea7ef646b497e9cd751ba72e17fd59708f9eed1f8d857bc585ad70.gz: No such file or directory metadata is corrupt.
Наличие на экране данного сообщения, зачастую говорит о том, что попортилась база данных, программы portsnap. Ничего страшного в этом тоже нет, всякое случается. Исправить можно следующим образом:
rm -rf /var/db/portsnap mkdir /var/db/portsnap portsnap fetch extract
Ссылки:
http://vds-admin.ru/freebsd/obnovlenie-portov-freebsd-programma-portsnap
http://www.lissyara.su/articles/freebsd/tuning/cvs_svn_portsnap_update/#update_ports_portsnap
http://madjack.ru/2010/09/portsnap-freebsd-update.html
Установка патчей http://2gusia.livejournal.com/406967.html