Порты FreeBSD

Порты FreeBSD - это набор программ и утилит с разнообразным функционалом. Например HTTP-сервер Apache, PHP и другие программы можно и нужно устанавливать именно из портов. Если используется DirectAdmin или другие панели управления сервером - ПО, которое они устанавливают лучше обновлять встроенными утилитами. Все остальное - при помощи коллекции портов. Например, перед установкой DirectAdmin на вновь инсталлированную FreeBSD требуется сначала установить некоторые порты.

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

Первым делом, перед установкой или обновлением портов необходимо обязательно обновить дерево портов FreeBSD. Это можно выполнить при помощи утилиты portsnap, которая является рекомендуемой и изначально предустановленна в FreeBSD с шестой версии.

Обновление или первоначальная загрузка портов FreeBSD выполняется так:

     Первый запуск
# portsnap fetch extract
     Второй и все последующие запуски
# portsnap fetch update

Флаги extract и update выполняют практически одно и тоже - загружают коллекцию портов на сервер, за исключением того, что extract полностью перезаписывает все порты, а update лишь обновляет дерево. По этому разумно использовать extract только для того, чтобы первоначально получить все программы портов, а в дальнейшем использовать исключительно update - так будет быстрее и меньше нагружается сервер.

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

  • SERVERNAME - указываются сервера, с которых будут загружаться актуальные снимки дерева портов. Всего есть 7 серверов: portsnap.FreeBSD.org, portsnap1.FreeBSD.org, ..., portsnap6.FreeBSD.org. При желании, можно сделать локальный сервер обновлений, подробнее можно узнать запустив man portsnap (caching HTTP proxy).
  • WORKDIR - по умолчанию: /var/db/portsnap. В эту директорию будет загружаться сжатая копия портов.
  • PORTSDIR - по умолчанию: /usr/ports. Директория хранения основной копии портов.
  • KEYPRINT - ключ, который не стоит изменять.
  • INDEX - список индексных файлов. Этот параметр лучше оставить как есть.
  • REFUSE - список, через пробел, тех портов, которые не нужно обновлять (первое название порта в строке должно идти сразу за REFUSE без пробела), например:
    REFUSEarabic chinese french german hebrew hungarian japanese
    REFUSEsysinstall

Как настроить автоматическое обновление портов по расписанию и связанные с этим скрытые, на первый взгляд, проблемы, хорошо описано в официальном руководстве по FreeBSD: "Официальное руководство FreeBSD по Portsnap".

Поиск локальных дистрибутивов портов

Порты можно искать как по ключу в описании, так и по символам названия (поиск работает только из директории /usr/ports/):

# cd /usr/ports
# make index
# make search name=apache | more
# make search key=apache | more

Чтобы поиск производился по актуальным данным, нужно выполнить make index, но это действие производится очень долго - в процессе индексации может показаться, что система подвисла, но стоит все же подождать пол-часа или более (чем "древнее" сервер - тем больше время индексации).

Поиск по имени (make search name) находит все порты, в имени которых найдены искомые символы. Поиск по ключу выдает результат с портами, в описании которых есть искомый ключ ("B-deps" - это зависимости для построения, "R-deps" - зависимости для запуска приложения). More после команды поиска позволяет выводить результат поиска постранично, а не все сразу.

pkg_info - просмотр информации об уже установленных портах

Утилита pkg_info позволяет получить данные об уже установленных портах и пакетах. Самые полезные ключи программы:

  • a - информация обо всех установленных портах;
  • с - краткая информация о порте в одну строку;
  • x - информация о портах с введенным не полным именем;
  • D - вывод информационных сообщений, сгенерированных установочным скриптом порта;
  • L - путь к файлам, которые были установлены портом;
  • R - просмотр портов, зависящих от выбранного;
  • s - занимаемое портом место.

Примеры использования pkg_info:

     Просмотр кратких сведений обо всех установленных портах с постраничной разбивкой:
# pkg_info -ac | more

     Просмотр кратких сведений о порте, содержащем в названии autoconf:
# pkg_info -xc autoconf

     Просмотр путей к файлам, установленных портом autoconf-2.69:
# pkg_info -L autoconf-2.69

     Просмотр нескольких путей к файлам, установленных портом:
# pkg_info -L autoconf-2.69 | head

     Просмотр занимаемого места каждым из установленных портов с записью информации в файл sizes
