Установлено 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

и 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.

Как установить BerkeleyDB.4.5 в качестве версии по умолчанию, установленной в /usr/local/BerkeleyDB.4.5, вместо 4.3.29?

решение1

Обычно, если вы пытаетесь запустить что-то из пакета (например, предварительно скомпилированные двоичные файлы), вы можете задать PATHи/или LD_LIBRARY_PATHили использовать chrpathдля настройки самих двоичных файлов. Если вы осторожны, нет причин, по которым вы не можете установить много версий BerkeleyDB. (Скрипт configureнастроен так, чтобы сделать это легко, и поддерживает --program-suffix(и преобразует), поэтому вам будет легче хранить версии двоичных файлов в вашем PATH.)

Однако ASSP реализован на Perl, поэтому он будет использовать текущую скомпилированную BerkeleyDB.soбиблиотеку Perl, которая будет связана с той библиотекой Berkeley, на которой она была собрана. (В отличие от многих пакетов, использующих DB::File, assp использует ее BerkeleyDBнапрямую.)

Ты можешь видетькакую библиотеку использует perlчто-то вроде:

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

затем запустите lddнайденный модуль(и).

Обычно при использовании CentOS вы соглашаетесь с миром пакетов CentOS (нравится вам это или нет), поэтому «правильным» решением будет найти пакет ASSP, соответствующий вашей версии CentOS, или пакет Berkeley RPM, который также включает в себя рабочий perl BerkeleyDB.so, или обновить CentOS.


Я избегаю развертывания служб на CentOSиз-заПроблемы с зависимостью пакетов. Я собираю из исходников, но это «старая школа». (Добрые читатели, которые могут столкнуться с пагубными эффектами при установке программного обеспечения не через RPM, должны прекратить читать выше.)

Чтобы исправить это вручную, вы можете либо установить параллельную версию perl только для ASSP (потенциальная головная боль при обслуживании, хотя в последний раз, когда я проверял, 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перед запуском, но я не думаю, что это необходимо здесь.)

Связанный контент