Path: blob/main/documentation/content/ru/books/handbook/ports/_index.adoc
18098 views
---
description: 'FreeBSD предоставляет две взаимодополняющие технологии для установки стороннего программного обеспечения: коллекцию портов FreeBSD для установки из исходного кода и пакеты для установки из предварительно собранных бинарных файлов'
next: books/handbook/x11
params:
path: /books/handbook/ports/
part: 'В начале'
prev: books/handbook/basics
showBookMenu: 'true'
tags: ["ports", "collection", "pkg", "poudriere", "management"]
title: 'Глава 4. Установка приложений: Пакеты и Порты'
weight: 6
---
[[ports]]
= Установка приложений: пакеты и порты
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 4
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/
ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]
ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[[ports-synopsis]]
== Обзор
FreeBSD поставляется с богатым набором системных инструментов в составе базовой системы. Кроме того, FreeBSD предоставляет две дополнительные технологии для установки стороннего программного обеспечения: коллекцию портов FreeBSD для установки из исходных кодов и пакеты для установки из предварительно собранных бинарных файлов. Оба метода могут быть использованы для установки программного обеспечения как с локальных носителей, так и из сети.
Прочтите эту главу, чтобы узнать:
* Разница между бинарными пакетами и портами.
* Как найти стороннее программное обеспечение, портированное на FreeBSD.
* Как управлять бинарными пакетами с помощью pkg.
* Как собрать стороннее программное обеспечение из исходных кодов с использованием Коллекции портов.
* Как найти файлы, установленные с приложением, для пост-установочной настройки.
* Что делать, если установка программного обеспечения не удалась.
[[ports-overview]]
== Обзор установки программного обеспечения
Порт FreeBSD — это набор файлов, предназначенных для автоматизации процесса компиляции приложения из исходного кода. Файлы, из которых состоит порт, содержат всю необходимую информацию для автоматической загрузки, распаковки, наложения исправлений, компиляции и установки приложения.
Если программное обеспечение ещё не адаптировано и не протестировано на FreeBSD, может потребоваться редактирование исходного кода для его правильной установки и работы.
Однако более link:https://ports.FreeBSD.org[{numports}] сторонних приложений уже портированы на FreeBSD. По возможности эти приложения доступны для загрузки в виде предварительно скомпилированных _пакетов_.
Пакетами можно управлять с помощью команд управления пакетами FreeBSD.
Как пакеты, так и порты учитывают зависимости. Если приложение устанавливается с помощью пакета или порта, а необходимая библиотека ещё не установлена, эта библиотека будет автоматически установлена первой.
Пакет FreeBSD содержит предварительно скомпилированные версии всех команд приложения, а также любые конфигурационные файлы и документацию. Пакетом можно управлять с помощью команд man:pkg[8], таких как `pkg install`.
Хотя эти две технологии схожи, пакеты и порты имеют свои сильные стороны. Выберите технологию, которая соответствует вашим потребностям, для установки конкретного приложения.
.Преимущества пакетов
* Сжатый tar-архив пакета обычно меньше, чем сжатый tar-архив с исходным кодом приложения.
* Пакеты не требуют времени на компиляцию. Для больших приложений, таких как Firefox, KDE Plasma или GNOME, это может быть важно на медленной системе.
* Пакеты не требуют понимания процесса компиляции программного обеспечения в FreeBSD.
.Преимущества портов
* Пакеты обычно компилируются с консервативными параметрами, так как они должны работать на максимальном количестве систем. При компиляции из портов можно изменить параметры компиляции.
* Некоторые приложения имеют параметры на этапе компиляции, определяющие, какие функции будут установлены. Например, NGINX(R) можно настроить с широким набором различных встроенных опций.
+
В некоторых случаях для одного приложения могут существовать несколько пакетов с разными настройками. Например, NGINX(R) доступен в виде пакетов `nginx` и `nginx-lite`. Первый имеет гораздо больше включенных опций, но это, в свою очередь, требует установки множества зависимостей для его работы, что увеличивает занимаемое место и поверхность для атак.
+
Транзитивные зависимости могут стать довольно большими, например, полный пакет `nginx` потянет за собой несколько X-библиотек, что может оказаться неожиданным. Сборка из портов позволяет выбрать только нужные опции, избегая подхода «всё включено». В некоторых случаях для одного приложения могут существовать несколько пакетов с разными настройками.
* Условия лицензирования некоторых программных продуктов запрещают распространение в бинарном виде. Такое программное обеспечение должно распространяться в виде исходного кода, который конечный пользователь должен самостоятельно скомпилировать.
* Некоторые люди не доверяют бинарным дистрибутивам или предпочитают изучать исходный код, чтобы выявить потенциальные проблемы.
* Исходный код необходим для применения пользовательских исправлений.
Для отслеживания обновлений портов подпишитесь на рассылки {freebsd-ports} и {freebsd-ports-bugs}.
[WARNING]
====
Перед установкой приложения проверьте https://vuxml.freebsd.org/[] на наличие связанных проблем с безопасностью.
Для проверки установленных пакетов на наличие известных уязвимостей выполните команду `pkg audit -F`.
====
Оставшаяся часть этой главы объясняет, как использовать пакеты и порты для установки и управления сторонним программным обеспечением в FreeBSD.
[[ports-finding-applications]]
== Поиск программного обеспечения
Список доступных приложений для FreeBSD постоянно растет. Существует несколько способов найти программное обеспечение для установки:
* Веб-сайт FreeBSD содержит актуальный поисковый список всех доступных приложений на странице link:https://ports.FreeBSD.org[Портала портов]. Порты можно искать по названию приложения или по категории программного обеспечения.
* Дэн Лангилл поддерживает https://www.freshports.org/[FreshPorts], который предоставляет удобный поиск и отслеживает изменения в приложениях из коллекции портов. Зарегистрированные пользователи могут создать индивидуальный список наблюдения, чтобы получать автоматические уведомления по электронной почте при обновлении отслеживаемых портов.
* Если найти конкретное приложение становится сложно, попробуйте поискать на таких сайтах, как https://sourceforge.net/[SourceForge] или https://github.com/[GitHub], а затем проверьте ссылку link:https://ports.FreeBSD.org[Ports Portal], чтобы узнать, было ли это приложение портировано.
* Поиск репозитория бинарных пакетов для приложения с помощью команды man:pkg[8]
[[pkgng-intro]]
== Использование pkg для управления бинарными пакетами
man:pkg[8] предоставляет интерфейс для управления пакетами: регистрации, добавления, удаления и обновления пакетов.
Для сайтов, которые хотят использовать только предварительно собранные бинарные пакеты из зеркал FreeBSD, управления пакетами с помощью man:pkg[8] может быть достаточно.
Однако для сайтов, собирающих из исходного кода, потребуется отдельный crossref:ports[ports-upgrading-tools,инструмент управления портами].
Поскольку man:pkg[8] работает только с бинарными пакетами, он не является заменой таким инструментам. Эти инструменты можно использовать для установки программного обеспечения как из бинарных пакетов, так и из коллекции портов, тогда как man:pkg[8] устанавливает только бинарные пакеты.
[[pkgng-initial-setup]]
=== Начало работы с pkg
Все поддерживаемые версии FreeBSD теперь содержат `/usr/sbin/pkg`, также известный как man:pkg[7]. Это небольшая заглушка, которая обладает лишь минимальной функциональностью, необходимой для установки настоящего man:pkg[8].
[NOTE]
====
Для успешного завершения процесса начальной загрузки требуется рабочее подключение к Интернету.
====
Выполните команду man:pkg[8] из командной строки:
[source, shell]
....
# pkg
....
Вывод должен быть похож на следующий:
[.programlisting]
....
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]
....
man:pkg[7] перехватит команду, и если вы подтвердите своё намерение, загрузит tarball man:pkg[8], установит man:pkg[8] из него, инициализирует локальную базу данных пакетов, а затем выполнит изначально запрошенную команду.
Более новые версии man:pkg[7] поддерживают `pkg -N` для проверки, установлен ли man:pkg[8], без запуска процесса установки, и, наоборот, `pkg bootstrap[-f]` для установки man:pkg[8] (или принудительной переустановки) без выполнения других действий.
Информация по использованию pkg доступна на man:pkg[8] или при запуске `pkg` без дополнительных аргументов. Дополнительные параметры настройки pkg описаны в man:pkg.conf[5].
Каждый аргумент команды pkg документирован в соответствующем руководстве, специфичном для команды.
Чтобы прочитать справочную страницу для `pkg install`, например, выполните следующую команду:
[source, shell]
....
# pkg help install
....
Оставшаяся часть этого раздела демонстрирует распространённые задачи управления бинарными пакетами, которые можно выполнять с помощью man:pkg[8]. Каждая из представленных команд предоставляет множество ключей для настройки их использования. Подробности и дополнительные примеры смотрите в справке (help) или man-странице соответствующей команды.
[[quarterly-latest-branch]]
=== Квартальные и последние ветви портов
Ветка `Quarterly` предоставляет пользователям более предсказуемую и стабильную среду для установки и обновления портов и пакетов. Это достигается за счёт того, что в неё вносятся только обновления, не связанные с добавлением новых функций. Ветки Quarterly получают исправления безопасности (которые могут включать обновления версий или обратные порты коммитов), исправления ошибок, а также изменения, связанные с соответствием портов или изменения в их инфраструктуре. Ветка Quarterly создаётся из HEAD в начале каждого квартала (года) в январе, апреле, июле и октябре. Ветки именуются в соответствии с годом (YYYY) и кварталом (Q1-4), в котором они созданы. Например, ветка quarterly, созданная в январе 2023 года, называется 2023Q1. А ветка `Latest` предоставляет пользователям самые последние версии пакетов.
Чтобы переключить man:pkg[8] с Quarterly на Latest, выполните следующие команды:
[source, shell]
....
# mkdir -p /usr/local/etc/pkg/repos
# echo 'FreeBSD-ports: { url: "pkg+https://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
....
Затем выполните эту команду, чтобы обновить каталоги локальных репозиториев пакетов для ветки Latest:
[source, shell]
....
# pkg update -f
....
[[kmod-repository]]
=== Репозитории модулей ядра
Репозитории модулей ядра позволяют пользователям устанавливать готовые к использованию модули, такие как драйверы графики и поддержка специфичного оборудования. Начиная с FreeBSD 14.3, проект FreeBSD предоставляет собранные модули ядра для каждой поддерживаемой версии. Чтобы создать конфигурацию такого репозитория (если она отсутствует), добавьте следующее в [.filename]#/usr/local/etc/pkg/repos/kmods.conf#:
[source, shell]
....
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`.
Например:
.Kmodsflavor
[options="header", cols="1,1,1"]
|===
| Релиз 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
|
|===
[[pkg-configuration]]
=== Настройка pkg
man:pkg.conf[5] — это общесистемный конфигурационный файл, используемый утилитами man:pkg[8]. Стандартное расположение этого файла — `/usr/local/etc/pkg.conf`.
[NOTE]
====
FreeBSD не требует наличия файла `pkg.conf`. Многие установки будут работать без `pkg.conf` вообще или с пустым `pkg.conf` (за исключением строк с комментариями).
====
Строки в файле, начинающиеся с символа "#", являются комментариями и игнорируются.
Файл имеет формат UCL. Для получения дополнительной информации о синтаксисе man:libucl[3] посетите link:https://github.com/vstakhov/libucl[официальный сайт UCL].
Распознаются следующие типы опций - логические, строковые и списковые.
Логическая опция считается включённой, если в файле конфигурации указано одно из следующих значений: YES, TRUE или ON.
[[pkg-search]]
=== Поиск пакетов
Для поиска пакета можно использовать man:pkg-search[8]:
[source, shell]
....
# pkg search nginx
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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
....
[[pkg-installing-fetching]]
=== Установка и загрузка пакетов
Для установки бинарного пакета можно использовать man:pkg-install[8]. Эта команда использует данные репозитория для определения версии программного обеспечения, которую нужно установить, а также наличия неустановленных зависимостей. Например, для установки curl:
[source, shell]
....
# pkg install curl
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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]
....
Новый пакет и любые дополнительные пакеты, установленные в качестве зависимостей, можно увидеть в списке установленных пакетов:
[source, shell]
....
# pkg info
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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
....
Для загрузки пакета с последующей установкой позже или в другом месте используйте man:pkg-fetch[8]. Например, чтобы скачать `nginx-lite`:
[source, shell]
....
# pkg fetch -d -o /usr/home/user/packages/ nginx-lite
....
* `-d`: используется для получения всех зависимостей
* `-o`: используется для указания каталога загрузки
Вывод должен быть похож на следующий:
[.programlisting]
....
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]:
....
Для установки загруженных пакетов можно использовать man:pkg-install[8] следующим образом:
[source, shell]
....
# cd /usr/home/user/packages/
....
[source, shell]
....
# pkg install nginx-lite-1.22.1,3.pkg
....
[[pkgng-pkg-info]]
=== Получение информации об установленных пакетах
Информацию об установленных в системе пакетах можно просмотреть с помощью команды man:pkg-info[8], которая при запуске без каких-либо параметров выводит версию пакета для всех установленных пакетов или указанного пакета.
Например, чтобы узнать, какая версия pkg установлена, выполните:
[source, shell]
....
# pkg info pkg
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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 : [email protected]
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/pkg
....
[[pkgng-upgrading]]
=== Обновление установленных пакетов
Установленные пакеты можно обновить до их последних версий с помощью man:pkg-upgrade[8]:
[source, shell]
....
# pkg upgrade
....
Эта команда сравнит установленные версии с доступными в каталоге репозитория и обновит их из репозитория.
[[pkgng-auditing]]
=== Проверка установленных пакетов
Уязвимости в программном обеспечении регулярно обнаруживаются в сторонних приложениях. Для решения этой проблемы pkg включает встроенный механизм аудита. Чтобы определить, есть ли известные уязвимости для программного обеспечения, установленного в системе, используйте man:pkg-audit[8]:
[source, shell]
....
# pkg audit -F
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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
....
[[pkg-delete]]
=== Удаление пакетов
Пакеты, которые больше не нужны, можно удалить с помощью man:pkg-delete[8].
Например:
[source, shell]
....
# pkg delete curl
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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%
....
[[pkgng-autoremove]]
=== Автоматическое удаление неиспользуемых пакетов
Удаление пакета может оставить зависимости, которые больше не требуются. Ненужные пакеты, установленные как зависимости (листовые пакеты), могут быть автоматически обнаружены и удалены с помощью man:pkg-autoremove[8]:
[source, shell]
....
# pkg autoremove
....
Вывод должен быть похож на следующий:
[.programlisting]
....
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]:
....
Установленные в качестве зависимостей пакеты называются _автоматическими_ пакетами. Неавтоматические пакеты, то есть пакеты, которые были явно установлены не в качестве зависимости для другого пакета, можно вывести с помощью:
[source, shell]
....
# pkg prime-list
....
Вывод должен быть похож на следующий:
[.programlisting]
....
nginx
openvpn
sudo
....
`pkg prime-list` — это псевдоним команды, объявленный в `/usr/local/etc/pkg.conf`. Существует множество других команд, которые можно использовать для запросов к базе данных пакетов системы. Например, команда `pkg prime-origins` позволяет получить каталог портов происхождения для упомянутого выше списка:
[source, shell]
....
# pkg prime-origins
....
Вывод должен быть похож на следующий:
[.programlisting]
....
www/nginx
security/openvpn
security/sudo
....
Этот список можно использовать для пересборки всех пакетов, установленных в системе, с помощью инструментов сборки, таких как package:ports-mgmt/poudriere[] или package:ports-mgmt/synth[].
Пометить установленный пакет как автоматический можно с помощью:
[source, shell]
....
# pkg set -A 1 devel/cmake
....
Как только пакет становится листовым и помечается как автоматический, он выбирается командой `pkg autoremove`.
Пометить установленный пакет как _не_ автоматический можно с помощью:
[source, shell]
....
# pkg set -A 0 devel/cmake
....
[[pkgng-clean]]
=== Удаление устаревших пакетов
По умолчанию pkg хранит бинарные пакеты в кэш-каталоге, определённом параметром `PKG_CACHEDIR` в man:pkg.conf[5]. Сохраняются только копии последних установленных пакетов. В более старых версиях pkg сохранялись все предыдущие пакеты. Чтобы удалить устаревшие бинарные пакеты, выполните:
[source, shell]
....
# pkg clean
....
Весь кэш может быть очищен выполнением команды:
[source, shell]
....
# pkg clean -a
....
[[pkg-locking-unlocking]]
=== Блокировка и разблокировка пакетов
man:pkg-lock[8] используется для блокировки пакетов от переустановки, изменения или удаления. man:pkg-unlock[8] разблокирует указанные пакеты. Оба варианта влияют только на уже установленные пакеты. Следовательно, невозможно предотвратить установку нового пакета с помощью этого механизма, за исключением случаев, когда такая установка подразумевает обновление заблокированного пакета.
Например, чтобы заблокировать `nginx-lite`:
[source, shell]
....
# pkg lock nginx-lite
....
И чтобы разблокировать `nginx-lite`:
[source, shell]
....
# pkg unlock nginx-lite
....
[[pkgng-set]]
=== Изменение метаданных пакета
Программное обеспечение в коллекции портов FreeBSD может подвергаться изменениям основных номеров версий. Для решения этой проблемы в pkg есть встроенная команда для обновления происхождения пакетов. Это может быть полезно, например, если package:lang/python3[] переименован в package:lang/python311[], чтобы package:lang/python3[] теперь мог представлять версию `3.11`.
Чтобы изменить источник пакета для приведённого выше примера, выполните:
[source, shell]
....
# pkg set -o lang/python3:lang/python311
....
В качестве другого примера, чтобы обновить package:lang/ruby31[] до package:lang/ruby32[], выполните:
[source, shell]
....
# pkg set -o lang/ruby31:lang/ruby32
....
[NOTE]
====
При изменении происхождения пакетов важно переустановить пакеты, зависящие от пакета с изменённым происхождением. Для принудительной переустановки зависимых пакетов выполните:
[source, shell]
....
# pkg install -Rf lang/ruby32
....
====
[[ports-using]]
== Использование коллекции портов
Коллекция портов — это набор `Makefile`-файлов, патчей и описаний. Каждый такой набор файлов используется для сборки и установки отдельного приложения в FreeBSD и называется _портом_.
По умолчанию Коллекция портов хранится в подкаталоге `/usr/ports`.
[WARNING]
====
Прежде чем устанавливать и использовать Коллекцию портов, учтите, что обычно не рекомендуется использовать Коллекцию портов вместе с бинарными пакетами, предоставляемыми через pkg, для установки программного обеспечения. По умолчанию pkg отслеживает квартальные ветки-релизы дерева портов, а не HEAD. Зависимости для порта в HEAD могут отличаться от его аналога в квартальном релизе ветки, что может привести к конфликтам между зависимостями, установленными pkg, и теми, что из Коллекции портов. Если необходимо использовать Коллекцию портов и pkg вместе, убедитесь, что ваша Коллекция портов и pkg находятся на одной ветке релиза дерева портов.
====
Коллекция портов содержит каталоги для категорий программного обеспечения. В каждой категории находятся подкаталоги для отдельных приложений. Каждый подкаталог приложения содержит набор файлов, которые сообщают FreeBSD, как компилировать и устанавливать эту программу, называемый _каркасом порта_ (ports skeleton). Каждый каркас порта включает следующие файлы и каталоги:
* *Makefile*: содержит инструкции, определяющие порядок компиляции приложения и расположение его компонентов при установке.
* *distinfo*: содержит имена и контрольные суммы файлов, которые необходимо загрузить для сборки порта.
* *files/*: в этом каталоге содержатся все необходимые патчи для компиляции и установки программы в FreeBSD. Также в этом каталоге могут находиться другие файлы, используемые для сборки порта.
* *pkg-descr*: содержит более подробное описание программы.
* *pkg-plist*: список всех файлов, которые будут установлены портом. Также он указывает системе портов, какие файлы следует удалить при деинсталляции.
Некоторые порты включают файлы `pkg-message` или другие для обработки особых ситуаций. Для получения более подробной информации об этих файлах и о портах в целом обратитесь к extref:{porters-handbook}[Руководству по созданию портов FreeBSD].
Порт не включает в себя исходный код, также известный как `distfile`. Этап извлечения при сборке порта автоматически сохраняет загруженные исходные файлы в `/usr/ports/distfiles`.
[[ports-using-installation-methods]]
=== Установка коллекции портов
Прежде чем приложение можно будет скомпилировать с использованием порта, необходимо установить Коллекцию портов. Если она не была установлена во время установки FreeBSD, используйте следующий метод для её установки:
[[ports-using-git-method]]
[.procedure]
****
*Процедура: Метод Git*
Если требуется больше контроля над деревом портов или необходимо поддерживать локальные изменения, либо если используется FreeBSD-CURRENT, для получения коллекции портов можно использовать Git. Подробное описание Git см. в extref:{committers-guide}[руководстве по Git, git-primer].
Добавляем `--depth 1` в командную строку `git`, чтобы клонировать дерево без получения истории коммитов, что экономит время и приемлемо для большинства пользователей. Если у вас есть собственные изменения в дереве портов или вам нужна история по какой-либо причине, опустите аргумент `--depth 1` ниже.
. Git должен быть установлен перед тем, как его можно будет использовать для получения дерева портов. Если копия дерева портов уже существует, установите Git следующим образом:
+
[source, shell]
....
# cd /usr/ports/devel/git
# make install clean
....
+
Если дерево портов недоступно или для управления пакетами используется pkg, Git можно установить как пакет:
+
[source, shell]
....
# pkg install git
....
+
. Извлеките копию ветки HEAD дерева портов:
+
[source, shell]
....
# git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports
....
+
. Или склонируйте копию квартальной ветки:
+
[source, shell]
....
# git clone --depth 1 https://git.FreeBSD.org/ports.git -b 2023Q1 /usr/ports
....
+
. По мере необходимости обновите `/usr/ports` после первоначального получения из Git:
+
[source, shell]
....
# git -C /usr/ports pull
....
+
. По мере необходимости переключите `/usr/ports` на другую квартальную ветку:
+
[source, shell]
....
# git -C /usr/ports fetch --depth 1 origin 2023Q2:2023Q2
# git -C /usr/ports switch 2023Q2
....
****
=== Установка портов
Этот раздел содержит основные инструкции по использованию коллекции портов для установки или удаления программного обеспечения. Подробное описание доступных целей `make` и переменных окружения доступно в man:ports[7].
[WARNING]
====
Прежде чем компилировать любой порт, обязательно обновите коллекцию портов, как описано в предыдущем разделе. Поскольку установка любого стороннего программного обеспечения может привести к уязвимостям в безопасности, рекомендуется сначала проверить https://vuxml.freebsd.org/[] на наличие известных проблем безопасности, связанных с портом. Или выполните `pkg audit -F` перед установкой нового порта. Эта команда может быть настроена для автоматической проверки безопасности и обновления базы данных уязвимостей в ходе ежедневной проверки безопасности системы. Для получения дополнительной информации обратитесь к man:pkg-audit[8] и man:periodic[8].
====
Использование коллекции портов предполагает наличие работающего подключения к Интернету. Также требуются права суперпользователя.
Для компиляции и установки порта перейдите в каталог порта, который нужно установить, затем введите `make install` в командной строке. Сообщения будут отображать прогресс:
[source, shell]
....
# 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`. Дополнительную информацию можно найти в документации по используемой оболочке.
Во время установки создаётся рабочий подкаталог, содержащий все временные файлы, используемые при компиляции. Удаление этого каталога позволяет сэкономить место на диске и снижает вероятность возникновения проблем в дальнейшем при обновлении до более новой версии порта:
[source, shell]
....
# make clean
===> Cleaning for lsof-88.d,8
#
....
[NOTE]
====
Чтобы избежать этого дополнительного шага, используйте `make install clean` при компиляции порта.
====
==== Настройка установки портов
Некоторые порты предоставляют опции сборки, которые можно использовать для включения или отключения компонентов приложения, обеспечения параметров безопасности или других настроек. Примеры включают package:www/firefox[] и package:security/gpgme[]. Если порт зависит от других портов с настраиваемыми опциями, процесс может несколько раз приостанавливаться для взаимодействия с пользователем, так как по умолчанию предлагается выбрать опции из меню. Чтобы избежать этого и выполнить всю настройку одной командой, выполните `make config-recursive` в каталоге порта. Затем выполните `make install [clean]` для компиляции и установки порта.
[TIP]
====
При использовании `config-recursive` список портов для настройки собирается с помощью цели `all-depends-list`. Рекомендуется выполнять `make config-recursive` до тех пор, пока не будут определены все параметры зависимых портов и экраны выбора опций портов больше не появляются, чтобы убедиться, что все параметры зависимостей настроены.
====
Существует несколько способов вернуться к меню настроек сборки порта, чтобы добавить, удалить или изменить параметры после того, как порт уже был собран. Один из методов — перейти в каталог с портом с помощью `cd` и ввести `make config`. Другой вариант — использовать `make showconfig`. Также можно выполнить `make rmconfig`, что удалит все выбранные параметры и позволит начать заново. Все эти и другие варианты подробно описаны в man:ports[7].
Система портов использует man:fetch[1] для загрузки исходных файлов, которая поддерживает различные переменные окружения. Переменные `FTP_PASSIVE_MODE`, `FTP_PROXY` и `FTP_PASSWORD` может потребоваться установить, если система FreeBSD находится за межсетевым экраном или FTP/HTTP прокси. Полный список поддерживаемых переменных смотрите в man:fetch[3].
Для пользователей, которые не могут быть постоянно подключены к интернету, команда `make fetch` может быть выполнена в `/usr/ports`, чтобы загрузить все distfiles, или в категории, например `/usr/ports/net`, или в конкретном скелете порта. Обратите внимание, что если порт имеет зависимости, выполнение этой команды в категории или скелете порта _не_ загрузит distfiles портов из другой категории. Вместо этого используйте `make fetch-recursive`, чтобы также загрузить distfiles для всех зависимостей порта.
В редких случаях, например, когда у организации есть локальный репозиторий distfiles, переменная `MASTER_SITES` может быть использована для переопределения мест загрузки, указанных в `Makefile`. При использовании укажите альтернативное расположение:
[source, shell]
....
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch
....
Переменные `WRKDIRPREFIX` и `PREFIX` позволяют переопределить рабочий и целевой каталоги по умолчанию. Например:
[source, shell]
....
# make WRKDIRPREFIX=/usr/home/example/ports install
....
соберет порт в `/usr/home/example/ports` и установит все в `/usr/local`.
[source, shell]
....
# make PREFIX=/usr/home/example/local install
....
скомпилирует порт в `/usr/ports` и установит его в `/usr/home/example/local`. И:
[source, shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....
объединит эти два.
Эти параметры также могут быть установлены как переменные среды. Обратитесь к руководству вашей оболочки для получения инструкций по установке переменных среды.
[[ports-removing]]
=== Удаление установленных портов
Установленные порты можно удалить с помощью `pkg delete`. Примеры использования этой команды приведены на man:pkg-delete[8].
Или в каталоге порта можно выполнить `make deinstall`:
[source, shell]
....
# 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
....
Рекомендуется прочитать сообщения во время удаления порта. Если у порта есть приложения, которые от него зависят, эта информация будет отображена, но удаление продолжится. В таких случаях может быть лучше переустановить приложение, чтобы избежать нарушенных зависимостей.
[[ports-upgrading]]
=== Обновление портов
Со временем в Коллекции портов становятся доступны новые версии программного обеспечения. В этом разделе описано, как определить, какие программы можно обновить, и как выполнить обновление.
Чтобы определить, доступны ли более новые версии установленных портов, убедитесь, что у вас установлена последняя версия дерева портов, используя команду обновления, описанную в crossref:ports[ports-using-git-method, "Git Method"]. Следующая команда выведет список устаревших установленных портов:
[source, shell]
....
# pkg version -l "<"
....
[IMPORTANT]
====
Перед попыткой обновления прочитайте файл `/usr/ports/UPDATING` с начала до даты, наиболее близкой к последнему обновлению портов или установке системы. Этот файл описывает различные проблемы и дополнительные шаги, с которыми могут столкнуться пользователи при обновлении портов, включая такие вещи, как изменения форматов файлов, перемещение конфигурационных файлов или несовместимость с предыдущими версиями. Отметьте все инструкции, относящиеся к портам, которые требуют обновления, и следуйте этим инструкциям при выполнении обновления.
====
[[ports-upgrading-tools]]
==== Инструменты для обновления и управления портами
Коллекция портов содержит несколько утилит для выполнения обновления. У каждой есть свои сильные и слабые стороны.
Исторически большинство установок использовали либо Portmaster, либо Portupgrade. Synth — это более современная альтернатива.
[NOTE]
====
Выбор наилучшего инструмента для конкретной системы остаётся за системным администратором. Рекомендуется создать резервную копию данных перед использованием любого из этих инструментов.
====
[[portmaster]]
==== Обновление портов с помощью Portmaster
package:ports-mgmt/portmaster[] — это очень небольшая утилита для обновления установленных портов. Она предназначена для использования инструментов, установленных в базовой системе FreeBSD, без зависимости от других портов или баз данных. Чтобы установить эту утилиту как порт:
[source, shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....
Portmaster определяет четыре категории портов:
* Корневой порт (root port): не имеет зависимостей и сам не является зависимостью для других портов.
* Ствольный порт (trunk port): не имеет зависимостей, но другие порты зависят от него.
* Веточный порт (branch port): имеет зависимости и другие порты зависят от него.
* Листовой порт (leaf port): имеет зависимости, но другие порты от него не зависят.
Чтобы перечислить эти категории и найти обновления:
[source, shell]
....
# 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
....
Эта команда используется для обновления всех устаревших портов:
[source, shell]
....
# portmaster -a
....
[NOTE]
====
По умолчанию Portmaster создаёт резервную копию пакета перед удалением существующего порта. Если установка новой версии проходит успешно, Portmaster удаляет резервную копию. Использование опции `-b` указывает Portmaster не удалять резервную копию автоматически. Добавление опции `-i` запускает Portmaster в интерактивном режиме, запрашивая подтверждение перед обновлением каждого порта. Доступно множество других опций. Подробности об их использовании можно узнать на man-странице man:portmaster[8].
====
Если в процессе обновления возникают ошибки, добавьте `-f` для обновления и пересборки всех портов:
[source, shell]
....
# portmaster -af
....
Portmaster также может использоваться для установки новых портов в системе, обновляя все зависимости перед сборкой и установкой нового порта. Чтобы использовать эту функцию, укажите расположение порта в коллекции портов:
[source, shell]
....
# portmaster shells/bash
....
Дополнительную информацию о package:ports-mgmt/portmaster[] можно найти в его `pkg-descr`.
[[portupgrade]]
==== Обновление портов с помощью Portupgrade
[WARNING]
====
Portupgrade устарел и будет удален в ближайшем будущем.
====
package:ports-mgmt/portupgrade[] — это ещё одна утилита, которую можно использовать для обновления портов. Она устанавливает набор приложений для управления портами. Однако она зависит от Ruby. Для установки порта выполните:
[source, shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....
Прежде чем выполнять обновление с помощью этой утилиты, рекомендуется проверить список установленных портов с помощью `pkgdb -F` и исправить все обнаруженные несоответствия.
Для обновления всех устаревших портов, установленных в системе, используйте `portupgrade -a`. Или добавьте `-i` для запроса подтверждения каждого обновления:
[source, shell]
....
# portupgrade -ai
....
Для обновления только указанного приложения вместо всех доступных портов используйте `portupgrade _pkgname_`. Очень важно включить опцию `-R`, чтобы сначала обновить все порты, необходимые для данного приложения:
[source, shell]
....
# portupgrade -R firefox
....
Если указан `-P`, Portupgrade ищет доступные пакеты в локальных каталогах, перечисленных в `PKG_PATH`. Если локально пакеты не найдены, он загружает их с удалённого сайта. Если пакеты не могут быть найдены локально или загружены удалённо, Portupgrade использует порты. Чтобы полностью избежать использования портов, укажите `-PP`. Последний набор опций предписывает Portupgrade прервать работу, если пакеты недоступны:
[source, shell]
....
# portupgrade -PP gnome3
....
Чтобы только загрузить distfiles портов или пакеты (если указан `-P`), без сборки или установки, используйте `-F`. Для получения дополнительной информации о всех доступных опциях обратитесь к руководству `portupgrade`.
Дополнительную информацию о package:ports-mgmt/portupgrade[] можно найти в его `pkg-descr`.
[[ports-disk-space]]
=== Порты и дисковое пространство
Использование коллекции портов со временем приводит к расходу дискового пространства. После сборки и установки порта выполнение команды `make clean` в скелете порта очистит временный каталог `work`. При использовании Portmaster для установки порта этот каталог будет удалён автоматически, если не указан параметр `-K`. Если установлен Portupgrade, следующая команда удалит все каталоги `work` в локальной копии коллекции портов:
[source, shell]
....
# portsclean -C
....
Кроме того, устаревшие файлы исходных дистрибутивов со временем накапливаются в `/usr/ports/distfiles`. Чтобы использовать Portupgrade для удаления всех distfiles, на которые больше нет ссылок из портов:
[source, shell]
....
# portsclean -D
....
Portupgrade может удалить все distfiles, на которые нет ссылок из портов, установленных в системе:
[source, shell]
....
# portsclean -DD
....
Если установлен Portmaster, используйте:
[source, shell]
....
# portmaster --clean-distfiles
....
По умолчанию эта команда интерактивна и запрашивает подтверждение пользователя на удаление distfile.
В дополнение к этим командам, package:ports-mgmt/pkg_cutleaves[] автоматизирует задачу удаления установленных портов, которые больше не нужны.
[[ports-poudriere]]
== Сборка пакетов с poudriere
poudriere — это утилита с лицензией `BSD` для создания и тестирования пакетов FreeBSD. Она использует механизм jail в FreeBSD для настройки изолированных сред сборки. Эти jail могут использоваться для сборки пакетов для версий FreeBSD, отличных от версии системы, на которой установлена poudriere, а также для сборки пакетов под i386 на хосте с архитектурой amd64. После сборки пакеты располагаются в структуре, идентичной официальным зеркалам. Эти пакеты могут использоваться man:pkg[8] и другими инструментами управления пакетами.
poudriere устанавливается с помощью пакета package: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` позволяет использовать package:devel/ccache[] для кэширования компиляции и сокращения времени сборки часто компилируемого кода. Может быть удобно разместить наборы данных poudriere в изолированном дереве, смонтированном в `/poudriere`. Значения по умолчанию для остальных параметров конфигурации являются приемлемыми.
Количество обнаруженных ядер процессора определяет, сколько сборок будет выполняться параллельно. Обеспечьте достаточный объём виртуальной памяти, используя `RAM` или файл подкачки. Если виртуальная память закончится, компиляционные окружения остановятся и будут уничтожены, что приведёт к странным сообщениям об ошибках.
[[poudriere-initialization]]
=== Инициализация Jail и дерева портов
После настройки инициализируйте poudriere, чтобы он установил jail с требуемым деревом FreeBSD и деревом портов. Укажите имя для jail с помощью `-j`, а версию FreeBSD — с помощью `-v`. На системах под управлением FreeBSD/amd64 архитектуру можно задать с помощью `-a`, указав `i386` или `amd64`. По умолчанию используется архитектура, отображаемая командой `uname`.
[source, shell]
....
# 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
....
[source, shell]
....
# 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 руководства man:poudriere[8] после установки package:ports-mgmt/poudriere[] или package: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` (для портов с extref:{porters-handbook}flavors[FLAVORS] можно указать @FLAVOR):
[.programlisting]
....
editors/emacs
devel/git
devel/php-composer2@php82
ports-mgmt/pkg
...
....
Настраиваются параметры и зависимости для указанных портов:
[source, shell]
....
# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
Наконец, пакеты собираются и создаётся репозиторий пакетов:
[source, shell]
....
# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
Во время работы нажатие kbd:[Ctrl+t] отображает текущее состояние сборки. poudriere также создаёт файлы в `/poudriere/logs/bulk/jailname`, которые можно использовать с веб-сервером для отображения информации о сборке.
По завершении новые пакеты становятся доступными для установки из репозитория poudriere.
Для получения дополнительной информации об использовании poudriere см. man:poudriere[8] и основной веб-сайт: https://github.com/freebsd/poudriere/wiki[].
=== Настройка клиентов pkg для использования репозитория poudriere
Хотя можно использовать как пользовательский репозиторий вместе с официальным, иногда полезно отключить официальный репозиторий. Это делается путём создания конфигурационного файла, который переопределяет и отключает официальный конфигурационный файл. Создайте `/usr/local/etc/pkg/repos/FreeBSD.conf` со следующим содержимым:
[.programlisting]
....
FreeBSD: {
enabled: no
}
....
Обычно проще всего предоставлять доступ к репозиторию poudriere клиентским машинам через HTTP. Настройте веб-сервер для обслуживания каталога пакетов, например: `/usr/local/poudriere/data/packages/13amd64`, где `13amd64` — это название сборки.
Если URL репозитория пакетов: `https://pkg.example.com/13amd64`, то файл конфигурации репозитория в `/usr/local/etc/pkg/repos/custom.conf` будет выглядеть так:
[.programlisting]
....
custom: {
url: "https://pkg.example.com/13amd64",
enabled: yes,
}
....
Если нежелательно предоставлять доступ к репозиторию пакетов через интернет, можно использовать протокол `file://` для прямого указания на репозиторий:
[.programlisting]
....
custom: {
url: "file:///usr/local/poudriere/data/packages/11amd64",
enabled: yes,
}
....
[[ports-nextsteps]]
== Пост-установочные вопросы
Независимо от того, было ли программное обеспечение установлено из бинарного пакета или порта, большинство сторонних приложений требуют некоторой настройки после установки. Следующие команды и расположения могут помочь определить, что было установлено вместе с приложением.
* Большинство приложений устанавливают как минимум один конфигурационный файл по умолчанию в `/usr/local/etc`. В случаях, когда приложение имеет большое количество конфигурационных файлов, создаётся подкаталог для их хранения. Часто устанавливаются примеры конфигурационных файлов, которые имеют окончание, например, `.sample`. Конфигурационные файлы следует просмотреть и, возможно, отредактировать в соответствии с потребностями системы. Для редактирования файла-примера сначала скопируйте его без расширения `.sample`.
* Приложения, которые предоставляют документацию, устанавливают её в `/usr/local/share/doc`, а многие приложения также устанавливают страницы руководств. Перед продолжением следует ознакомиться с этой документацией.
* Некоторые приложения запускают службы, которые необходимо добавить в `/etc/rc.conf` перед запуском приложения. Обычно такие приложения устанавливают скрипт запуска в `/usr/local/etc/rc.d`. Дополнительную информацию можно найти в crossref:config[configtuning-starting-services,Запуск служб].
+
[NOTE]
====
По замыслу, приложения не запускают свои стартовые скрипты при установке, а также не выполняют скрипты остановки при удалении или обновлении. Это решение остаётся на усмотрение системного администратора.
====
* Пользователи man:csh[1] должны выполнить `rehash`, чтобы перестроить список известных двоичных файлов в `PATH` оболочки.
* Используйте `pkg info`, чтобы определить, какие файлы, man-страницы и бинарные файлы были установлены вместе с приложением.
[[ports-broken]]
== Работа с неработающими портами
Когда порт не собирается или не устанавливается, попробуйте следующее:
. Поищите, есть ли исправление для порта в базе данных link:https://www.FreeBSD.org/support/[отчётов о проблемах]. Если оно есть, применение предложенного исправления может решить проблему.
. Обратитесь к сопровождающему порта за помощью. Введите `make maintainer` в скелете портов или прочитайте `Makefile` порта, чтобы найти адрес электронной почты сопровождающего. Не забудьте включить вывод, предшествующий ошибке, в письмо сопровождающему.
+
[NOTE]
====
Некоторые порты поддерживаются не отдельными людьми, а группой сопровождающих, представленной extref:{mailing-list-faq}[рассылкой]. Многие, но не все, такие адреса выглядят как mailto:[email protected][[email protected]]. Учтите это при отправке письма.
В частности, порты, поддерживаемые mailto:[email protected][[email protected]], не курируются конкретным человеком. Вместо этого исправления и поддержка поступают от сообщества в целом, участники которого подписаны на этот список рассылки. Добровольцы всегда нужны!
====
+
Если на письмо не получен ответ, используйте Bugzilla для отправки отчёта об ошибке, следуя инструкциям в extref:{problem-reports}[Составление отчётов о проблемах в FreeBSD].
. Исправьте это! В extref:{porters-handbook}[Руководстве FreeBSD по созданию портов] содержится подробная информация об инфраструктуре портов, так что можно исправить случайно сломанный порт или даже предложить свой собственный! Установите пакет вместо порта по инструкции в разделе crossref:ports[pkgng-intro, Использование pkg для управления бинарными пакетами].