使用 pkg_add 處理 FreeBSD 軟體套件升級

使用 pkg_add 處理 FreeBSD 軟體套件升級

我正在嘗試使用 FreeBSD 的pkg_add命令在多台機器上建置一次安裝的場景中安裝和升級二進位套件。安裝新軟體包時它運作良好,但升級讓我感到困惑。例如,如果我想升級一個包依賴於透過另一個包,我不能直接安裝它:

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

此時,如果我傳遞-fpkg_delete命令,我可以刪除舊版本的套件:

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

但是...這就是殺手...現在依賴資訊消失了!我可以安裝升級:

# pkg_add /path/to/somepackage-2.0.tbz

現在嘗試刪除它將會成功,不會出現任何錯誤:

# pkg_delete somepackage-2.0

我如何優雅地處理這個問題(其中“優雅地”意味著“以一種保留依賴關係資訊而不需要我重建/重新安裝和整個依賴鏈的方式”)。

謝謝!

答案1

正如您所發現的,pkg_add無法正常升級連接埠。然而,這個portupgrade包很好地做到了這一點,並且是我使用和推薦的方法(如果您不喜歡這種方法,還有其他可用的方法)。

安裝連接埠後,您只需運行即可portupgrade -aPP,它將使用軟體包升級系統上安裝的所有連接埠。如果您不想更新任何端口,可以運行portupgrade -RPP [category/port]升級特定端口及其依賴的端口。不帶參數運行程序將升級屬於當前目錄的連接埠(cd /usr/ports/security/openssl ; portupgrade即升級openssl,如果沒有選項,-PP它將從來源建置連接埠);如果您不在連接埠目錄中,它將顯示幫助(與選項相同-h)。

編輯:
預設情況下,portupgrade 將安裝環境變數定義的目錄中存在的軟體包PKG_PATH(預設為$PACKAGES/All$PACKAGES預設為$PORTSDIR/packages;因此預設路徑為/usr/ports/packages/All)。

如果它們不存在,它將從$PKG_SITES(採用帶有子資料夾的 URILatestAll無預設值)或$PACKAGEROOT(採用具有正常鏡像路徑的 URI;預設值為"ftp://ftp.freebsd.org")下載軟體包(按偏好)。

一種簡單的方法是使用一台電腦來建置/快取將安裝在另一台電腦上的套件。

  • 您可以從 ports 樹make package中的 port 目錄中建立軟體包(這也將安裝 port)。
  • 您可以使用portupgrade升級一台機器並快取軟體包檔案以在其他機器上使用,上述命令會將軟體包檔案緩存在預設目錄中(請參閱上文)。
  • 您可以使用 portupgrade 僅獲取軟體包,而不使用portupgrade -aPPF或來安裝它們portupgrade -RPPF [category/port]

取得快取的套件檔案後,您可以透過 NFS、FTP、HTTP 等共用該目錄;只要這些文件可以從其他機器存取。使用適當的值設定PACKAGESPKG_SITE以指向快取伺服器。執行典型的portupgrade命令,它應該從快取伺服器中提取軟體包並安裝它們。

注意:所有伺服器上的連接埠樹必須是最新的才能portupgrade正確運作(它將嘗試更新到本機連接埠樹中的任何版本)。如果您要在所有電腦上安裝相同的連接埠/軟體包,那麼共用一個伺服器/usr/ports目錄(例如透過 NFS)並將其安裝在所有其他伺服器上可能是最簡單的方法。

答案2

也許pkg_replace正是您正在尋找的。

我現在用它戒菸一段時間了。我的一台 FreeBSD 機器充當建置伺服器並portmaster為其他機器建置(使用)所有套件。我正在使用pkg_replace在所有其他計算機上安裝這些預構建包。

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

答案3

或者您可以依賴 Portsnap 或 CVSup,如下所述:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

相關內容