Package-Management

是否可以設置特定版本的包,哪個主包取決於?

  • March 21, 2019

我們在 FreeBSD 10.3 上有開發環境。我聽說 FreeBSD 以這種方式管理包依賴關係,它總是尋找所有包的最新版本,主包依賴於哪個包。它看起來像真的。所以,我的問題是:

  1. 這是真的?有官方文件可以證明嗎?
  2. 如何克服這個問題的最好方法?

FreeBSD 如何建構軟體包

FreeBSD 項目過去只為發行版建構包,偶爾也為 STABLE 分支建構包。舊的包建構器使用名為 Portbuild 的分佈式系統。它將使用一個由 2GB-4GB 機器組成的大型集群來建構軟體包。這容易出錯且速度慢,主要是由於機器較舊。完整的建構仍可能需要一周時間。今天的包是使用使用 Poudriere 的單個大型機器建構的。(來自Brian Drewery 的網頁)。

另請參閱:如何在 FreeBSD 上更新軟體包和埠的組合

FreeBSD 與 Solaris 和 Windows 一樣具有不斷發展的 ABI(和 API),而 Linux 具有穩定的(停滯的?)ABI(和 API),因此對於 Linux,舊二進製文件仍將在較新的作業系統版本上執行,而對於非 Linux 作業系統,這是’ t 總是這樣(有時是這樣)。

使用pkg lock仍然會導致頭疼,雖然當您嘗試升級時它會鎖定pkg upgrade(提供警告)使用它仍然假定更高編號的版本更好(理想)並且這是您想要做的事情 - 所以它要求許可,你可以允許,但它不能保證其他東西不會被破壞。請參閱上面的 URL,或此討論:“您是否希望 FreeBSD 鎖定通過 pkg 分發的二進制軟體包版本以獲取 OS 版本? ”。

如果某個包被鎖定,有時您必須授予解鎖它並進行升級的權限,而這將適用於一個包(及其所有依賴項),但不能保證其他東西不會與新庫不兼容(因此也需要升級,如果目前可用的話)。

Brian Drewery 的部落格:“ FreeBSD 雜誌:Poudriere ”認為:

“停止在您的伺服器上使用 portmaster、portupgrade 和埠並切換到軟體包。

使用 Poudriere 設置您自己的包建構只需要幾分鐘,將來會為您節省大量時間。

如果您正在維護多個 FreeBSD 系統並且還沒有使用軟體包,那麼您應該這樣做。我只維護了 20 台伺服器,但是在每個系統上建構埠花費了我很多時間,並且浪費了生產機器上的資源。在多台伺服器上建構埠時,很容易使它們的選項或版本不同步。通過在一個系統上建構一次軟體包,我減輕了系統的負載,減少了我必須做的工作量,並使我的所有系統保持一致。我只需要在建構系統上處理它,而不是在每個系統上處理相同的故障。

但是,結…

為什麼你需要偏離官方包?埠框架為埠提供選項支持以更改建構時配置。並非所有應用程序都支持執行時配置。某些應用程序必鬚根據啟用的功能進行不同的編譯。其他人可以選擇只是減少預設埠中的功能和依賴項的數量。對於伺服器管理員來說,這可能很快導致發現某些預設包不符合他們的要求。

所以 …

有幾種方法可以獲得自定義包。Pkg 支持使用多個儲存庫。它可以設置為使用官方 FreeBSD 儲存庫作為主要儲存庫,自定義儲存庫作為輔助儲存庫。Pkg 不受它可以跟踪的儲存庫數量的限制,並且它們可以被重新排序以獲得優先級。多個儲存庫的問題是目前可能難以維護。當 Pkg 檢測到已安裝的包與它正在跟踪的儲存庫具有不同的選項或依賴項時,將從可能的任何遠端版本重新安裝該包。您可以在升級期間使用 pkg lock PKGNAME 和 pkg unlock PKGNAME 鎖定軟體包,或者使用 pkg annotate -A PKGNAME repository REPONAME 將其綁定到特定儲存庫。還有一個微妙的問題是保持自定義儲存庫的埠樹與 FreeBSD 軟體包同步。由於軟體包是從每週拍攝一次的埠樹快照建構的,因此如果您的自定義儲存庫不匹配,則可能會導致衝突。使用您想要的選項建構您所需要的整個軟體包集要簡單得多。

解決方案:

Poudriere(大致發音為 poo-dree-year,法語為“粉桶”)被編寫為 Tinderbox 的更快、更簡單的替代品。它由 Pkg 作者 Baptiste Daroussin 編寫,現在主要由我與 Baptiste 和其他一些貢獻者一起維護。它已迅速成為事實上的 FreeBSD 埠測試和包建構工具。它是官方的建構集群工具,也被 FreeBSD Ports 項目用於測試所謂的“exp-runs”中的全面更新檔。它是用 POSIX shell 編寫的,並且正在慢慢轉移到 C 組件中。與 Tinderbox 不同,它沒有依賴項,也不需要數據庫. 它已被極大地優化為在所有操作中高度並行。它使用監獄在非常嚴格的條件下在沙盒環境中建構埠。使用一個簡單的命令即可創建監獄。在建構過程中,會自動為每個用於為埠提供一個乾淨的建構位置的 CPU 複製監獄。”。

使用poudriere設置您自己的儲存庫可以讓您擁有埠的靈活性和軟體包的輕鬆管理。

引用自:https://unix.stackexchange.com/questions/346524