FreeBSD .pkg 中推荐的和备用的依赖项

FreeBSD .pkg 中推荐的和备用的依赖项

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

历史上你做了从端口处理不变量。但更现代的方法是口味。这尤其常见于Python但请记住,在版本选择尽可能。

该架构与 Debian 不同。没有这样的“建议”。您宁愿制作最小可行的包,然后使用选项在端口中选择可选的依赖项。 “替代方案”将在端口中再次通过选项进行处理。然后,您的示例将使用一个单选组来允许curlwget。为了将其反映在您的二进制包中,您需要创建风味。

如果您想创建自己的存储库或将其作为 CI 管道的一部分执行此操作,那么您应该看看普迪埃这与官方存储库使用的构建工具相同。

相关内容