Como falsificar uma versão do pacote instalada?

23

Sendo um dos primeiros a adotar e usando as compilações diárias do 11.04, às vezes encontro uma situação em que alguns pacotes exigem versões anteriores de outros pacotes além daqueles que eu instalei. Geralmente, as versões mais novas (mas recusadas) dos pacotes necessários fornecem toda a funcionalidade de suas versões mais antigas.

Se eu uso dpkg -i --force-depends-versionpara instalar pacotes dependentes, tudo funciona bem, nunca vi um problema.

Em vez de baixar e instalar manualmente todos os pacotes, posso apenas fazer o sistema fingir que há uma versão específica do pacote instalada quando houver uma mais nova? Ou existe um --force-depends-versionequivalente-chave para apt-get?

Ivan
fonte

Respostas:

16

Você pode usar o pacote equivs Instalar equivs para criar um pacote fictício para falsificar um determinado pacote que está sendo instalado. Algumas instruções aqui .

frabjous
fonte
Enquanto isso é suficiente. Mas o link pode quebrar mais cedo ou mais tarde. Melhor ter pelo menos retomado as instruções dentro da resposta. Minha resposta pode ajudar aqui askubuntu.com/a/1181415/26246 . Portanto, podemos fazer referência a essa pergunta que tem o voto mais alto em relação aos equivs.
user.dz 17/10
23

Apesar de uma resposta já ser aceita, a inclusão do aceito melhor transmite o processo:

  1. Existe um pacote Debian chamado equivsque é capaz de criar pacotes fictícios. Instale-o executandosudo apt-get install -y equivs

  2. Uma vez instalado, você gera um arquivo de "controle" de modelo usando o seguinte comando: equivs-control postfix(substitua postfixpelo nome do seu pacote). No meu caso, eu poderia usar um nome de pacote alternativo, por exemplo, postfix-customou qualquer outra coisa, mas ter meu pacote personalizado atendido ou Providesa dependência da instalação de postfix(novamente substituindo postfixo pacote que você desejar).

  3. Depois que o arquivo de controle do modelo for gerado, normalmente removerei muitas das instruções comentadas (instruções que começam com #). Uma que eu gosto de manter especificamente é a Provides:declaração em que posso dizer que meu pacote fornece a capacidade oferecida pelo outro pacote que estou tentando falsificar, por exemplo, Provides: postfixinforma ao mecanismo de resolução de dependências Debian / Ubuntu que meu pacote - de qualquer nome - fornece os mesmos recursos do pacote de destino, novamente postfixou o que for. Isso me permite nomear meu pacote independentemente do pacote de destino para evitar confusão. A Erlang Factory faz isso com suas coisas, por exemplo, esl-erlangfornece erlang.

  4. Finalmente, uma vez que o arquivo de controle do modelo é criado, você equivs-buildpode gerar o pacote falso, por exemplo equivs-build /path/to/generated/control/file.

  5. Demora alguns segundos para compilar o pacote e você pode executar sudo dpkg -i my_package_name*.deb

Para usuários avançados, se o arquivo de controle do modelo tiver uma Requires:linha de dependência, convém usar uma ferramenta como gdebia instalação do pacote, bem como os vários pacotes que ele declara como dependências.

Jonathan Oliver
fonte