![FreeBSD .pkg 中推荐的和备用的依赖项](https://linux22.com/image/230963/FreeBSD%20.pkg%20%E4%B8%AD%E6%8E%A8%E8%8D%90%E7%9A%84%E5%92%8C%E5%A4%87%E7%94%A8%E7%9A%84%E4%BE%9D%E8%B5%96%E9%A1%B9.png)
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}
这将导致包管理器检查所需版本中的两个依赖项是否都存在,如果缺少,则添加它们或中止并出现错误,除非被告知忽略依赖项。
另一方面,Linux 上的 Debian 风格的软件包 (.deb) 提供以下功能:
- 建议:这些向包管理器表明,只有软件的某些功能依赖于推荐列出的包(而如果缺少依赖项,则该包几乎毫无用处)。根据包管理器的配置方式,建议可以被视为依赖项,也可以在没有它们的情况下安装包。
- 替代方案:例如,一个包可以依赖于
curl | wget
,在这种情况下,任何一个包的存在都将满足该特定的依赖关系,因为软件在运行时会发现安装了这两个包中的哪一个,并与可用的任何包一起工作。
.pkg 也提供这些功能吗?如何在清单中指定这些?
答案1
FreeBSD 软件包是二进制软件包(请参见包装(7))。虽然理论上您可以创建一个自下而上的二进制包,但这将是非常不寻常的。你宁愿从一个开始端口(7)基于源的“端口”并将其用作包的来源。即使您只有二进制源。
这在 中得到了很好的记录FreeBSD 波特手册。
如果需要,您可以创建自己的本地包。如果您有一个普通的 FreeBSD 系统,那么二进制包将从默认的 FreeBSD 存储库安装。这些包都是由 ports 树组成的默认配置选项。
您可以使用命令行工具,但一个简单的快捷方式是浏览新鲜港。如果我们看一下绑定工具我们看到以下默认值:
===> 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
.
如果您从头开始进行移植/打包,那么您可以了解如何设置生成文件选项。请注意,它们也可以分组为单选选项(与上面的 GSSAPI 一样)。
历史上你做了从端口处理不变量。但更现代的方法是口味。这尤其常见于Python但请记住,在版本选择尽可能。
该架构与 Debian 不同。没有这样的“建议”。您宁愿制作最小可行的包,然后使用选项在端口中选择可选的依赖项。 “替代方案”将在端口中再次通过选项进行处理。然后,您的示例将使用一个单选组来允许curl
或wget
。为了将其反映在您的二进制包中,您需要创建风味。
如果您想创建自己的存储库或将其作为 CI 管道的一部分执行此操作,那么您应该看看普迪埃这与官方存储库使用的构建工具相同。