Оглавление:
Статья последний раз была обновлена 02.07.2024
Для того, чтобы понять принцип работы системы портов FreeBSD, нужно иметь представление об исходных кодах. Исходный код (или исходник) — это всего навсего текстовый файл содержащий в себе программу, написанную на каком-либо языке программирования. Чтобы программа запустилась и заработала, она должна быть переведена из исходного кода в набор байт, содержащий машинные коды — это инструкции для непосредственного выполнения процессором. Процесс перевода из исходного кода в машинный называется — компиляция. В процессе компиляции программа компилятор также добавляет к файлу функционал необходимый для запуска, работы и взаимодействия в конкретной операционной системе. То есть если мы скомпилируем программу в FreeBSD то запустить ее скажем в Windows будет невозможно. Точно нельзя будет запустить скомпилированную в FreeBSD amd64 программу во FreeBSD i386, так как исполняемый файл программы будет содержать инструкции с учетом 64-битной ОС и x64 процессора.
Система портов — это универсальный инструмент для автоматической сборки программ из исходных кодов. Система портов располагается в файловой системе в каталоге /usr/ports и содержит дерево портов, каталог для исходников, скрипты и т.д. Дерево портов представляет собой набор каталогов, разделенных по тематикам, содержащим файлы с инструкциями для сборки программ, патчи. Для того, чтобы начать работу с портами, следует получить дерево портов тем или иным способом.
Получение дерева портов
Для того, чтобы эфективно и быстро получить как свежее дерево портов, так и последующие обновления, можно воспользоваться утилитой portsnap входящей в состав FreeBSD. Для этого логинимся в качестве root и набираем команду:
portsnap fetch extract
Наберемся терпения, процесс не быстрый!
Теперь мы видим, что появилась директория /usr/ports, в которой сформировалось дерево портов.
Команду portsnap fetch extract следует выполнять только один раз (первый запуск portsnap), затем для последующих обновлений достаточно выполнять:
portsnap fetch update
В результате в дерево портов будут вноситься только изменения. Если же вместо update делать постоянно extract, то каждый раз дерево портов будет полностью распаковываться, что бессмысленно и занимает время.
Если же интернета нет (всякое бывает), но требуется дерево портов, то можно установить порты с инсталяционного диска с FreeBSD, либо просто скопировать содержимое /usr/ports с другого компьютера. Итак, дерево портов получено, теперь можно приступать к установке программ из портов.
Установка ПО из портов
Рассмотрим установку утилиты trafshow (утилита для просмотра информации о пакетах, проходящих через сетевой инетрфейс) из портов. Для начала нам нужно определить где находится порт. Очень удобно использовать для этого команду whereis, набираем:
whereis trafshow
Если файл или каталог обнаружен, то результатом выполнения будет путь к объекту:
Теперь нам нужно перейти в каталог, содержащий инструкции для сборки 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.
- Поднимаем веб-сервер на Ubuntu - 16.09.2024
- Переадресация домена на другой домен - 08.08.2023
- Как установить и удалить GNOME? - 31.07.2023