
Пакет FreeBSD обычно указывает зависимости в своем манифесте следующим образом:
deps:
# python39, version 3.9 or higher
python39: {origin: lang/python39, version: 3.9}
# bind-tools, any version
bind-tools: {origin: dns/bind-tools}
Это заставит менеджер пакетов проверить наличие обеих зависимостей в нужной версии и, если они отсутствуют, добавить их или прервать работу с ошибкой, если только не указано игнорировать зависимости.
С другой стороны, пакеты в стиле Debian (.deb) в Linux предлагают такие функции, как:
- Рекомендации: они указывают менеджеру пакетов, что только определенные функции программного обеспечения зависят от пакетов, перечисленных как рекомендуемые (тогда как пакет в основном бесполезен, если зависимость отсутствует). В зависимости от того, как настроен менеджер пакетов, рекомендации могут рассматриваться как зависимости или пакет может быть установлен без них.
- Альтернативы: например, пакет может зависеть от
curl | wget
, и в этом случае наличие любого из этих пакетов по отдельности удовлетворит эту конкретную зависимость, поскольку программное обеспечение во время выполнения определяет, какой из двух пакетов установлен, и работает с тем, что доступно.
Предлагает ли .pkg эти функции? Как это будет указано в манифесте?
решение1
Пакеты FreeBSD — это двоичные пакеты (см.пакет(7)). Хотя теоретически вы можете создать двоичный пакет снизу вверх, это будет очень необычно. Вы бы предпочли начать спорты(7)"порт" на основе источника и используйте его как источник вашего пакета. Даже если у вас есть только бинарный источник.
Это очень хорошо документировано вСправочник портировщика FreeBSD.
Вы можете создать свои собственные локальные пакеты, если хотите. Если у вас ванильная система FreeBSD, то бинарные пакеты устанавливаются из репозиториев FreeBSD по умолчанию. Все эти пакеты сделаны из дерева портов спо умолчаниюпараметры конфигурации.
Вы можете использовать инструменты командной строки, но проще всего будет просмотретьФрешпортс. Если мы посмотрим наинструменты для связываниямы видим следующие значения по умолчанию:
===> The following configuration options are available for bind-tools-9.18.24:
FIXED_RRSET=off: Enable fixed rrset ordering
IDN=on: International Domain Names support
JSON=on: JSON file/format/parser support
LARGE_FILE=off: 64-bit file support
====> GSSAPI Security API support: you have to select exactly one of them
GSSAPI_BASE=off: Using Heimdal in base (nsupdate is broken)
GSSAPI_HEIMDAL=off: Using security/heimdal (nsupdate is broken)
GSSAPI_MIT=off: Using security/krb5
GSSAPI_NONE=on: Disable
===> Use 'make config' to modify these settings
Так что если вы создаете свой порт локально, вы можете изменить эти настройки с помощью make config
. Если вы просто хотите использовать его локально, вы можете сделать make install
. Но если вы хотите иметь бинарный пакет этого варианта, то просто сделайте make package
.
Если вы создаете порт/пакет с нуля, то вы можете увидеть, как настроитьпараметры makefile. Обратите внимание, что их также можно сгруппировать как варианты радио (как в GSSAPI выше).
Общие общие зависимости обычно обрабатываются с помощьюИСПОЛЬЗУЕТ макросытакой какПитон.
Исторически вы сделалиподчиненные портыдля обработки инвариантов. Но более современный подход заключается в том, чтобы иметьвкусы. Это особенно распространено средиПитонно, пожалуйста, помните, что нужно быть таким же либеральным ввыбор версиинасколько это возможно.
Архитектура тогда отличается от Debian. Нет никаких "рекомендаций" как таковых. Вы бы лучше сделали минимальный жизнеспособный пакет, а затем сделали бы необязательные зависимости выбираемыми в порту с помощью параметров. "Альтернативы" будут обрабатываться в порту снова с параметрами. Ваш пример тогда был бы с радиогруппой, чтобы разрешить либо curl
или wget
. Чтобы отразить это в ваших бинарных пакетах, вы затем создали бы разновидности.
Если вы хотите создать свой собственный репозиторий или делаете это как часть конвейера непрерывной интеграции, то вам следует взглянуть наПудьерЭто тот же инструмент, который используется для официальных репозиториев.