25
июля
1

Система портов в FreeBSD



После установки ОС FreeBSD имеется все, что необходимо для ее работы. Это «стандартные» утилиты входящие в состав систем UNIX, то есть ничего лишнего, а только необходимое.

Стороннее ПО в FreeBSD можно устанавливать несколькими способами:

— через систему портов или пакетов;
— установка из исходников.

Порты — это набор правил и команд для компиляции(сборки) программ.Порты предназначены для упрощения и автоматизации установки, модификации, обновления приложений из исходных кодов, а также отслеживания их зависимостей. С помощью дерева/коллекции/системы портов можно легко установить/обновить/переустановить с нужными настройками требуемую программу. Сама по себе коллекция портов не содержит в себе исходный код программ, а только все необходимое для его получения с некоторого источника и «манипулирования» им.

Для начала работы с деревом портов было бы неплохо их установить, для чего существует несколько способов, к примеру, через: sysinstall, cvsup или portsnap. Рассмотрим метод получения дерева портов через CVSup, который представляет собой получение и синхронизацию исходных текстов с основного репозитория CVS на удаленном сервере, в нашем случае одного из зеркал FreeBSD. Для начала необходимо установить cvsup-клиент — cvsup-without-gui. Поскольку системы портов у нас нет, а исходники программы искать очень не хочется, то установим cvsup-клиент с помощью пакета следующей командой:

pkg_add -r  cvsup-without-gui 

которая скачает и установит пакет (уже скомпилированный под конкретную версию дистрибутива порт) с зеркала FreeBSD.
Теперь можно получить актуальную коллекцию портов и синхронизировать в будущем:

cvsup -g -L 2 /root/ports-supfile 

-g — отключить GUI (graphical user interface);
-L — задает уровень вывода сообщений при отключенном GUI, 2 — максимальный;
ports-supfile — файл, содержащий настройки, передаваемые клиенту. Пример находиться в /usr/share/examples/cvsup/ports-supfile. Копируем его куда-нибудь и вносим небольшие изменения, т.е. CHANGE_THIS.FreeBSD.org меняем на сервер CVSup «поближе», к примеру, зеркало cvsup3.ua.FreeBSD.org и этого вполне достаточно для запуска команды получения дерева портов. В будущем для актуализации используется та же команда.

Кстати, можно не устанавливать пакет cvsup, в FreeBSD по-умолчанию уже есть аналогичная программа csup. Для запуска используется с такими же аргументами:

csup -g -L 2 /root/ports-supfile 

После завершения смотрим на результат в /usr/ports, где появятся каталоги с названиями групп ПО, содержащих каталоги для конкретных программ и рабочие файлы/каталоги дерева портов. К примеру, /usr/ports/distfiles содержит исходники, загружаемые при установке порта.

Содержимое самих каталогов\портов программ достаточно схоже и содержат так называемый скелет, содержащий минимальное количество файлов для сборки и установки:

Makefile — файл с командами\директивами сборки данного порта;
distinfo — содержит контрольные суммы, с помощью которых проверяются файлы;
files — каталог содержит патчи\заплатки\исправления;
pkg-descr — описание порта;
pkg-plist — какие файлы будут установлены.

Для поиска нужного порта, т.е. ПО существует файл /usr/ports/INDEX, но поскольку там список ВСЕХ портов и не в очень удобном формате, то существует цель search/quicksearch команды make:

cd /usr/ports; make search
cd /usr/ports; make search key='WWW server' 

name используем если известно конкретное название программы, а key — это поиск по ключевому слову.
В результате получим то, что нам нужно:

Port:   nginx-0.7.67
Path:   /usr/ports/www/nginx
Info:   Robust and small WWW server
Maint:  osa@FreeBSD.org
B-deps: pcre-8.02
R-deps: pcre-8.02
WWW:    http://sysoev.ru/nginx/ 

где, видим имя порта, описание, путь к нему, кто разрабатывал порт, домашнюю страницу.
B-deps — зависимости (что должно быть установлено перед данным потом);
E-deps — инструменты для извлечения данного порта;
P-deps — зависимости, необходимые для наложения патчей\исправлений;
F-deps — зависимости для получения исходников порта.

Для установки программы нужно перейти в каталог порта и выполнить:

make install 

которая запускает последовательно серию других команд/целей make до текущей «install» и включая ее:

make config — с помощью псевдографики запускается окошко с параметрами конфигурирования, если таковые имеются для данного порта и в будущем учитываются в зависимостях. Эта информация сохраняется для использования в /var/db/ports/<name>/options для последующей сборке/обновлении/переустановке;
make fetch — получение исходников с адреса доверенного сайта, содержащегося в Makefile;
make checksum — проверка цифровой подписи файла distfile, для его подлинности и целостности (переменной NO_CHECKSUM можно пропустить этот шаг);
make extract — извлечение исходных кодов из архива в /usr/ports/distfiles в рабочий каталог порта work;
make patch — наложение заплаток в рабочем каталоге;
make depends — проверка зависимостей и установка недостающего при потребности (переменной NO_DEPENDS можно пропустить шаг );
make configure — запустк сценария configure, если таковой имеется — настройка сборки порта ;
make build — процесс компиляции;
make install — установка программы и ее регистрация установки в /var/db/pkg.

Параметры сборки порта можно править в Makefile или непосредственно задавать в командной строке, только обязательно одни и те же для всех целей. В случае, если нужно применить одни и те же параметры при сборке для любого портов, то их можно задать в файле /etc/make.conf, который читается командой make при запуске. Установку программы определенной версии с помощью портов мы рассмотрим в другой статье.

Для удаления порта нужно запустить в его каталоге:

make deinstall 

а если потребовалось установить его снова, то:

make reinstall 

но следует учесть, что это не сработает, если до этого было запущено make clean. Для удаления ненужных файлов после установки можно воспользоваться make clean, которая удаляет исходный код в каталоге порта, а для удаления архива с исходниками текущего порта и его зависимостей из /usr/ports/distfiles необходимо выполнить:

make distclean 

Есть еще несколько команд, которые будут достаточно полезными при работе с системой портов:

make config-recursive — настроить OPTIONS текущего порта и всех его зависимостей;
make showconfig — настройки OPTIONS текущего порта (также можно посмотреть здесь — /var/db/ports/_name_/options);
make showconfig-recursive — настройки OPTIONS также еще для всех зависимостей порта;
make rmconfig — очистка параметров OPTIONS;
make all-depends-list — список зависимостей порта;
make pretty-print-build-depends-list — список зависимостей для сборки порта;
make pretty-print-run-depends-list — список зависимостей для установки порта;
make missing — список еще не установленных зависимостей;

Обновление программного обеспечения также реализуется достаточно просто, например, с помощью утилиты portupgrade. Она использует файл базы данных с установленным ПО в каталоге /var/db/pkg при обновлении всего командой:

portupgrade -a

а также может потребовать выполнить для построения этой базы:

pkgdb -F

Для обновления одного приложения нужно в качестве аргументов передавать только имя порта. Если также нужно обносить зависимые приложения, то с флагом -r. Чтобы только загрузить исходники новой версии ПО без обновления нужно указать флаг -F.

Понравилась статья?
Подписаться на RSS feed
Один комментарий:
  1. Aleksey 9 декабря, 2011

    Большое спасибо. Очень мне помогло.

Оставить комментарий