Ignora todas as dependências de um pacote específico com o apt-get

16

Esta é uma pergunta muito específica que o Google não ajudou a responder.

Estou executando o Ubuntu 13.04 com apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56 .

Eu quero instalar o Erlang de um pacote .deb, mas não quero puxar todas as suas dependências. O próprio pacote especifica que ele depende das bibliotecas Java e wx, mas, na realidade, elas não são necessárias, a menos que você deseje fazer a interface com o Java ou o wxWidgets.

Eu posso instalar o Erlang assim

sudo dpkg -i --force-depends erlang.deb

No entanto, a instalação de qualquer outra coisa com apt-get depois falha devido a dependências não atendidas. Então, se eu quiser instalar o git depois do Erlang, eu obtenho o seguinte

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Existe uma maneira de fazer com que o esl-erlang package feche sem executar apt-get install -f ?

Eu quero algo assim:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

ou assim:

sudo apt-cache shut-package-up esl-erlang

ou isto:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

Encontrei uma pergunta semelhante: link . Algumas respostas fornecem práticas etapas manuais para modificar dependências de certos pacotes.

Ainda estou procurando um método automatizado robusto.

    
por android 08.04.2014 / 21:47

3 respostas

24

Eu entendo o ponto de vista de bjanssen, mas parece ridículo para um gerenciador de pacotes permitir --force-depends para uma única instalação de pacote, mas não permitir a dependência de força-depende-para-sempre-e-avisa-me-sobre-essa-dependência.

Eu tive um problema semelhante com um pacote que dependia de uma versão do libcairo um pouco maior que a atualmente disponível no Debian. Para os meus propósitos, ainda funciona bem. Fico feliz em continuar usando até que a atualização do libcairo apareça no apt. Eu não quero compilar a partir do código-fonte ou criar meu próprio pacote.

A solução que encontrei:

  • editar /var/lib/dpkg/status ,
  • encontre o pacote com as dependências quebradas
  • edite a linha Depends: para parar o pacote reclamando.

Eu suponho que isso será sobrescrito da próxima vez que o pacote for atualizado, mas é exatamente isso que eu quero.

    
por 23.09.2014 / 08:20
2

O que você tenta fazer é contra o propósito de um gerenciador de pacotes, que tenta manter um ambiente são, i. o. W. você está usando a ferramenta errada para o trabalho. Não tente quebrar o apt-get.

O jeito certo de resolver seu problema é criar seu próprio pacote com dependências que se adequam a você. Há o caminho oficial (bastante envolvido: link ) e o rápido e sujo maneira usando apt-build , ou para pacotes não na fonte de distribuição, checkinstall . Todos os pacotes de produção apt-get instalarão alegremente.

Em uma nota final, você pode questionar a sabedoria do mantenedor do esl-erlang para incluir certas dependências, mas você não pode criticar o gerenciador de pacotes pelo comportamento pretendido. Se você acha que essas dependências estão erradas, você deve registrar um bug no pacote.

    
por 09.04.2014 / 00:01
0

Verifique se o "proxy usado" no apt.conf é adequado (ou seja, de acordo com sua rede). Isso também causa esses problemas, já que os URLs não poderiam ser acessados.

Normalmente, se você usar proxy, seu /etc/apt/apt.conf será semelhante a:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
    
por 30.10.2017 / 07:22