安装了 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在开始之前导出环境变量,但我认为这里不需要。)

相关内容