==== Обновление портов FreeBSD, программа Portsnap ==== Собственно, что такое порт в контексте FreeBSD. Порт в операционной системе FreeBSD, это папка с минимальным набором файлов, скелетом, необходимым для нахождения и скачивания на локальную машину исходных текстов программного обеспечения, его конфигурирования, компиляции и наконец установки уже готовой программы в соответствующие каталоги. Все эти манипуляции выполняются утилитой make с использованием конфигурационных файлов порта. Файлы порта представляют из себя сценарии, записанные в обычные текстовые файлы. Порт как правило состоит из нескольких файлов: distinfo Makefile pkg-plist pkg-descr **distinfo** - Содержит имена файлов для скачивания и их контрольные суммы для проверки подлинности. **pkg-descr** - Краткое описание программы, информация о разработчике, официальный сайт и т.д.. **pkg-plist** - Это список файлов, которые будут собраны в процессе установки программы, с директориями назначения. Файл используется для регистрации приложения в базе данных пакетов ( /var/db/pkg ). **Makefile** - Основной файл сценария. Содержит массу различных опций и переменных, описывающих информацию о версии, разработчике, зависимостях данного приложения от других пакетов и библиотек, опции конфигурирования. Кроме того, во многих портах можно обнаружить поддиректорию files, в ней как правило лежат различные патчи и дополнения. Деревом портов FreeBSD называется древовидная структура в которой размещаются все порты. Дерево портов располагается по адресу ///usr/ports//, в директории //ports//, в свою очередь располагаются поддиректории, относящиеся к определенному классу программного обеспечения, например: * /usr/ports/archivers - софт для работы с архивами * /usr/ports/databases - софт для работы с базами данных * /usr/ports/lang - различные языки программирования и так далее. === Программа Portsnap, для обновления портов, операционной системы FreeBSD === Обновить дерево портов FreeBSD можно несколькими способами. Один из них, на мой взгляд самый удобный, использовать штатную утилиту обновления портов – Portsnap. Как было сказано выше, данная утилита является штатной, для операционной системы FreeBSD, поэтому присутствует в системе по-умолчанию, во всяком случае в версии 7.1, если ничего не путаю, то в старых версиях, например 5.4, нужно было ее, персонально, из портов ставить. Программа **Portsnap**, не работает напрямую с основным деревом портов ///usr/ports//, она использует рабочий каталог, по-умолчанию ///var/db/portsnap//, туда скачивается сжатая копия ( snapshot ) дерева портов, а оттуда уже обновляется основное дерево портов. Конфигурационный файл живет по адресу ///etc/portsnap.conf//, в принципе его можно не трогать, но если вдруг надумаете, например, поменять адрес сервера, откуда программы будет качать исходники или расположение рабочей директории, там все довольно хорошо откомментировано. Программа //Portsnap//, имеет несколько служебных команд для выполнения различных действий: * Команда **fetch** - Скачивает снимок ( snapshot ), основного дерева портов с указанного в конфигурации сервера. Используется только для интерактивной работы, не через cron * Команда **cron** - Используется для запуска из планировщика заданий cron. * Команда **extract** - Разворачивает дерево портов, данная команда полностью удаляет существующее дерево портов, включая все внесенные в него изменения, как правило выполняется в первый раз и в случае, если нужно получить, чистое дерево портов или при использовании с опцией path( cм. ниже ) * Команда **update** - Служит для, непосредственно, обновления, основного дерева портов. * **path** - Это дополнительная опция, используется с командой extract, для обновления конкретного порта, или нескольких портов. Итак, если это первый запуск **portnap**, делаем: portsnap fetch Теперь можно распаковать дерево: portsnap extract .. .. Building new INDEX files... done. Данная команда разворачивает все дерево целиком, поэтому время выполнения не зависит от того, как давно вы обновлялись. Теперь обновляем: portsnap update Если обновление система обнаружит что обновление не требуется, будет выдано соответствующее сообщение: portsnap update Ports tree is already up to date. Процедура может быть весьма длительной. === Использование программы Portsnap из планировщика Cron === Согласитесь, очень удобно периодически обновлять порты, практически не принимая в этом участия. Для этого у программы //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, из командной строки. Делайте это периодически, как того требует ваша политика поддержания системы портов в актуальном состоянии. === Snapshot is corrupt, испортилась база программы portsnap === 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