RPM Diz Objeto Compartilhado Está Ausente, Mas Eu Posso Encontrá-lo Com ls

2

Estou tendo problemas para instalar um openssh rpm que eu rolo hoje:

[root@local_host ]# rpm -i openssh-6.7p1-1.i386.rpm
error: Failed dependencies:
        libcrypto.so.1.0.0 is needed by openssh-6.7p1-1.i386

Huh? Isso é estranho:

[root@local_host ]# ls -l /lib/libcrypto*
lrwxrwxrwx 1 root root      19 Jan 20 15:18 /lib/libcrypto.so.1.0.0 -> libcrypto.so.1.0.1l
-rwxr-xr-x 1 root root 1815536 Jan 19 04:57 /lib/libcrypto.so.1.0.1l

Dependências do rpm parecem listar o mesmo arquivo que eu instalei:

[root@local_host ]# rpm -qpR openssh-6.7p1-1.i386.rpm
config(openssh) = 6.7p1-1
...
libcrypto.so.1.0.0

Eu posso forçar a instalação e funciona - é claro, já que a biblioteca necessária está instalada - mas, o que faria com que tudo ficasse todo instável?

Eu executei ldconfig pós-instalação do meu novo openssl (também enrolado à mão), então as bibliotecas deveriam estar visíveis para o sistema.

Box é o CentOS 5.4.

Informações adicionais

Por @nlu, verifiquei qual pacote possui o (s) arquivo (s) em questão. O arquivo que o ssh rpm quer é na verdade um link simbólico para o arquivo atual.

[root@local_host ~]# rpm -qf /lib/libcrypto.so.1.0.0
file /lib/libcrypto.so.1.0.0 is not owned by any package

[root@local_host ~]# rpm -qf /lib/libcrypto.so.1.0.1l
openssl-1.0.1l-1

Mas não aparece no rpm:

[root@local_host ~]# rpm -ql openssl-1.0.1l-1
...
/lib/libcrypto.so.1.0.1l
...

Então, eu fiz mais algum trabalho. Descobri como empacotar os links simbólicos no rpm, também fixei os nomes para refletir a instalação padrão do openssl e reaparecer o rpm. Instalado isso sem problema. Então, fui instalar o openssh e recebi exatamente o mesmo erro!

Na caixa, agora tenho:

[root@local_host ]# ls -l /lib/libcrypto*
lrwxrwxrwx 1 root root 27 Jan 21 14:16 /lib/libcrypto.so.1.0.0 -> /usr/lib/libcrypto.so.1.0.0
lrwxrwxrwx 1 root root 27 Jan 21 14:16 /lib/libcrypto.so.6 -> /usr/lib/libcrypto.so.1.0.0

[root@local_host ]# ls -l /usr/lib/libcrypto*
lrwxrwxrwx 1 root root      27 Jan 21 14:16 /usr/lib/libcrypto.so -> /usr/lib/libcrypto.so.1.0.0
-rwxr-xr-x 1 root root 1815536 Jan 21 05:43 /usr/lib/libcrypto.so.1.0.0

[root@local_host ]# rpm -ql openssl-1.0.1l
...
/lib/libcrypto.so.1.0.0
/lib/libcrypto.so.6
/usr/lib/libcrypto.so
/usr/lib/libcrypto.so.1.0.0

Tudo deve estar agora no lugar, eu deveria pensar? O que eu perdi?

    
por Jon 20.01.2015 / 22:38

2 respostas

0

Aha!

Eu adicionei:

Provides: libcrypto.so.1.0.0 libssl.so.1.0.0

para o arquivo de especificação, respun e instalado. AGORA .... o openssh instala sem perguntas!

A pergunta agora é .... POR QUE? Eu não vejo uma biblioteca ou pré-requisito no arquivo openssh.spec.

Atualizar

Obrigado ao Mark por me colocar nos bits requeridos ... descobri que eu tinha o atributo AutoReqProv definido como Não ... deveria ter sido sim. Funciona como deveria agora (não é necessário adicionar a linha Fornece acima), obrigado!

    
por 21.01.2015 / 20:56
2

O conteúdo do banco de dados RPM e o do sistema de arquivos são independentes.

Para provar que o libcrypto está instalado a partir de um RPM, você deve verificar se os arquivos pertencem ao rpm:

rpm -qf /lib/libcrypto.so.1.0.0
rpm -qf /lib/libcrypto.so.1.0.1l

Além disso, você pode fazer

rpm -ql {RPM of libcrypto}
    
por 20.01.2015 / 23:20