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

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

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

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

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

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

portsnap fetch extract

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

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

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

Команду portsnap fetch extract следует выполнять только один раз (первый запуск portsnap), затем для последующих обновлений достаточно выполнять:

portsnap fetch update

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

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

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

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

whereis trafshow

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

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

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

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

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

===>  Vulnerability check disabled, database not found

=> trafshow-5.2.3.tgz doesn’t seem to exist in /usr/ports/distfiles/.

=> Attempting to fetch from ftp://ftp.nsk.su/pub/RinetSoftware/.

…………………………………………….

Система обращается к серверу, где находится архив с исходными кодами для программы trafshow — trafshow-5.2.3.tgz. Файл скачивается в каталог /usr/ports/distfiles. И при последующей сборке из этого порта обращение к интернету более не понадобится, ибо перед началом сборки проверяется наличие архива с исходными кодами в /usr/ports/distfiles. Фактически это означает, что можно скачать архив с исходными кодами на машине с интернетом, отнести на машину без интернета, поместить в /usr/ports/distfiles и собрать.

Далее следует обратить внимание на последние строки:

…………………………………………….

cc -O2 -fno-strict-aliasing -pipe -Wall -I. -DHAVE_CONFIG_H -c version.c

cc -O2 -fno-strict-aliasing -pipe -Wall -I. -DHAVE_CONFIG_H  -o trafshow trafshow.o screen.o colormask.o getkey.o selector.o events.o session.o show_if.o show_stat.o show_dump.o parse_dl.o parse_ip.o netstat.o cisco_netflow.o addrtoname.o hashtab.o lookupa.o recycle.o util.o help_page.o domain_resolver.o   version.o -pthread -lncurses -ltermcap -lpcap

===>  Installing for trafshow-5.2.3,1

===>   Generating temporary packing list

===>  Checking if net/trafshow already installed

install  -s -o root -g wheel -m 555 /usr/ports/net/trafshow/work/trafshow-5.2.3/trafshow /usr/local/bin

install  -o root -g wheel -m 444 /usr/ports/net/trafshow/work/trafshow-5.2.3/trafshow.1 /usr/local/man/man1

install  -o root -g wheel -m 444 /usr/ports/net/trafshow/work/trafshow-5.2.3/.trafshow /usr/local/etc/trafshow.dist

if [ ! -e /usr/local/etc/trafshow ]; then  /bin/cp -p /usr/local/etc/trafshow.dist /usr/local/etc/trafshow;  fi

===>   Compressing manual pages for trafshow-5.2.3,1

===>   Registering installation for trafshow-5.2.3,1

===> SECURITY REPORT:

      This port has installed the following files which may act as network

      servers and may therefore pose a remote security risk to the system.

/usr/local/bin/trafshow



      If there are vulnerabilities in these programs there may be a security

      risk to the system. FreeBSD makes no guarantee about the security of

      ports included in the Ports Collection. Please type ‘make deinstall’

      to deinstall the port if this is a concern.



      For more information, and contact details about the security

      status of this software, see the following webpage:

http://soft.risp.ru/trafshow/index_en.shtml

===>  Cleaning for trafshow-5.2.3,1

Рассмотрим сообщения:

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

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

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

После сборки и установки порта, ПО регистрируется в системе и к нему применимы все команды, какие применимы к ПО, установленному из пакетов.

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

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

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

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

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

Если же требуется поменять опции, можно принудительно вызвать меню конфигурации набрав команду make config (находясь в папке порта).

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

Если требуется задать конфигурацию не только для текущего порта, но и для всех его зависимостей, тогда следует выполнить make config-recursive. Что приведет к последовательному выводу на экран конфигураторов для порта и для всех его зависимостей, что особенно удобно, допустим, при сборке порта с многочисленными зависимостями.

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

Чтобы было понятно приведем пример со сборкой xorg, это метапорт содержащий компоненты X-сервера. Мы начинаем установку, появляется меню конфигуратора, мы задаем параметры, жмем ОК и начинается сборка одного из компонентов, проходит какое-то время, начинается сборка следующего компонента, снова появляется меню конфигуратора и сборка останавливается, пока мы не зададим параметры. Удобнее же задать конфигурацию всех пакетов перед сборкой при помощи make config-recursive и спокойно, без вопросов в процессе сборки, собрать метапорт.

Также существует возможность сбросить кофигураторы для всех зависимостей порта в состояние «по умолчанию», т. е. make rmconfig-recursive. Для того, чтобы вывести на экран все порты, от которых зависит текущий порт, следует использовать команду make all-depends-list.

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

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

Губарь Маргарита Александровна

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

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