3 versões do BerkelyDB instaladas

1

Eu tenho 3 versões do BerkelyDB instalado 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 no Centos 5 Distro

e uma terceira versão instalada a partir da fonte localizada aqui

/usr/local/BerkeleyDB.4.5

(e todo o utilitário Berkeley instalado aqui /usr/local/BerkeleyDB.4.5/bin)

Quando executo um programa que usa Berkeley (estou usando o ASSP 2.4.4) ele pode ver e use o 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?

    
por gr68 29.01.2015 / 08:15

1 resposta

0

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á motivo para não ter muitas versões do BerkeleyDB instaladas. (O script configure está configurado para tornar isso fácil e suporta --program-suffix (e transformar) para que você possa manter mais facilmente os binários com versão em seu PATH.)

No entanto, o ASSP é implementado no perl, portanto, ele usará a biblioteca perl BerkeleyDB.so compilada atual, que será vinculada ao Berkeley em que foi construída. (Ao contrário de muitos pacotes que usam DB::File , o assp usa BerkeleyDB diretamente.)

Você pode ver qual biblioteca o perl está usando com algo como:

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

execute ldd no (s) módulo (s) encontrado (s).

Normalmente, ao usar o CentOS, você compra no mundo centrado em pacotes do CentOS (quer você goste ou não), então as soluções "corretas" são encontrar um pacote ASSP que combine com sua versão do CentOS, ou um Berkeley RPM que também inclui um perl de trabalho BerkeleyDB.so ou atualiza o CentOS.

Evito implantar serviços no CentOS devido a problemas de dependência de pacotes. Eu construo a partir da fonte, mas isso é "old school". (Leitores gentis que podem experimentar efeitos deletérios quando o software é instalado, a não ser através de RPMs, devem 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 o perl-5.8 que não executará o ASSP. feito isso); ou você pode atualizar apenas o seu módulo BerkelyDB seguindo as instruções no README e verificar / definir os caminhos corretos em config.in antes de compilar. Este módulo é incluído no arquivo de origem BerkeleyDB.4.5, os padrões são:

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

Portanto, 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, ele tem suporte para praticamente qualquer versão do bdb subjacente).

Se você atualizar o BerkeleyDB, correrá um pequeno risco de alguns outros scripts perl terem problemas se contarem com ele ou com uma versão específica dele. Este não é um módulo comumente instalado, tanto quanto eu posso dizer, não está incluído nos pacotes Perl normais ou Berkeley db4 CentOS (está em perl-BerkelyDB no RHEL, nunca o viu 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ê tem mais de um perl, geralmente é uma boa idéia exportar a variável de ambiente PERL antes de iniciar, mas não acho que seja necessário aqui.)

    
por 29.01.2015 / 13:01