problema de dependência do YUM, mesmo que a biblioteca esteja instalada

4

Nós construímos nossos próprios pacotes php e mysql a partir do código-fonte, este é para o lançamento do php-5.4.10, e hospedamos estes em nosso próprio repositório. Vamos chamar este pacote de custom-php e custom-mysql (-libs & -server)

Quando eu faço um yum instalo o custom-php em um servidor, o yum lista um problema de dependência:

--> Finished Dependency Resolution
Error: Package: custom-php-1.1.x86_64 (php)
           Requires: libmysqlclient.so.18(libmysqlclient_16)(64bit)
Error: Package: custom-php-1.1.x86_64 (php)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

O arquivo libmysqlclient.so.18 é fornecido pelo custom-mysql-libs, listado em Requer no arquivo de especificação do custom-php. Mesmo que eu instale o custom-mysql-libs manualmente antes de emitir o yum install custom-php, eu ainda recebo o erro acima.

Nosso custom-mysql-libs é construído a partir do código fonte do mysql e fornece o libmysqlclient.so:

$ rpm -qlp custom-mysql-libs-1.0.x86_64.rpm 
/custom/lib64/libmysqlclient.so
/custom/lib64/libmysqlclient.so.18
/custom/lib64/libmysqlclient.so.18.0.0
....
$ 

Conforme instalamos as bibliotecas em um local diferente, o custom-mysql-libs emite um ldconfig com o caminho especificado em um arquivo em /etc/ld.so.conf.d/ após a conclusão. Eu verifiquei que as bibliotecas são visíveis com um ldconfig -v

# ldconfig -v
...
/custom/lib64:
        libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
...
#

O Yum também encontra a biblioteca e o pacote:

# yum whatprovides */libmysqlclient.so.18
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
custom-mysql-libs-1.0.x86_64 : Custom MySQL libraries
Repo        : custom
Matched from:
Filename    : /custom/lib64/libmysqlclient.so.18

custom-mysql-libs-1.0.x86_64 : Custom MySQL libraries
Repo        : installed
Matched from:
Filename    : /custom/lib64/libmysqlclient.so.18

Qualquer ajuda é apreciada. Obrigado!

    
por Scott 26.12.2012 / 05:33

3 respostas

4

O

rpm não sabe nada sobre sistemas de arquivos locais. Só procura em seu próprio banco de dados o que está no sistema. No seu caso, esse é um local não padrão para colocar a biblioteca. Geralmente, o local padrão está em /usr/lib64/mysql/ e o seu está em / custom, então o rpm não está encontrando onde deveria estar.

Aqui estão duas opções ...

1) reconstrua o personalizado adicionando alguns symlinks e isso pode funcionar (realmente não testado)

2) Força a instalação com o sinalizador --no-deps e crie um link simbólico para os arquivos mysqllibrary de / custom para / usr / lib64 / mysql /

Eu não acho que haja algum comando mágico que possamos lhe dar para que ele funcione como você está esperando.

    
por 26.12.2012 / 05:54
2

O yum e o rpm não conseguem rastrear nada que você faz atrás de si. Assim, se você instalar coisas fora das distribuições de pacotes padrão, esses ajudantes legais, como o yum, não têm programação suficiente para antecipar isso. Você terá que assumir muito mais responsabilidade pelo manuseio manual de erros como este.

Geralmente, o que eu faço é tentar não ignorar os sistemas e usar o sistema de empacotamento tanto quanto possível. Como se eu reconstruísse um pacote para as minhas especificações, eu baixei o código fonte do pacote e refaça um novo pacote depois de fazer as modificações.

    
por 26.12.2012 / 08:01
0

Temos um problema semelhante com os RPMs de terceiros que instalam bibliotecas em locais não padrão. Você pode desativar o processamento automático de dependências em seu arquivo de especificações e, em seguida, listar suas dependências por nome de pacote. Por exemplo, no seu arquivo de especificação custom-php, adicione:

AutoReqProv: no
Requires: custom-mysql

Não se esqueça de adicionar outras dependências que você possa precisar também.

    
por 02.08.2013 / 00:56