Fazer RPM satisfazer os requisitos de dependência de outros pacotes instalados

4

Então, estou instalando um aplicativo java que eu escrevi e que usa o jnetpcap. Isso requer libpcap de pelo menos v1.0.0. Meu CentOS 5.8 possui apenas a libpcap 0.9.4, que é requerida por outros pacotes instalados. Eu tenho o RPM para o libpcap 1.4.0 construído, mas quando tento instalá-lo, recebo o seguinte:

# rpm -Uvh /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm
error: Failed dependencies:
        libpcap.so.0.9.4 is needed by (installed) ppp-2.4.4-2.el5.i386
        libpcap.so.0.9.4 is needed by (installed) isdn4k-utils-3.2-56.el5.i386
        libpcap >= 14:0.8.3-6 is needed by (installed) ppp-2.4.4-2.el5.i386

e verificando as dependências de um desses:

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4

A atualização do sistema operacional é inusitada; além disso, é um sistema fechado, nunca conectado à rede, portanto, pouco importa. Agora, eu posso ser capaz de remover os pacotes que estão paralisando coisas, mas, assumindo que não posso, como posso forçar a instalação deste pacote, de modo que ele satisfaça os requisitos de dependência mais antigos? ie: ter "prover" libpcap 0.9.4 soas para satisfazer os requerimentos de softwares já instalados.

    
por Jon 27.06.2014 / 15:57

1 resposta

1

Eu recomendo que você altere o rpm de origem deste arquivo; edite o caminho no qual os arquivos serão instalados, de modo a não criar conflitos entre os arquivos que você está prestes a instalar, e aqueles fornecidos por libpcap.so.0.9.4 (não podem ser instalados dois rpm: s que forneçam o mesmo arquivo no mesmo caminho ambos).

Ou remova do rpm de origem os arquivos que entrarem em conflito com o que você instalou, podendo ser: /usr/lib/libpcap.so.0 e possivelmente /usr/share/man/man3/pcap.3.gz . (um é um link simbólico e o outro uma página man) do seu arquivo src rpm: s .spec e o rpmbuild.

Então você pode instalar (não atualizar) /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm ao lado da libpcap-0.9.4 para que as versões possam coexistir pacificamente em seu sistema.

Se você estiver usando o yum, talvez seja necessário editar seu /etc/yum.conf para adicionar libpcap à sua lista de installonlypkgs , para que o yum não substitua sua versão mais antiga da libpcap pela que você acabou de criar ( %código%). (se você usar o yum em vez de simples rpm, então ele pode acompanhar todas as transações para você com man 5 yum.conf . É muito poderoso). Você também pode alterar o nome no arquivo yum history no rpm de origem para algo como .spec , é o que geralmente faço.

Em seguida, adicione o caminho em que você instalou os pacotes em libpcap14 , no script / comando que aciona seu programa e deve funcionar. (ou $LD_LIBRARY_PATH sua versão mais nova do libpcap).

Você pode fazer o que o slm sugeriu também, é de longe o caminho mais rápido para o objetivo: LD_PRELOAD e, em uma pasta separada, você extrai o arquivo e usa os arquivos conforme descrito acima. No entanto, o rpm é a forma como o CentOS envia programas e acho que é complicado e difícil de manter a longo prazo.

Outra causa de ação pode ser a recompilação de tudo o que depende da libpcap v0.9.4 para v1.0.0 e atualizá-las. Normalmente, isso implicaria em problemas para atualizações futuras, mas, como você parece estar usando o CentOS 5, não precisa se preocupar, pois é o EOL.

Uma última opção a ser considerada é rpm2cpio /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm > libpcap-1.4.0-1.i386.cpio , veja quantos pacotes deseja remover ( yum remove libpcap não removerá nada até que você pressione o botão Y e pressione enter), já que você pode poder remover esses pacotes e usar o yum, se você não conseguir afinal de contas, você pode reverter com o comando yum (não me lembro em qual versão do yum isso foi implementado no yum , então verifique primeiro se este subcomando está disponível para você). Além disso, certifique-se de ter seus repositórios apontando para os repositórios que possuem esses arquivos disponíveis.

    
por 27.06.2014 / 21:22