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 管道的一部分執行此操作,那麼您應該看看普迪埃這與官方儲存庫使用的建置工具相同。

相關內容