Оглавление:
Статья последний раз была обновлена 03.08.2025
Для того, чтобы понять принцип работы системы портов FreeBSD, нужно иметь представление об исходных кодах. Исходный код (или исходник) — это всего-навсего текстовый файл, содержащий в себе программу, написанную на каком-либо языке программирования. Чтобы программа запустилась и заработала, она должна быть переведена из исходного кода в набор байт (байт-код), который служит промежуточным звеном перед машинным кодом, а это уже инструкции для непосредственного выполнения процессором. Весь этот процесс называется компиляция (в компилируемых языках), в ходе которого программа компилятор также добавляет к исполняемому файлу (нашей конечной софтине) функционал необходимый для запуска, работы и взаимодействия в конкретной операционной системе.
Сей процесс описан в самых общих чертах для базового понимания!
Значит, если мы скомпилируем программу в FreeBSD то запустить ее, скажем, в Windows будет невозможно. Также нельзя будет запустить скомпилированную для FreeBSD amd64 программу в FreeBSD i386, так как исполняемый файл программы будет содержать инструкции с учетом 64-битной OS и x64 процессора.
Коллекция портов — это универсальный инструмент для автоматической сборки программ из исходных кодов, физически располагается на файловой системе в каталоге /usr/ports и содержит дерево портов, каталог для исходников, скрипты и т. д. Дерево портов представляет собой разделенный по тематикам набор каталогов, содержащих файлы с инструкциями для сборки программ, патчи. Для того, чтобы начать работу с портами, следует получить дерево портов тем или иным способом.
Проще всего это сделать на самой ранней стадии — установки системы, просто поставив галочку (звездочку) в поле ports.

Если вы уже прошли эту стадию и не установили 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, в которой сформировалось дерево портов.

Команду portsnap fetch extract необходимо выполнить один раз, в дальнейшем нам потребуется только обновлять уже существующее дерево портов. Наберем в консоли для этого:
portsnap fetch update
В результате в дерево портов будут вноситься только изменения. Если же вместо update делать постоянно extract, то каждый раз дерево портов будет полностью распаковываться, что бессмысленно и занимает время.
Если же интернета нет (всякое бывает), но требуется дерево портов, то можно установить порты с инсталяционного диска с FreeBSD, либо просто скопировать содержимое /usr/ports с другого компьютера. Итак, дерево портов получено, теперь можно приступать к установке программ из портов.
Установка ПО из портов
Рассмотрим установку утилиты trafshow (утилита для просмотра информации о пакетах, проходящих через сетевой инетрфейс) из портов. Для начала нам нужно определить, где находится порт. Очень удобно использовать для этого команду whereis, набираем:
whereis trafshow
Если файл или каталог обнаружен, то результатом выполнения будет путь к объекту:

Теперь нам нужно перейти в каталог, содержащий инструкции для сборки 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 fetch
В результате чего архив с программным кодом будет загружен в каталог /usr/ports/distfiles. Если запрашиваемый архив уже есть в каталоге, то загрузка произведена не будет. Чтобы загрузить исходники сразу для всех зависимостей порта, нужно выполнять команду:
make fetch-recursive
Остается один дискуссионный вопрос. Можно ли совместно использовать порты и пакеты? Кому интересна дополнительная информация, можете почитать ответы в моем треде на форуме комьюнити фряхи.
- Изменяем файл hosts автоматически при старте виртуальной машины Hyper-V с сайтом - 23.01.2026
- Настраиваем плагин Clearfy для WordPress - 05.06.2025
- Поднимаем веб-сервер на Ubuntu - 16.09.2024