Às vezes, quando peço ao Zypper para instalar algo, recebo uma mensagem semelhante a esta:
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
uninstallable providers: foo-lib.7.31.13.x86_64
Solution 1: do not install foo-tools
Solution 2: break foo-tools by ignoring some of its dependencies
Por que diabos o Zypper pensa que o RPM que eu dei propositalmente por esse motivo exato é um "provedor desinstalável"? O que esta mensagemsignificar? O arquivo RPM está ilegível? Arco errado? Versão errada?Por que está chateado??
Responder1
Acontece que foo-lib
ele próprio tinha dependências não atendidas. Adicioná-los resolveu o problema.
Mas a questão é... por que o Zypper nãodizeresse era o problema? Normalmente, se ocorrer um problema de dependência, ele informa sobre o pacote específico que não foi encontrado. Por que recebi esta mensagem opaca de "provedor desinstalável"?
Responder2
O RPM mantém um banco de dados de arquivos instalados (por exemplo, executáveis binários e bibliotecas compartilhadas) no sistema.
Alguns softwares, como o foo-tools, precisam de outro software (como o foo-lib) para funcionar corretamente. Essas informações de dependência são decididas pelo empacotador RPM.
Se você tiver foo-lib e foo-tools disponíveis como arquivos RPM, mas nenhum deles estiver instalado, você pode fornecer ambos (todos) na linha de comando para o RPM (ou de forma equivalente ao zypper), para fazer o RPM ver que todos as dependências serão satisfeitas. Outra opção é instalar primeiro os pacotes de pré-requisitos.
Se foo-lib, por sua vez, tiver suas próprias dependências, elas também deverão ser satisfeitas. Se não forem, foo-lib não é um provedor instalável de foo-lib.
Não recomendado: certifique-se de que os pré-requisitos sejam atendidos por outros meios (instale os itens necessários manualmente, talvez a partir do código-fonte, e force o Zypper a ignorar as dependências. Fazer isso causará problemas mais tarde, então não faça isso.