我的伺服器上安裝了 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-BerkelyDB
RHEL 中,在 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
在開始之前導出環境變量,但我認為這裡不需要。)