3 Versionen von BerkelyDB installiert

3 Versionen von BerkelyDB installiert

Ich habe 3 Versionen von BerkelyDB auf meinem Server installiert

folgende 2 Versionen

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

die in der Centos 5 Distro enthalten sind

und eine dritte Version aus der Quelle hier installiert

/usr/local/BerkeleyDB.4.5

(und alle Berkeley-Dienstprogramme sind hier installiert /usr/local/BerkeleyDB.4.5/bin )

Wenn ich ein Programm ausführe, das Berkeley verwendet (ich verwende ASSP 2.4.4), kann es BerkeleyDB 4.3.29 sehen und verwenden. Das ist schlecht, weil ASSP eine Berkeley-Version >= 4.5 benötigt.

Wie kann ich BerkeleyDB.4.5 als Standard festlegen, das in /usr/local/BerkeleyDB.4.5 anstelle von 4.3.29 installiert ist?

Antwort1

Wenn Sie versuchen, etwas aus einem Paket (d. h. vorkompilierte Binärdateien) auszuführen, können Sie im Allgemeinen PATHund/oder festlegen LD_LIBRARY_PATHoder verwenden, chrpathum die Binärdateien selbst zu optimieren. Wenn Sie vorsichtig sind, gibt es keinen Grund, warum Sie nicht mehrere Versionen von BerkeleyDB installiert haben können. (Das configureSkript ist so eingerichtet, dass dies einfach ist, und unterstützt --program-suffix(und transformiert), sodass Sie versionierte Binärdateien einfacher in Ihrem PATH behalten können.)

ASSP ist jedoch in Perl implementiert, daher wird die aktuell kompilierte Perl- BerkeleyDB.soBibliothek verwendet, die mit dem Berkeley verknüpft wird, mit dem sie erstellt wurde. (Im Gegensatz zu vielen Paketen, die verwenden DB::File, verwendet assp BerkeleyDBdirekt.)

Du kannst sehenwelche Bibliothek Perl verwendetmit etwas wie:

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

Führen Sie es dann lddauf den gefundenen Modulen aus.

Normalerweise entscheiden Sie sich bei der Verwendung von CentOS für die paketzentrierte Welt von CentOS (ob Sie es wollen oder nicht). Die „richtigen“ Lösungen bestehen also darin, ein ASSP-Paket zu finden, das zu Ihrer CentOS-Version passt, oder ein Berkeley-RPM, das auch ein funktionierendes Perl enthält BerkeleyDB.so, oder ein Upgrade von CentOS durchzuführen.


Ich vermeide die Bereitstellung von Diensten auf CentOSwegenProbleme mit Paketabhängigkeiten. Ich baue aus dem Quellcode, aber das ist „altmodisch“. (Leser, die möglicherweise schädliche Auswirkungen erleben, wenn Software anders als über RPMs installiert wird, sollten mit dem Lesen oberhalb der Zeile aufgehört haben.)

Um dies manuell zu beheben, können Sie entweder eine parallele Version von Perl nur für ASSP installieren (ein potenzieller Wartungsaufwand, obwohl CentOS 5.x meines Wissens nach mit Perl-5.8 ausgeliefert wurde, das ASSP nicht ausführen kann, sodass Sie dies möglicherweise bereits getan haben); oder Sie können nur Ihr BerkelyDB-Modul aktualisieren, indem Sie den Anweisungen in derLiesmich, und überprüfen/setzen Sie die korrekten Pfade config.invor dem Kompilieren ein. Dieses Modul ist im Quellarchiv von BerkeleyDB.4.5 enthalten, die Standardeinstellungen sind:

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

Fügen Sie also einfach einen symbolischen Link /usr/local/BerkeleyDB→ hinzu /usr/local/BerkeleyDB.4.5und erstellen Sie es manuell (oder verwenden Sie CPAN zur Installation/Aktualisierung. Die CPAN-Version ist jedoch die neueste und unterstützt praktisch jede zugrunde liegende BDB-Version).

Wenn Sie BerkeleyDB aktualisieren, besteht ein geringes Risiko, dass einige andere Perl-Skripte Probleme haben, wenn sie darauf oder auf eine bestimmte Version davon angewiesen sind. Dies ist kein häufig installiertes Modul, soweit ich weiß, ist es weder in den normalen Perl- noch in den Berkeley db4 CentOS-Paketen enthalten (es ist in perl-BerkelyDBRHEL enthalten, auf CentOS 5.x habe ich es nie gesehen).

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

Wiederholen Sie dann die obigen find/ lddAnweisungen, um zu bestätigen, dass alles wie erwartet ist. (Wenn Sie mehr als ein Perl haben, ist es normalerweise eine gute Idee, die Umgebungsvariable PERLvor dem Start zu exportieren, aber ich glaube nicht, dass das hier nötig ist.)

verwandte Informationen