BerkelyDBの3つのバージョンがインストールされている

BerkelyDBの3つのバージョンがインストールされている

私のサーバーには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ディストリビューションに含まれる

そして、ここにあるソースからインストールされた3番目のバージョン

/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 が必要なので、これは問題です。

4.3.29 ではなく、 /usr/local/BerkeleyDB.4.5 にインストールされた BerkeleyDB.4.5 をデフォルトとして設定するにはどうすればよいですか?

答え1

一般的に、パッケージから何かを実行しようとしている場合 (つまり、コンパイル済みのバイナリ)、PATHおよび/または を設定するLD_LIBRARY_PATHか、chrpathを使用してバイナリ自体を微調整することができます。注意していれば、BerkeleyDB の複数のバージョンをインストールできない理由はありません。 (スクリプトはconfigureこれを簡単にできるように設定されており、サポート--program-suffix(および変換) されているため、バージョン管理されたバイナリを PATH に簡単に保存できます。)

BerkeleyDB.soただし、ASSP は perl で実装されているため、ビルドに使用された Berkeley にリンクされる、現在コンパイルされている perl ライブラリを使用します。( を使用する多くのパッケージとは異なりDB::File、 assp は をBerkeleyDB直接使用します。)

見ることができますperlが使用しているライブラリ次のような内容です:

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

ldd見つかったモジュールに対して実行します。

通常、CentOS を使用する場合は、CentOS パッケージ中心の世界に身を置くことになります (好むと好まざるとにかかわらず)。そのため、「正しい」解決策は、CentOS バージョンに一致する ASSP パッケージ、または動作する perl も含まれている Berkeley RPM を見つけるかBerkeleyDB.so、CentOS をアップグレードすることです。


CentOSにサービスをデプロイするのは避けるのためパッケージの依存関係の問題。私はソースからビルドしますが、それは「古いやり方」です。(RPM 以外でソフトウェアをインストールすると有害な影響が出る可能性がある優しい読者は、上記の部分を読むのをやめるべきです。)

これを手動で修正するには、ASSP専用のPerlの並列バージョンをインストールするか(メンテナンス上の問題が発生する可能性はありますが、CentOS 5.xにはASSPを実行できないperl-5.8が付属していたため、すでに実行している可能性があります)、または、READMEコンパイルする前に、正しいパスを確認/設定してください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 スクリプトが BerkeleyDB またはその特定のバージョンに依存している場合に問題が発生するリスクがわずかにあります。これは一般的にインストールされるモジュールではなく、私が知る限り、通常の 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開始する前に環境変数をエクスポートすることをお勧めしますが、ここでは必要ないと思います。)

関連情報