Como falsificar uma versão de pacote instalada?

20

Sendo um adotante inicial e usando 11.04 compilações diárias, às vezes encontro uma situação em que alguns pacotes exigem versões anteriores de outros pacotes que não os instalados. Geralmente as versões mais recentes (mas recusadas) dos pacotes necessários fornecem toda a funcionalidade de suas versões mais antigas.

Se eu usar dpkg -i --force-depends-version para instalar pacotes dependentes, tudo funciona bem, nunca vi um problema.

Em vez de baixar e instalar manualmente cada pacote, posso fazer o sistema fingir que existe uma versão de pacote específica instalada quando há uma versão mais recente? Ou há um equivalente de --force-depends-version para apt-get ?

    
por Ivan 20.12.2010 / 02:44

2 respostas

15

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

    
por frabjous 20.12.2010 / 02:49
17

Apesar de uma resposta já ter sido aceita, a inclusão do que foi aceito transmite melhor o processo:

Existe um pacote Debian chamado equivs que é capaz de criar pacotes fictícios. Instale-o executando sudo apt-get install -y equivs

Uma vez instalado, você gera um arquivo de "controle" de modelo usando o seguinte comando: equivs-control postfix (substitua postfix pelo nome do seu pacote). No meu caso, posso usar um nome de pacote alternativo, por exemplo postfix-custom ou qualquer outro, mas que meu pacote personalizado atenda ou Provides da dependência de instalação de postfix (novamente substituindo postfix para qualquer pacote que você desejar.

Depois que o arquivo de controle de modelo é gerado, normalmente removerei muitas das instruções comentadas (instruções que começam com # ). Uma que eu gostaria de manter especificamente é a declaração Provides: , onde posso dizer que meu pacote oferece a capacidade oferecida pelo outro pacote que estou tentando falsificar, por exemplo, Provides: postfix informa 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 postfix ou 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-erlang fornece erlang .

Por fim, depois que o arquivo de controle de modelo é criado, você usa equivs-build para gerar o pacote falso, por exemplo, %código%. Demora alguns segundos para criar o pacote e, em seguida, você pode executar equivs-build /path/to/generated/control/file

Para usuários avançados, se o arquivo de controle do modelo tiver uma linha de dependência sudo dpkg -i my_package_name*.deb , convém usar uma ferramenta como Requires: para instalar seu pacote e os vários pacotes declarados como dependências.

    
por Jonathan Oliver 03.08.2015 / 20:41