# pkgГлава 4. Установка приложений: Пакеты и Порты
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.
Содержание
4.1. Обзор
FreeBSD поставляется с богатым набором системных инструментов в составе базовой системы. Кроме того, FreeBSD предоставляет две дополнительные технологии для установки стороннего программного обеспечения: коллекцию портов FreeBSD для установки из исходных кодов и пакеты для установки из предварительно собранных бинарных файлов. Оба метода могут быть использованы для установки программного обеспечения как с локальных носителей, так и из сети.
Прочитав эту главу, вы будете знать:
Разница между бинарными пакетами и портами.
Как найти стороннее программное обеспечение, портированное на FreeBSD.
Как управлять бинарными пакетами с помощью pkg.
Как собрать стороннее программное обеспечение из исходных кодов с использованием Коллекции портов.
Как найти файлы, установленные с приложением, для пост-установочной настройки.
Что делать, если установка программного обеспечения не удалась.
4.2. Обзор установки программного обеспечения
Порт FreeBSD — это набор файлов, предназначенных для автоматизации процесса компиляции приложения из исходного кода. Файлы, из которых состоит порт, содержат всю необходимую информацию для автоматической загрузки, распаковки, наложения исправлений, компиляции и установки приложения.
Если программное обеспечение ещё не адаптировано и не протестировано на FreeBSD, может потребоваться редактирование исходного кода для его правильной установки и работы.
Однако более 36000 сторонних приложений уже портированы на FreeBSD. По возможности эти приложения доступны для загрузки в виде предварительно скомпилированных пакетов.
Пакетами можно управлять с помощью команд управления пакетами FreeBSD.
Как пакеты, так и порты учитывают зависимости. Если приложение устанавливается с помощью пакета или порта, а необходимая библиотека ещё не установлена, эта библиотека будет автоматически установлена первой.
Пакет FreeBSD содержит предварительно скомпилированные версии всех команд приложения, а также любые конфигурационные файлы и документацию. Пакетом можно управлять с помощью команд pkg(8), таких как pkg install.
Хотя эти две технологии схожи, пакеты и порты имеют свои сильные стороны. Выберите технологию, которая соответствует вашим требованиям для установки конкретного приложения.
Сжатый tar-архив пакета обычно меньше, чем сжатый tar-архив с исходным кодом приложения.
Пакеты не требуют времени на компиляцию. Для больших приложений, таких как Firefox, KDE Plasma или GNOME, это может быть важно на медленной системе.
Пакеты не требуют понимания процесса компиляции программного обеспечения в FreeBSD.
Пакеты обычно компилируются с консервативными параметрами, так как они должны работать на максимальном количестве систем. При компиляции из портов можно изменить параметры компиляции.
Некоторые приложения имеют параметры на этапе компиляции, определяющие, какие функции будут установлены. Например, NGINX® можно настроить с широким набором различных встроенных опций.
В некоторых случаях для одного приложения могут существовать несколько пакетов с разными настройками. Например, NGINX® доступен в виде пакетов
nginxиnginx-lite. Первый имеет гораздо больше включенных опций, но это, в свою очередь, требует установки множества зависимостей для его работы, что увеличивает занимаемое место и поверхность для атак.Транзитивные зависимости могут стать довольно большими, например, полный пакет
nginxпотянет за собой несколько X-библиотек, что может оказаться неожиданным. Сборка из портов позволяет выбрать только нужные опции, избегая подхода «всё включено». В некоторых случаях для одного приложения могут существовать несколько пакетов с разными настройками.Условия лицензирования некоторых программных продуктов запрещают распространение в бинарном виде. Такое программное обеспечение должно распространяться в виде исходного кода, который конечный пользователь должен самостоятельно скомпилировать.
Некоторые люди не доверяют бинарным дистрибутивам или предпочитают изучать исходный код, чтобы выявить потенциальные проблемы.
Исходный код необходим для применения пользовательских исправлений.
Для отслеживания обновлений портов подпишитесь на рассылки Список рассылки, посвящённый Портам FreeBSD и Список рассылки, посвящённый ошибкам в портах FreeBSD.
Перед установкой приложения проверьте https://vuxml.freebsd.org/ на наличие связанных проблем с безопасностью. Для проверки установленных пакетов на наличие известных уязвимостей выполните команду |
Оставшаяся часть этой главы объясняет, как использовать пакеты и порты для установки и управления сторонним программным обеспечением в FreeBSD.
4.3. Поиск программного обеспечения
Список доступных приложений для FreeBSD постоянно растет. Существует несколько способов найти программное обеспечение для установки:
Веб-сайт FreeBSD содержит актуальный поисковый список всех доступных приложений на странице Портала портов. Порты можно искать по названию приложения или по категории программного обеспечения.
Дэн Лангилл поддерживает FreshPorts, который предоставляет удобный поиск и отслеживает изменения в приложениях из коллекции портов. Зарегистрированные пользователи могут создать индивидуальный список наблюдения, чтобы получать автоматические уведомления по электронной почте при обновлении отслеживаемых портов.
Если найти конкретное приложение становится сложно, попробуйте поискать на таких сайтах, как SourceForge или GitHub, а затем проверьте ссылку Ports Portal, чтобы узнать, было ли это приложение портировано.
Поиск репозитория бинарных пакетов для приложения с помощью команды pkg(8)
4.4. Использование pkg для управления бинарными пакетами
pkg(8) предоставляет интерфейс для управления пакетами: регистрации, добавления, удаления и обновления пакетов.
Для сайтов, которые хотят использовать только предварительно собранные бинарные пакеты из зеркал FreeBSD, управления пакетами с помощью pkg(8) может быть достаточно.
Однако для сайтов, собирающих из исходного кода, потребуется отдельный инструмент управления портами.
Поскольку pkg(8) работает только с бинарными пакетами, он не является заменой таким инструментам. Эти инструменты можно использовать для установки программного обеспечения как из бинарных пакетов, так и из коллекции портов, тогда как pkg(8) устанавливает только бинарные пакеты.
4.4.1. Начало работы с pkg
Все поддерживаемые версии FreeBSD теперь содержат /usr/sbin/pkg, также известный как pkg(7). Это небольшая заглушка, которая обладает лишь минимальной функциональностью, необходимой для установки настоящего pkg(8).
Для успешного завершения процесса начальной загрузки требуется рабочее подключение к Интернету. |
Выполните команду pkg(8) из командной строки:
Вывод должен быть похож на следующий:
The package management tool is not yet installed on your system. Do you want to fetch and install it now? [y/N]
pkg(7) перехватит команду, и если вы подтвердите своё намерение, загрузит tarball pkg(8), установит pkg(8) из него, инициализирует локальную базу данных пакетов, а затем выполнит изначально запрошенную команду.
Более новые версии pkg(7) поддерживают pkg -N для проверки, установлен ли pkg(8), без запуска процесса установки, и, наоборот, pkg bootstrap[-f] для установки pkg(8) (или принудительной переустановки) без выполнения других действий.
Информация по использованию pkg доступна на pkg(8) или при запуске pkg без дополнительных аргументов. Дополнительные параметры настройки pkg описаны в pkg.conf(5).
Каждый аргумент команды pkg документирован в соответствующем руководстве, специфичном для команды.
Чтобы прочитать справочную страницу для pkg install, например, выполните следующую команду:
# pkg help installОставшаяся часть этого раздела демонстрирует распространённые задачи управления бинарными пакетами, которые можно выполнять с помощью pkg(8). Каждая из представленных команд предоставляет множество ключей для настройки их использования. Подробности и дополнительные примеры смотрите в справке (help) или man-странице соответствующей команды.
4.4.2. Квартальные и Последние Ветви Портов
Ветка Quarterly предоставляет пользователям более предсказуемый и стабильный опыт установки и обновления портов и пакетов. Это достигается за счёт того, что в неё вносятся только обновления, не связанные с добавлением новых функций. Ветки Quarterly получают исправления безопасности (которые могут включать обновления версий или обратные порты коммитов), исправления ошибок, а также изменения, связанные с соответствием портов или изменения в их инфраструктуре. Ветка Quarterly создаётся из HEAD в начале каждого квартала (года) в январе, апреле, июле и октябре. Ветки именуются в соответствии с годом (YYYY) и кварталом (Q1-4), в котором они созданы. Например, ветка quarterly, созданная в январе 2023 года, называется 2023Q1. А ветка Latest предоставляет пользователям самые последние версии пакетов.
Чтобы переключить pkg(8) с Quarterly на Latest, выполните следующие команды:
# mkdir -p /usr/local/etc/pkg/repos
# echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.confЗатем выполните эту команду, чтобы обновить каталоги локальных репозиториев пакетов для ветки Latest:
# pkg update -f4.4.3. Репозитории модулей ядра
Репозитории модулей ядра позволяют пользователям устанавливать готовые к использованию модули, такие как драйверы графики и поддержка специфичного оборудования. Начиная с FreeBSD 14.3, проект FreeBSD предоставляет собранные модули ядра для каждой поддерживаемой версии. Чтобы создать конфигурацию такого репозитория (если она отсутствует), добавьте следующее в /usr/local/etc/pkg/repos/kmods.conf:
FreeBSD-kmods: {
url: "pkg+https://pkg.FreeBSD.org/${ABI}/KMODSFLAVOR",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}Переменная KMODSFLAVOR использует следующий шаблон именования: kmods_PORTBRANCH_MINORRELEASE.
Например:
| Релиз FreeBSD | главные порты | квартальные порты |
|---|---|---|
FreeBSD 14.2-RELEASE | kmods_latest_2 | kmods_quarterly_2 |
FreeBSD 14.3-RELEASE | kmods_latest_3 | kmods_quarterly_3 |
FreeBSD 14.3-STABLE | kmods_latest | kmods_quarterly |
FreeBSD 15.0-CURRENT | kmods_latest |
4.4.4. Настройка pkg
pkg.conf(5) — это общесистемный конфигурационный файл, используемый утилитами pkg(8). Стандартное расположение этого файла — /usr/local/etc/pkg.conf.
FreeBSD не требует наличия файла |
Строки в файле, начинающиеся с символа "#", являются комментариями и игнорируются.
Файл имеет формат UCL. Для получения дополнительной информации о синтаксисе libucl(3) посетите официальный сайт UCL.
Распознаются следующие типы опций - логические, строковые и списковые.
Логическая опция считается включённой, если в файле конфигурации указано одно из следующих значений: YES, TRUE или ON.
4.4.5. Поиск пакетов
Для поиска пакета можно использовать pkg-search(8):
# pkg search nginxВывод должен быть похож на следующий:
modsecurity3-nginx-1.0.3 Instruction detection and prevention engine / nginx Wrapper nginx-1.22.1_2,3 Robust and small WWW server nginx-devel-1.23.2_4 Robust and small WWW server nginx-full-1.22.1_1,3 Robust and small WWW server (full package) nginx-lite-1.22.1,3 Robust and small WWW server (lite package) nginx-naxsi-1.22.1,3 Robust and small WWW server (plus NAXSI) nginx-prometheus-exporter-0.10.0_7 Prometheus exporter for NGINX and NGINX Plus stats nginx-ultimate-bad-bot-blocker-4.2020.03.2005_1 Nginx bad bot and other things blocker nginx-vts-exporter-0.10.7_7 Server that scraps NGINX vts stats and export them via HTTP p5-Nginx-ReadBody-0.07_1 Nginx embeded perl module to read and evaluate a request body p5-Nginx-Simple-0.07_1 Perl 5 module for easy to use interface for Nginx Perl Module p5-Test-Nginx-0.30 Testing modules for Nginx C module development py39-certbot-nginx-2.0.0 NGINX plugin for Certbot rubygem-passenger-nginx-6.0.15 Modules for running Ruby on Rails and Rack applications
4.4.6. Установка и загрузка пакетов
Для установки бинарного пакета можно использовать pkg-install(8). Эта команда использует данные репозитория для определения версии программного обеспечения, которую нужно установить, а также наличия неустановленных зависимостей. Например, для установки curl:
# pkg install curlВывод должен быть похож на следующий:
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 9 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
ca_root_nss: 3.83
curl: 7.86.0
gettext-runtime: 0.21
indexinfo: 0.3.1
libidn2: 2.3.3
libnghttp2: 1.48.0
libpsl: 0.21.1_4
libssh2: 1.10.0.3
libunistring: 1.0
Number of packages to be installed: 9
The process will require 11 MiB more space.
3 MiB to be downloaded
Proceed with this action? [y/N]Новый пакет и любые дополнительные пакеты, установленные в качестве зависимостей, можно увидеть в списке установленных пакетов:
# pkg infoВывод должен быть похож на следующий:
ca_root_nss-3.83 Root certificate bundle from the Mozilla Project curl-7.86.0 Command line tool and library for transferring data with URLs gettext-runtime-0.21.1 GNU gettext runtime libraries and programs indexinfo-0.3.1 Utility to regenerate the GNU info page index libidn2-2.3.3 Implementation of IDNA2008 internationalized domain names libnghttp2-1.48.0 HTTP/2.0 C Library libpsl-0.21.1_6 C library to handle the Public Suffix List libssh2-1.10.0.3 Library implementing the SSH2 protocol libunistring-1.0 Unicode string library pkg-1.18.4 Package manager
Для загрузки пакета с последующей установкой позже или в другом месте используйте pkg-fetch(8). Например, чтобы скачать nginx-lite:
# pkg fetch -d -o /usr/home/user/packages/ nginx-lite-d: используется для получения всех зависимостей-o: используется для указания каталога загрузки
Вывод должен быть похож на следующий:
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following packages will be fetched:
New packages to be FETCHED:
nginx-lite: 1.22.1,3 (342 KiB: 22.20% of the 2 MiB to download)
pcre: 8.45_3 (1 MiB: 77.80% of the 2 MiB to download)
Number of packages to be fetched: 2
The process will require 2 MiB more space.
2 MiB to be downloaded.
Proceed with fetching packages? [y/N]:Для установки загруженных пакетов можно использовать pkg-install(8) следующим образом:
# cd /usr/home/user/packages/# pkg install nginx-lite-1.22.1,3.pkg4.4.7. Получение информации об установленных пакетах
Информацию об установленных в системе пакетах можно просмотреть с помощью команды pkg-info(8), которая при запуске без каких-либо параметров выводит версию пакета для всех установленных пакетов или указанного пакета.
Например, чтобы узнать, какая версия pkg установлена, выполните:
# pkg info pkgВывод должен быть похож на следующий:
pkg-1.19.0
Name : pkg
Version : 1.19.0
Installed on : Sat Dec 17 11:05:28 2022 CET
Origin : ports-mgmt/pkg
Architecture : FreeBSD:13:amd64
Prefix : /usr/local
Categories : ports-mgmt
Licenses : BSD2CLAUSE
Maintainer : pkg@FreeBSD.org
WWW : https://github.com/freebsd/pkg
Comment : Package manager
Options :
DOCS : on
Shared Libs provided:
libpkg.so.4
Annotations :
FreeBSD_version: 1301000
repo_type : binary
repository : FreeBSD
Flat size : 33.2MiB
Description :
Package management tool
WWW: https://github.com/freebsd/pkg4.4.8. Обновление установленных пакетов
Установленные пакеты можно обновить до их последних версий с помощью pkg-upgrade(8):
# pkg upgradeЭта команда сравнит установленные версии с доступными в каталоге репозитория и обновит их из репозитория.
4.4.9. Проверка установленных пакетов
Уязвимости в программном обеспечении регулярно обнаруживаются в сторонних приложениях. Для решения этой проблемы pkg включает встроенный механизм аудита. Чтобы определить, есть ли известные уязвимости для программного обеспечения, установленного в системе, используйте pkg-audit(8):
# pkg audit -FВывод должен быть похож на следующий:
Fetching vuln.xml.xz: 100% 976 KiB 499.5kB/s 00:02 chromium-108.0.5359.98 is vulnerable: chromium -- multiple vulnerabilities CVE: CVE-2022-4440 CVE: CVE-2022-4439 CVE: CVE-2022-4438 CVE: CVE-2022-4437 CVE: CVE-2022-4436 WWW: https://vuxml.FreeBSD.org/freebsd/83eb9374-7b97-11ed-be8f-3065ec8fd3ec.html
4.4.10. Удаление пакетов
Пакеты, которые больше не нужны, можно удалить с помощью pkg-delete(8).
Например:
# pkg delete curlВывод должен быть похож на следующий:
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
curl :7.86.0
Number of packages to be removed: 1
The operation will free 4 MiB.
Proceed with deinstallation packages? [y/N]: y
[1/1] Deinstalling curl-7.86.0...
[1/1] Deleting files for curl-7.86.0: 100%4.4.11. Автоматическое удаление неиспользуемых пакетов
Удаление пакета может оставить зависимости, которые больше не требуются. Ненужные пакеты, установленные как зависимости (листовые пакеты), могут быть автоматически обнаружены и удалены с помощью pkg-autoremove(8):
# pkg autoremoveВывод должен быть похож на следующий:
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages:
Installed packages to be REMOVED:
ca_root_nss-3.83
Number of packages to be removed: 1
The operation will free 723 KiB.
Proceed with deinstalling packages? [y/N]:Установленные в качестве зависимостей пакеты называются автоматическими пакетами. Неавтоматические пакеты, то есть пакеты, которые были явно установлены не в качестве зависимости для другого пакета, можно вывести с помощью:
# pkg prime-listВывод должен быть похож на следующий:
nginx openvpn sudo
pkg prime-list — это псевдоним команды, объявленный в /usr/local/etc/pkg.conf. Существует множество других команд, которые можно использовать для запросов к базе данных пакетов системы. Например, команда pkg prime-origins позволяет получить каталог портов происхождения для упомянутого выше списка:
# pkg prime-originsВывод должен быть похож на следующий:
www/nginx security/openvpn security/sudo
Этот список можно использовать для пересборки всех пакетов, установленных в системе, с помощью инструментов сборки, таких как ports-mgmt/poudriere или ports-mgmt/synth.
Пометить установленный пакет как автоматический можно с помощью:
# pkg set -A 1 devel/cmakeКак только пакет становится листовым и помечается как автоматический, он выбирается командой pkg autoremove.
Пометить установленный пакет как не автоматический можно с помощью:
# pkg set -A 0 devel/cmake4.4.12. Удаление устаревших пакетов
По умолчанию pkg хранит бинарные пакеты в кэш-каталоге, определённом параметром PKG_CACHEDIR в pkg.conf(5). Сохраняются только копии последних установленных пакетов. В более старых версиях pkg сохранялись все предыдущие пакеты. Чтобы удалить устаревшие бинарные пакеты, выполните:
# pkg cleanВесь кэш может быть очищен выполнением команды:
# pkg clean -a4.4.13. Блокировка и разблокировка пакетов
pkg-lock(8) используется для блокировки пакетов от переустановки, изменения или удаления. pkg-unlock(8) разблокирует указанные пакеты. Оба варианта влияют только на уже установленные пакеты. Следовательно, невозможно предотвратить установку нового пакета с помощью этого механизма, за исключением случаев, когда такая установка подразумевает обновление заблокированного пакета.
Например, чтобы заблокировать nginx-lite:
# pkg lock nginx-liteИ чтобы разблокировать nginx-lite:
# pkg unlock nginx-lite4.4.14. Изменение метаданных пакета
Программное обеспечение в коллекции портов FreeBSD может подвергаться изменениям основных номеров версий. Для решения этой проблемы в pkg есть встроенная команда для обновления происхождения пакетов. Это может быть полезно, например, если lang/python3 переименован в lang/python311, чтобы lang/python3 теперь мог представлять версию 3.11.
Чтобы изменить источник пакета для приведенного выше примера, выполните:
# pkg set -o lang/python3:lang/python311В качестве другого примера, чтобы обновить lang/ruby31 до lang/ruby32, выполните:
# pkg set -o lang/ruby31:lang/ruby32При изменении происхождения пакетов важно переустановить пакеты, зависящие от пакета с изменённым происхождением. Для принудительной переустановки зависимых пакетов выполните: |
4.5. Использование коллекции портов
Коллекция портов — это набор Makefile-файлов, патчей и описаний. Каждый такой набор файлов используется для сборки и установки отдельного приложения в FreeBSD и называется портом.
По умолчанию Коллекция портов хранится в подкаталоге /usr/ports.
Прежде чем устанавливать и использовать Коллекцию портов, учтите, что обычно не рекомендуется использовать Коллекцию портов вместе с бинарными пакетами, предоставляемыми через pkg, для установки программного обеспечения. По умолчанию pkg отслеживает квартальные ветки-релизы дерева портов, а не HEAD. Зависимости для порта в HEAD могут отличаться от его аналога в квартальном релизе ветки, что может привести к конфликтам между зависимостями, установленными pkg, и теми, что из Коллекции портов. Если необходимо использовать Коллекцию портов и pkg вместе, убедитесь, что ваша Коллекция портов и pkg находятся на одной ветке релиза дерева портов. |
Коллекция портов содержит каталоги для категорий программного обеспечения. В каждой категории находятся подкаталоги для отдельных приложений. Каждый подкаталог приложения содержит набор файлов, которые сообщают FreeBSD, как компилировать и устанавливать эту программу, называемый каркасом порта (ports skeleton). Каждый каркас порта включает следующие файлы и каталоги:
Makefile: contains statements that specify how the application should be compiled and where its components should be installed.
distinfo: contains the names and checksums of the files that must be downloaded to build the port.
files/: this directory contains any patches needed for the program to compile and install on FreeBSD. This directory may also contain other files used to build the port.
pkg-descr: provides a more detailed description of the program.
pkg-plist: a list of all the files that will be installed by the port. It also tells the ports system which files to remove upon deinstallation.
Некоторые порты включают файлы pkg-message или другие для обработки особых ситуаций. Для получения более подробной информации об этих файлах и о портах в целом обратитесь к Руководству по созданию портов FreeBSD.
Порт не включает в себя исходный код, также известный как distfile. Этап извлечения при сборке порта автоматически сохраняет загруженные исходные файлы в /usr/ports/distfiles.
4.5.1. Установка коллекции портов
Прежде чем приложение можно будет скомпилировать с использованием порта, необходимо установить Коллекцию портов. Если она не была установлена во время установки FreeBSD, используйте следующий метод для её установки:
4.5.2. Установка портов
Этот раздел содержит основные инструкции по использованию коллекции портов для установки или удаления программного обеспечения. Подробное описание доступных целей make и переменных окружения доступно в ports(7).
Прежде чем компилировать любой порт, обязательно обновите коллекцию портов, как описано в предыдущем разделе. Поскольку установка любого стороннего программного обеспечения может привести к уязвимостям в безопасности, рекомендуется сначала проверить https://vuxml.freebsd.org/ на наличие известных проблем безопасности, связанных с портом. Альтернативно, выполните |
Использование коллекции портов предполагает наличие работающего подключения к Интернету. Также требуются права суперпользователя.
Для компиляции и установки порта перейдите в каталог порта, который нужно установить, затем введите make install в командной строке. Сообщения будут отображать прогресс:
# cd /usr/ports/sysutils/lsof
# make install
>> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===> Extracting for lsof-4.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===> Patching for lsof-4.88.d,8
===> Applying FreeBSD patches for lsof-4.88.d,8
===> Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===> Building for lsof-4.88.d,8
...
[compilation output snipped]
...
===> Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.88.d,8
===> Registering installation for lsof-4.88.d,8
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
/usr/local/sbin/lsof
#Поскольку lsof — это программа, работающая с повышенными привилегиями, при её установке отображается предупреждение системы безопасности. После завершения установки будет возвращена командная строка.
Некоторые оболочки сохраняют кэш команд, доступных в каталогах, перечисленных в переменной окружения PATH, чтобы ускорить поиск исполняемых файлов этих команд. Пользователи оболочки tcsh должны ввести rehash, чтобы новоустановленная команда могла использоваться без указания полного пути. Для оболочки sh используйте hash -r. Дополнительную информацию можно найти в документации по используемой оболочке.
Во время установки создается рабочий подкаталог, содержащий все временные файлы, используемые при компиляции. Удаление этого каталога позволяет сэкономить место на диске и снижает вероятность возникновения проблем в дальнейшем при обновлении до более новой версии порта:
# make clean
===> Cleaning for lsof-88.d,8
#Чтобы избежать этого дополнительного шага, используйте |
4.5.2.1. Настройка установки портов
Некоторые порты предоставляют опции сборки, которые можно использовать для включения или отключения компонентов приложения, обеспечения параметров безопасности или других настроек. Примеры включают www/firefox и security/gpgme. Если порт зависит от других портов с настраиваемыми опциями, процесс может несколько раз приостанавливаться для взаимодействия с пользователем, так как по умолчанию предлагается выбрать опции из меню. Чтобы избежать этого и выполнить всю настройку одной командой, выполните make config-recursive в каталоге порта. Затем выполните make install [clean] для компиляции и установки порта.
При использовании |
Существует несколько способов вернуться к меню настроек сборки порта, чтобы добавить, удалить или изменить параметры после того, как порт уже был собран. Один из методов — перейти в каталог с портом с помощью cd и ввести make config. Другой вариант — использовать make showconfig. Также можно выполнить make rmconfig, что удалит все выбранные параметры и позволит начать заново. Все эти и другие варианты подробно описаны в ports(7).
Система портов использует fetch(1) для загрузки исходных файлов, которая поддерживает различные переменные окружения. Переменные FTP_PASSIVE_MODE, FTP_PROXY и FTP_PASSWORD может потребоваться установить, если система FreeBSD находится за межсетевым экраном или FTP/HTTP прокси. Полный список поддерживаемых переменных смотрите в fetch(3).
Для пользователей, которые не могут быть постоянно подключены к интернету, команда make fetch может быть выполнена в /usr/ports, чтобы загрузить все distfiles, или в категории, например /usr/ports/net, или в конкретном скелете порта. Обратите внимание, что если порт имеет зависимости, выполнение этой команды в категории или скелете порта не загрузит distfiles портов из другой категории. Вместо этого используйте make fetch-recursive, чтобы также загрузить distfiles для всех зависимостей порта.
В редких случаях, например, когда у организации есть локальный репозиторий distfiles, переменная MASTER_SITES может быть использована для переопределения мест загрузки, указанных в Makefile. При использовании укажите альтернативное расположение:
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetchПеременные WRKDIRPREFIX и PREFIX позволяют переопределить рабочий и целевой каталоги по умолчанию. Например:
# make WRKDIRPREFIX=/usr/home/example/ports installсоберет порт в /usr/home/example/ports и установит все в /usr/local.
# make PREFIX=/usr/home/example/local installскомпилирует порт в /usr/ports и установит его в /usr/home/example/local. И:
# make WRKDIRPREFIX=../ports PREFIX=../local installобъединит эти два.
Эти параметры также могут быть установлены как переменные среды. Обратитесь к руководству вашей оболочки для получения инструкций по установке переменных среды.
4.5.3. Удаление установленных портов
Установленные порты можно удалить с помощью pkg delete. Примеры использования этой команды приведены на pkg-delete(8).
Альтернативно, в каталоге порта можно выполнить make deinstall:
# cd /usr/ports/sysutils/lsof
# make deinstall
===> Deinstalling for sysutils/lsof
===> Deinstalling
Deinstallation has been requested for the following 1 packages:
lsof-4.88.d,8
The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... doneРекомендуется прочитать сообщения во время удаления порта. Если у порта есть приложения, которые от него зависят, эта информация будет отображена, но удаление продолжится. В таких случаях может быть лучше переустановить приложение, чтобы избежать нарушенных зависимостей.
4.5.4. Обновление портов
Со временем в Коллекции портов становятся доступны новые версии программного обеспечения. В этом разделе описано, как определить, какие программы можно обновить, и как выполнить обновление.
Чтобы определить, доступны ли более новые версии установленных портов, убедитесь, что у вас установлена последняя версия дерева портов, используя команду обновления, описанную в Git Method. Следующая команда выведет список устаревших установленных портов:
# pkg version -l "<"Перед попыткой обновления прочитайте файл |
4.5.4.1. Инструменты для обновления и управления портами
Коллекция портов содержит несколько утилит для выполнения обновления. У каждой есть свои сильные и слабые стороны.
Исторически большинство установок использовали либо Portmaster, либо Portupgrade. Synth — это более современная альтернатива.
Выбор наилучшего инструмента для конкретной системы остается за системным администратором. Рекомендуется создать резервную копию данных перед использованием любого из этих инструментов. |
4.5.4.2. Обновление портов с помощью Portmaster
ports-mgmt/portmaster — это очень небольшая утилита для обновления установленных портов. Она предназначена для использования инструментов, установленных в базовой системе FreeBSD, без зависимости от других портов или баз данных. Чтобы установить эту утилиту как порт:
# cd /usr/ports/ports-mgmt/portmaster
# make install cleanPortmaster определяет четыре категории портов:
Корневой порт (root port): не имеет зависимостей и сам не является зависимостью для других портов.
Ствольный порт (trunk port): не имеет зависимостей, но другие порты зависят от него.
Веточный порт (branch port): имеет зависимости и другие порты зависят от него.
Листовой порт (leaf port): имеет зависимости, но другие порты от него не зависят.
Чтобы перечислить эти категории и найти обновления:
# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache22-2.2.3
===>>> New version available: apache22-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports
===>>> 137 total installed ports
===>>> 83 have new versions availableЭта команда используется для обновления всех устаревших портов:
# portmaster -aПо умолчанию Portmaster создаёт резервную копию пакета перед удалением существующего порта. Если установка новой версии проходит успешно, Portmaster удаляет резервную копию. Использование опции |
Если в процессе обновления возникают ошибки, добавьте -f для обновления и пересборки всех портов:
# portmaster -afPortmaster также может использоваться для установки новых портов в системе, обновляя все зависимости перед сборкой и установкой нового порта. Чтобы использовать эту функцию, укажите расположение порта в коллекции портов:
# portmaster shells/bashДополнительную информацию о ports-mgmt/portmaster можно найти в его pkg-descr.
4.5.4.3. Обновление портов с помощью Portupgrade
Portupgrade устарел и будет удален в ближайшем будущем. |
ports-mgmt/portupgrade — это ещё одна утилита, которую можно использовать для обновления портов. Она устанавливает набор приложений для управления портами. Однако она зависит от Ruby. Для установки порта выполните:
# cd /usr/ports/ports-mgmt/portupgrade
# make install cleanПрежде чем выполнять обновление с помощью этой утилиты, рекомендуется проверить список установленных портов с помощью pkgdb -F и исправить все обнаруженные несоответствия.
Для обновления всех устаревших портов, установленных в системе, используйте portupgrade -a. Альтернативно, добавьте -i для запроса подтверждения каждого обновления:
# portupgrade -aiДля обновления только указанного приложения вместо всех доступных портов используйте portupgrade pkgname. Очень важно включить опцию -R, чтобы сначала обновить все порты, необходимые для данного приложения:
# portupgrade -R firefoxЕсли указан -P, Portupgrade ищет доступные пакеты в локальных каталогах, перечисленных в PKG_PATH. Если локально пакеты не найдены, он загружает их с удалённого сайта. Если пакеты не могут быть найдены локально или загружены удалённо, Portupgrade использует порты. Чтобы полностью избежать использования портов, укажите -PP. Последний набор опций предписывает Portupgrade прервать работу, если пакеты недоступны:
# portupgrade -PP gnome3Чтобы только загрузить distfiles портов или пакеты (если указан -P), без сборки или установки, используйте -F. Для получения дополнительной информации о всех доступных опциях обратитесь к руководству portupgrade.
Дополнительную информацию о ports-mgmt/portupgrade можно найти в его pkg-descr.
4.5.5. Порты и дисковое пространство
Использование коллекции портов со временем приводит к расходу дискового пространства. После сборки и установки порта выполнение команды make clean в скелете порта очистит временный каталог work. При использовании Portmaster для установки порта этот каталог будет удалён автоматически, если не указан параметр -K. Если установлен Portupgrade, следующая команда удалит все каталоги work в локальной копии коллекции портов:
# portsclean -CКроме того, устаревшие файлы исходных дистрибутивов со временем накапливаются в /usr/ports/distfiles. Чтобы использовать Portupgrade для удаления всех distfiles, на которые больше нет ссылок из портов:
# portsclean -DPortupgrade может удалить все distfiles, на которые нет ссылок из портов, установленных в системе:
# portsclean -DDЕсли установлен Portmaster, используйте:
# portmaster --clean-distfilesПо умолчанию эта команда интерактивна и запрашивает подтверждение пользователя на удаление distfile.
В дополнение к этим командам, ports-mgmt/pkg_cutleaves автоматизирует задачу удаления установленных портов, которые больше не нужны.
4.6. Сборка пакетов с poudriere
poudriere — это утилита с лицензией BSD для создания и тестирования пакетов FreeBSD. Она использует механизм jail в FreeBSD для настройки изолированных сред сборки. Эти jail могут использоваться для сборки пакетов для версий FreeBSD, отличных от версии системы, на которой установлена poudriere, а также для сборки пакетов под i386 на хосте с архитектурой amd64. После сборки пакеты располагаются в структуре, идентичной официальным зеркалам. Эти пакеты могут использоваться pkg(8) и другими инструментами управления пакетами.
poudriere устанавливается с помощью пакета ports-mgmt/poudriere или порта. Установка включает пример файла конфигурации /usr/local/etc/poudriere.conf.sample. Скопируйте этот файл в /usr/local/etc/poudriere.conf. Отредактируйте скопированный файл в соответствии с локальной конфигурацией.
Хотя ZFS не является обязательным для системы, на которой запущен poudriere, его использование дает преимущества. При использовании ZFS необходимо указать ZPOOL в /usr/local/etc/poudriere.conf, а FREEBSD_HOST следует установить на ближайшее зеркало. Определение CCACHE_DIR позволяет использовать devel/ccache для кэширования компиляции и сокращения времени сборки часто компилируемого кода. Может быть удобно разместить наборы данных poudriere в изолированном дереве, смонтированном в /poudriere. Значения по умолчанию для остальных параметров конфигурации являются приемлемыми.
Количество обнаруженных ядер процессора определяет, сколько сборок будет выполняться параллельно. Обеспечьте достаточный объем виртуальной памяти, используя RAM или файл подкачки. Если виртуальная память закончится, компиляционные окружения остановятся и будут уничтожены, что приведёт к странным сообщениям об ошибках.
4.6.1. Инициализация Jail и дерева портов
После настройки инициализируйте poudriere, чтобы он установил jail с требуемым деревом FreeBSD и деревом портов. Укажите имя для jail с помощью -j, а версию FreeBSD — с помощью -v. На системах под управлением FreeBSD/amd64 архитектуру можно задать с помощью -a, указав i386 или amd64. По умолчанию используется архитектура, отображаемая командой uname.
# poudriere jail -c -j 13amd64 -v 13.1-RELEASE
[00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done
[00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64
[00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/base.txz 125 MB 4110 kBps 31s
[00:00:33] Extracting base... done
[00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/src.txz 154 MB 4178 kBps 38s
[00:01:33] Extracting src... done
[00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s
[00:02:38] Extracting lib32... done
[00:02:42] Cleaning up... done
[00:02:42] Recording filesystem state for clean... done
[00:02:42] Upgrading using ftp
/etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done.
Applying patches... done.
Fetching 6 files... done.
The following files will be added as part of updating to
13.1-RELEASE-p1:
/usr/src/contrib/unbound/.github
/usr/src/contrib/unbound/.github/FUNDING.yml
/usr/src/contrib/unbound/contrib/drop2rpz
/usr/src/contrib/unbound/contrib/unbound_portable.service.in
/usr/src/contrib/unbound/services/rpz.c
/usr/src/contrib/unbound/services/rpz.h
/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
The following files will be updated as part of updating to
13.1-RELEASE-p1:
[…]
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
done.
13.1-RELEASE-p1
[00:04:06] Recording filesystem state for clean... done
[00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used# poudriere ports -c -p local -m git+https
[00:00:00] Creating local fs at /poudriere/ports/local... done
[00:00:00] Checking out the ports tree... doneНа одном компьютере poudriere может собирать порты с различными конфигурациями, в нескольких jail и из разных деревьев портов. Пользовательские конфигурации для таких комбинаций называются наборами. Подробности смотрите в разделе CUSTOMIZATION руководства poudriere(8) после установки ports-mgmt/poudriere или ports-mgmt/poudriere-devel.
Базовая конфигурация, представленная здесь, размещает отдельные файлы make.conf для каждого jail, порта и набора в /usr/local/etc/poudriere.d. Имя файла в этом примере формируется путем объединения имени jail, имени порта и имени набора: 13amd64-local-workstation-make.conf. Системный make.conf и этот новый файл объединяются во время сборки, чтобы создать make.conf, используемый build jail.
Пакеты для сборки указываются в файле 13amd64-local-workstation-pkglist (для портов с FLAVORS можно указать @FLAVOR):
editors/emacs devel/git devel/php-composer2@php82 ports-mgmt/pkg ...
Настраиваются параметры и зависимости для указанных портов:
# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglistНаконец, пакеты собираются и создается репозиторий пакетов:
# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglistВо время работы нажатие Ctrl+t отображает текущее состояние сборки. poudriere также создает файлы в /poudriere/logs/bulk/jailname, которые можно использовать с веб-сервером для отображения информации о сборке.
По завершении новые пакеты становятся доступными для установки из репозитория poudriere.
Для получения дополнительной информации об использовании poudriere см. poudriere(8) и основной веб-сайт: https://github.com/freebsd/poudriere/wiki.
4.6.2. Настройка клиентов pkg для использования репозитория poudriere
Хотя можно использовать как пользовательский репозиторий вместе с официальным, иногда полезно отключить официальный репозиторий. Это делается путём создания конфигурационного файла, который переопределяет и отключает официальный конфигурационный файл. Создайте /usr/local/etc/pkg/repos/FreeBSD.conf со следующим содержимым:
FreeBSD: {
enabled: no
}Обычно проще всего предоставлять доступ к репозиторию poudriere клиентским машинам через HTTP. Настройте веб-сервер для обслуживания каталога пакетов, например: /usr/local/poudriere/data/packages/13amd64, где 13amd64 — это название сборки.
Если URL репозитория пакетов: http://pkg.example.com/13amd64, то файл конфигурации репозитория в /usr/local/etc/pkg/repos/custom.conf будет выглядеть так:
custom: {
url: "http://pkg.example.com/13amd64",
enabled: yes,
}Если нежелательно предоставлять доступ к репозиторию пакетов через интернет, можно использовать протокол file:// для прямого указания на репозиторий:
custom: {
url: "file:///usr/local/poudriere/data/packages/11amd64",
enabled: yes,
}4.7. Пост-установочные вопросы
Независимо от того, было ли программное обеспечение установлено из бинарного пакета или порта, большинство сторонних приложений требуют некоторой настройки после установки. Следующие команды и расположения могут помочь определить, что было установлено вместе с приложением.
Большинство приложений устанавливают как минимум один конфигурационный файл по умолчанию в
/usr/local/etc. В случаях, когда приложение имеет большое количество конфигурационных файлов, создаётся подкаталог для их хранения. Часто устанавливаются примеры конфигурационных файлов, которые имеют окончание, например,.sample. Конфигурационные файлы следует просмотреть и, возможно, отредактировать в соответствии с потребностями системы. Для редактирования файла-примера сначала скопируйте его без расширения.sample.Приложения, которые предоставляют документацию, устанавливают её в
/usr/local/share/doc, а многие приложения также устанавливают страницы руководств. Перед продолжением следует ознакомиться с этой документацией.Некоторые приложения запускают службы, которые необходимо добавить в
/etc/rc.confперед запуском приложения. Обычно такие приложения устанавливают скрипт запуска в/usr/local/etc/rc.d. Дополнительную информацию можно найти в Запуск служб.По замыслу, приложения не запускают свои стартовые скрипты при установке, а также не выполняют скрипты остановки при удалении или обновлении. Это решение остается на усмотрение системного администратора.
Пользователи csh(1) должны выполнить
rehash, чтобы перестроить список известных двоичных файлов вPATHоболочки.Используйте
pkg info, чтобы определить, какие файлы, man-страницы и бинарные файлы были установлены вместе с приложением.
4.8. Работа с неработающими портами
Когда порт не собирается или не устанавливается, попробуйте следующее:
Поищите, есть ли исправление для порта в базе данных отчётов о проблемах. Если оно есть, применение предложенного исправления может решить проблему.
Обратитесь к сопровождающему порта за помощью. Введите
make maintainerв скелете портов или прочитайтеMakefileпорта, чтобы найти адрес электронной почты сопровождающего. Не забудьте включить вывод, предшествующий ошибке, в письмо сопровождающему.Некоторые порты поддерживаются не отдельными людьми, а группой сопровождающих, представленной рассылкой. Многие, но не все, такие адреса выглядят как freebsd-listname@FreeBSD.org. Учтите это при отправке письма.
В частности, порты, поддерживаемые ports@FreeBSD.org, не курируются конкретным человеком. Вместо этого исправления и поддержка поступают от сообщества в целом, участники которого подписаны на этот список рассылки. Добровольцы всегда нужны!
Если на письмо не получен ответ, используйте Bugzilla для отправки отчета об ошибке, следуя инструкциям в Составление отчетов о проблемах в FreeBSD.
Исправьте это! В Руководстве портировщика содержится подробная информация об инфраструктуре портов, так что вы можете исправить случайно сломанный порт или даже предложить свой собственный!
Установите пакет вместо порта, следуя инструкциям в Использование pkg для управления бинарными пакетами.
Изменено: 20 октября 2025 г. by Vladlen Popolitov