Tenho 3 versões do BerkelyDB instaladas no meu servidor
seguindo 2 versões
Package db4-4.3.29-10.el5_5.2.x86_64
Package db4-4.3.29-10.el5_5.2.i386
que estão incluídos na Distro Centos 5
e uma terceira versão instalada a partir da fonte localizada aqui
/usr/local/BerkeleyDB.4.5
(e todos os utilitários Berkeley instalados aqui /usr/local/BerkeleyDB.4.5/bin )
Quando executo um programa que usa Berkeley (estou usando ASSP 2.4.4), ele pode ver e usar BerkeleyDB 4.3.29 . Isso é ruim porque o ASSP precisa da versão Berkeley >= 4.5 .
Como posso definir como padrão BerkeleyDB.4.5 instalado em /usr/local/BerkeleyDB.4.5 em vez de 4.3.29 ?
Responder1
Geralmente, se você está tentando executar algo de um pacote (ou seja, binários pré-compilados), você pode definir PATH
e/ou LD_LIBRARY_PATH
, ou usar chrpath
para ajustar os próprios binários. Se você for cuidadoso, não há razão para não poder ter muitas versões do BerkeleyDB instaladas. (O configure
script é configurado para facilitar isso e oferece suporte --program-suffix
(e transformação) para que você possa manter binários versionados com mais facilidade em seu PATH.)
No entanto, o ASSP é implementado em perl, portanto, ele usará a BerkeleyDB.so
biblioteca perl compilada atual, que será vinculada a qualquer Berkeley em que foi construída. (Ao contrário de muitos pacotes que usam DB::File
, o assp usa BerkeleyDB
diretamente.)
Você pode verqual biblioteca perl está usandocom algo como:
perl -e 'print join "\n",@INC;' | xargs -i find {} -name BerkeleyDB.so
em seguida, execute ldd
nos módulos encontrados.
Normalmente, ao usar o CentOS, você entra no mundo centrado no pacote do CentOS (goste ou não), então as soluções "corretas" são encontrar um pacote ASSP que corresponda à sua versão do CentOS ou um Berkeley RPM que também inclua um pacote funcional perl BerkeleyDB.so
ou atualize o CentOS.
Evito implantar serviços no CentOSpor causa deproblemas de dependência de pacote. Eu construo a partir do código-fonte, mas isso é "old school". (Leitores gentis que podem experimentar efeitos deletérios quando o software é instalado de outra forma que não via RPMs deveriam ter parado de ler acima da linha.)
Para corrigir isso manualmente, você pode instalar uma versão paralela do perl apenas para ASSP (uma possível dor de cabeça de manutenção, embora da última vez que verifiquei o CentOS 5.x veio com perl-5.8 que não executa ASSP, então você já deve ter feito isso) ; ou você pode atualizar apenas seu módulo BerkelyDB seguindo as instruções noLeia-mee verifique/defina os caminhos corretos config.in
antes de compilar. Este módulo está incluído no arquivo fonte BerkeleyDB.4.5, os padrões são:
INCLUDE=/usr/local/BerkeleyDB/include
LIB=/usr/local/BerkeleyDB/lib
Então, basta adicionar um link simbólico /usr/local/BerkeleyDB
→ /usr/local/BerkeleyDB.4.5
e construir manualmente (ou usar o CPAN para instalá-lo/atualizá-lo, o CPAN será o mais recente, mas tem suporte para praticamente qualquer versão bdb subjacente).
Se você atualizar o BerkeleyDB, você corre um pequeno risco de alguns outros scripts Perl terem problemas se dependerem dele ou de uma versão específica dele. Este não é um módulo comumente instalado, até onde eu sei, ele não está incluído nos pacotes Perl normais ou Berkeley db4 CentOS (está no perl-BerkelyDB
RHEL, nunca o vi no 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
Em seguida, repita as instruções find
/ ldd
acima para confirmar que tudo está conforme o esperado. (Se você tiver mais de um perl, geralmente é uma boa ideia exportar a variável de ambiente PERL
antes de começar, mas não acho que seja necessário aqui.)