# pkg_info -as > sizes

pkg_version - сравнение версий установленных портов с доступными

Утилита pkg_version сравнивает версии установленных в системе портов с существующими. Перед сравнением с локальным деревом портов необходимо обновить порты и пересобрать индекс (make index), чтобы отображаемые сведения были актуальными.

# pkg_version | more

После запуска pkg_version без параметров, будет выведен список всех установленных портов со значком, напротив каждого из портов:

  • = - установленный порт актуален;
  • < - установленный порт устарел, существует более новая версия;
  • > - установленный порт имеет более новую версию, чем присутствующий в локальной коллекции портов, возможно необходимо переиндексировать базу портов или установлена новая, тестовая версия порта;
  • ? - информация об установленном порте отсутствует в БД;
  • * - порт имеет несколько актуальных версий;
  • ! - установленный порт существует в индексе, но по некоторым причинам невозможно сравнить номер версии установленного порта с соответствующей записью в индексе.

Пример использования pkg_version:

     Просмотр тех поротов, которые можно обновить:
# pkg_version -v | grep need

     Просмотр более подробных сведений о версиях портов с разбивкой на страницы:
# pkg_version -v | more

     Определение установленных портов, для которых существуют более новые версии
(отобразить все порты со статусом "<", флаг -l - маленькая английская литра L)
и вывод подробных сведений (-v) (два приведенных варианта равнозначны):
# pkg_version -l "<" -v
# pkg_version -vl "<"

     Определение установленных портов, которые не соответствуют статусу "=":
# pkg_version -L "="

     Сравнение портов с удаленной базой:
# pkg_version -v ftp://ftp.freebsd.org/pub/FreeBSD/branches/-current/ports/INDEX \ | more

portupgrade - обновление портов

Важная информация перед использованием portupgrade:

  1. Перед обновлением нужно позаботиться о резервных копиях конфигурационных файлов обновляемых портов.
  2. При обновлении порт отключается и не будет работать - необходимо планировать время обновления во избежание временных отключений важных сервисов сервера. Не всегда после обновления порт может работать корректно - этот момент тоже стоит учитывать при планировании обновлений.
  3. Чем дольше не обновлялись порты в FreeBSD, тем медленнее будет идти процесс обновления и тем более вероятным становится появление ошибок. Если порты не обновлялись более года, возможно будет быстрее переустановить систему заново, чем устранять возможные ошибки.

Запустить обновление только одного порта, например MC (Midnight Commander):

# portupgrade -rR mc

Флаг r - проверяет и пытается обновить все программы, которые зависят от обновляемого порта, R - проверяет и пытается установить/обновить всё ПО, от которого зависит порт.

Чтобы обновить все устаревшие порты - можно запустить portupgrade с дополнительным флагом "a":

# portupgrade -arR

Ели добавить ключ -i, администратору, возможно, будут задаваться вопросы по ходу установки/обновления (yes/no).

Необходимо внимательно следить за сообщениями, которые генерирует portupgrade во время обновления - там могут содержаться важные инструкции по решению проблем с отказами обновлений.

Возможно во время использования portupgrade появится предложение запустить pkgdb -F. Стоит принять предложение системы - эта команда обновляет базу данных портов /var/db/pkg/pkgdb.db.

Удаление портов

  • make deinstall - удалить порт
  • make reinstall - восстановить удаленный порт
  • pkg_deinstall -R [packagename] - удаляет порт и все, от чего он зависит (т.е. рекурсия к корню), порты, которые нужны для других портов останутся не вредимыми.
  • pkg_deinstall -r [packagename] - удаляет порт и все, что от него зависит (т.е. рекурсия к листьям), порты, которые нужны для других портов останутся не вредимыми.

Команды make deinstall и make reinstall нужно запускать из директории удаляемого/восстанавливаемого порта, pkg_deinstall -КЛЮЧ [packagename] - из любой директории, где [packagename] - имя удаляемого порта.

Если в pkg_deinstall добавить ключ -f - удаляемые порты не будут проверяться на их необходимость для других портов.

Обновление: 2013/03/30

Опубликовано: 2012/09/19
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/freebsd.php?txt=151" target="_blank">Порты FreeBSD - установка, настройка и обновление.</a>
16980
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.