
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 不同。沒有這樣的「建議」。您寧願製作最小可行的包,然後使用選項在連接埠中選擇可選的依賴項。 「替代方案」將在連接埠中再次透過選項進行處理。您的範例將是一個單選組,以允許curl
或wget
。為了將其反映在您的二進制包中,您需要創建風味。
如果您想建立自己的儲存庫或將其作為 CI 管道的一部分執行此操作,那麼您應該看看普迪埃這與官方儲存庫使用的建置工具相同。