Заметки о FreeBSD — работаем с портами

Статья последний раз была обновлена 03.08.2025

Для того, чтобы понять принцип работы системы портов FreeBSD, нужно иметь представление об исходных кодах. Исходный код (или исходник) — это всего-навсего текстовый файл, содержащий в себе программу, написанную на каком-либо языке программирования. Чтобы программа запустилась и заработала, она должна быть переведена из исходного кода в набор байт (байт-код), который служит промежуточным звеном перед машинным кодом, а это уже инструкции для непосредственного выполнения процессором. Весь этот процесс называется компиляция (в компилируемых языках), в ходе которого программа компилятор также добавляет к исполняемому файлу (нашей конечной софтине) функционал необходимый для запуска, работы и взаимодействия в конкретной операционной системе.

Сей процесс описан в самых общих чертах для базового понимания!

Значит, если мы скомпилируем программу в FreeBSD то запустить ее, скажем, в Windows будет невозможно. Также нельзя будет запустить скомпилированную для FreeBSD amd64 программу в FreeBSD i386, так как исполняемый файл программы будет содержать инструкции с учетом 64-битной OS и x64 процессора.

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

Проще всего это сделать на самой ранней стадии — установки системы, просто поставив галочку (звездочку) в поле ports.

установка ports tree

Если вы уже прошли эту стадию и не установили ports tree, тогда для вас следующая глава, в противном случае можете ее пропустить.

Получение дерева портов в FreeBSD

Начиная с FreeBSD 14 утилита portsnap более не используется! Вместо нее применяется git:

git clone https://git.freebsd.org/ports.git /usr/ports

Если в вашей версии отсутствует git по умолчанию:

pkg update -f
pkg install git

Да, да, да, мы использовали пакетный менеджер pkg в статье про установку софта из портов)))

Текст до конца главы актуален для версии FreeBSD 13 и ниже!

Для того, чтобы быстро получить как свежее дерево портов, так и последующие его обновления, нужно воспользоваться утилитой portsnap, входящей в состав FreeBSD. Для этого логинимся в качестве root (или используем sudo) и набираем команду:

portsnap fetch extract

Наберемся терпения, процесс не быстрый!

Теперь мы видим, что появилась директория /usr/ports, в которой сформировалось дерево портов.

дерево портов в директории /usr/ports

Команду portsnap fetch extract необходимо выполнить один раз, в дальнейшем нам потребуется только обновлять уже существующее дерево портов. Наберем в консоли для этого:

portsnap fetch update

В результате в дерево портов будут вноситься только изменения. Если же вместо update делать постоянно extract, то каждый раз дерево портов будет полностью распаковываться, что бессмысленно и занимает время.

Если же интернета нет (всякое бывает), но требуется дерево портов, то можно установить порты с инсталяционного диска с FreeBSD, либо просто скопировать содержимое /usr/ports с другого компьютера. Итак, дерево портов получено, теперь можно приступать к установке программ из портов.

Установка ПО из портов

Рассмотрим установку утилиты trafshow (утилита для просмотра информации о пакетах, проходящих через сетевой инетрфейс) из портов. Для начала нам нужно определить, где находится порт. Очень удобно использовать для этого команду whereis, набираем:

whereis trafshow

Если файл или каталог обнаружен, то результатом выполнения будет путь к объекту:

находим порт с нужной утилитой через команду whereis

Теперь нам нужно перейти в каталог, содержащий инструкции для сборки trafshow (т. е. в каталог с портом) и выполнить сборку:

cd /usr/ports/net/trafshow
make install clean

Результатом выполнения этих команд будет длинный отладочный вывод данных на экран. Рассмотрим важные сообщения:

  • Installing for trafshow-5.2.3_4,1 — начался процесс инсталляции.
  • Registering installation for trafshow-5.2.3_4,1 — регистрация программы в системе.
  • Cleaning for trafshow-5.2.3_4,1 — очистка временного каталога.

Команда make install clean фактически означает: скомпилировать, инсталлировать, стереть. Где make — компиляция программы, install — установка программы, clean — очистка временного каталога, созданного в процессе сборки. Если не делать, допустим, clean, то каталоги с временными файлами остануться в системе, они располагаются в подкаталоге порта work (/usr/ports/net/trafshow/work). В принципе каталог work можно и просто удалить вручную.

Если сборка порта потребует каких-либо зависимостей, то они также будут собраны из соответствующих портов автоматически.

Конфигурационное меню

Если порт собирается первый раз и для его сборки требуется указать какие-либо параметры, то после выполнения команды make install clean на экране появится конфигурационное меню:

конфигурационное меню при первой сборке пакета

Управление там стандартное для псевдографических интерфейсов. Клавишами курсора мы выбираем нужную опцию, клавишами «Space» или «Enter» вкл./выкл. нужную опцию. Клавиша «Tab» служит для перехода в область управления кнопками «OK» или «Cancel» и обратно. После установки нужных опций и нажатия на «OK» начинается сборка.

Выбраные опции будут занесены в базу данных, и будут применяться при каждой последующей сборке этого порта (конфигурационное меню больше не появится). Если же требуется поменять опции, можно таки вызвать меню конфигурации принудительно, для этого нужно перейти в директорию порта и набрать команду команду:

make config

Если требуется установить состояние конфигуратора порта в «по умолчанию», то следует вызвать команду:

make rmconfig

Если требуется задать конфигурацию не только для текущего порта, но и для всех его зависимостей, тогда следует выполнить:

make config-recursive

Что приведет к последовательному выводу на экран конфигураторов для порта и для всех его зависимостей. Это особенно удобно, если мы собираем метапорт и не хотим прерывать процесс сборки «всплывающими» окнами с меню.

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

make rmconfig-recursive

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

make all-depends-list

На всякий случай конкретизирую, что все эти команды вводятся из-под каталога с конкретным портом. Как на этом скрине:

выполнение команды make в каталоге порта

Загрузка исходников без сборки

Чтобы загрузить исходник, при этом не собирая программу, достаточно выполнить команду:

make fetch

В результате чего архив с программным кодом будет загружен в каталог /usr/ports/distfiles. Если запрашиваемый архив уже есть в каталоге, то загрузка произведена не будет. Чтобы загрузить исходники сразу для всех зависимостей порта, нужно выполнять команду:

make fetch-recursive

Остается один дискуссионный вопрос. Можно ли совместно использовать порты и пакеты? Кому интересна дополнительная информация, можете почитать ответы в моем треде на форуме комьюнити фряхи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *