安裝了 3 個版本的 BerkelyDB

安裝了 3 個版本的 BerkelyDB

我的伺服器上安裝了 3 個版本的 BerkelyDB

以下2個版本

Package db4-4.3.29-10.el5_5.2.x86_64 
Package db4-4.3.29-10.el5_5.2.i386 

包含在 Centos 5 Distro 中

以及從位於此處的來源安裝的第三個版本

/usr/local/BerkeleyDB.4.5

(以及安裝在此處的所有 Berkeley 實用程式 /usr/local/BerkeleyDB.4.5/bin )

當我執行使用 Berkeley 的程式(我使用的是 ASSP 2.4.4)時,它可以看到並使用 BerkeleyDB 4.3.29 。這很糟糕,因為 ASSP 需要 Berkeley 版本 >= 4.5 。

如何設定預設安裝在 /usr/local/BerkeleyDB.4.5 而不是 4.3.29 中的 BerkeleyDB.4.5 ?

答案1

一般來說,如果您嘗試從套件(即預編譯的二進位)執行某些內容,您可以設定PATH和/或LD_LIBRARY_PATH,或使用chrpath來調整二進位檔案本身。如果你小心的話,沒有理由不能安裝多個版本的 BerkeleyDB。 (該configure腳本的設定使這變得簡單,並支援--program-suffix(和轉換),以便您可以更輕鬆地將版本化的二進位檔案保留在您的 PATH 中。)

然而 ASSP 是在 perl 中實現的,因此它將使用目前編譯的 perlBerkeleyDB.so函式庫,該函式庫將連結到它所針對的 Berkeley 版本。 (與許多使用 的軟體包不同DB::File,asspBerkeleyDB直接使用。)

你可以看到perl 使用什麼函式庫類似的東西:

perl -e 'print join "\n",@INC;' | xargs -i find {} -name BerkeleyDB.so

然後運行ldd找到的模組。

通常,當使用CentOS 時,您會進入以CentOS 軟體包為中心的世界(無論您是否喜歡),因此「正確」的解決方案是找到與您的CentOS 版本相符的ASSP 軟體包,或Berkeley RPM,其中也包含可用的perl BerkeleyDB.so,或升級 CentOS。


我避免在 CentOS 上部署服務因為包依賴問題。我從源代碼構建,但那是“老派”。 (如果不是透過 RPM 安裝軟體,可能會遇到有害影響的溫和讀者應該停止閱讀上面的內容。)

要手動修復此問題,您可以僅為ASSP 安裝Perl 的平行版本(潛在的維護問題,儘管上次我檢查CentOS 5.x 附帶了perl-5.8,它不會運行ASSP,所以您可能已經這樣做了) ;或者您可以按照以下說明僅升級 BerkelyDB 模組自述文件config.in,並在編譯前檢查/設定正確的路徑。此模組包含在 BerkeleyDB.4.5 原始碼存檔中,預設值為:

INCLUDE=/usr/local/BerkeleyDB/include
LIB=/usr/local/BerkeleyDB/lib

因此,只需添加一個符號連結/usr/local/BerkeleyDB/usr/local/BerkeleyDB.4.5並手動建立(或使用 CPAN 安裝/升級它,CPAN 將是最新的,它支援幾乎任何底層 bdb 版本)。

如果您升級 BerkeleyDB,則其他一些 Perl 腳本如果依賴它或其特定版本,則可能會遇到一些問題。據我所知,這不是一個常用的安裝模組,它不包含在普通的 perl 或 Berkeley db4 CentOS 軟體包中(它位於perl-BerkelyDBRHEL 中,在 CentOS 5.x 上從未見過)。

cd /usr/local/src/db-4.5.x       # or where ever you build
cd perl/BerkeleyDB
vi config.in                     # check INCLUDE and LIB [optional]
perl Makefile.pl                 # select the correct perl
make
make test && make install

然後重複上面的find/ldd說明以確認一切都符合預期。 (如果您有多個 perl,通常最好PERL在開始之前導出環境變量,但我認為這裡不需要。)

相關內容