Como resolver conflitos de pacotes?

1

Eu gostaria de instalar os dois pacotes libsigc++-2.0-0c2a e libsigc++-2.0-0v5 ao mesmo tempo, para executar determinado software.

Aparentemente, no entanto, os pacotes são conflitantes e

sudo apt-get install libsigc++-2.0-0v5 libsigc++-2.0-0c2a

resulta em

The following packages have unmet dependencies.
libsigc++-2.0-0v5 : Conflicts: libsigc++-2.0-0c2a but 2.2.10-0.2ubuntu2 is to be installed
E: Unable to correct problems, you have held broken packages.

Existe uma estratégia comum para abordar tais situações? A solução " Version numbering " não deve ser aplicada aqui?

    
por Martin R. 26.02.2016 / 18:33

3 respostas

2

Problema

Concordo com MichaelW que contém o mesmo arquivo lib com a mesma versão. No entanto, o erro que você obteve não está relacionado, mas é um conflito de versão de pacotes declarado em um dos pacotes:

$ dpkg --info Downloads/libsigc++-2.0-0v5_2.4.1-2_amd64.deb
...
 Conflicts: libsigc++-2.0-0c2a
 Replaces: libsigc++-2.0-0c2a
...

Se essas linhas forem removidas, recebemos o erro relacionado à substituição dos mesmos arquivos, semelhante a este:

Unpacking libjline-java (from .../libjline-java_1.0-1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
 trying to overwrite '/usr/share/java/jline.jar', which is also in package scala 2.9.2-400
Errors were encountered while processing:
 /var/cache/apt/archives/libjline-java_1.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Fonte do erro: erro do dpkg: "tentando sobrescrever arquivo, que também está em ... "

Como eles são compilados para a mesma versão, não é possível colocá-los juntos, nem alterar o nome manualmente ajudará. As ferramentas no repositório já haviam sido compiladas para usar libsigc-2.0.so.0 .

Solução

Aqui está uma solução fácil com caso de teste.

Caso de teste:

Eu procurei pelo pacote que depende da mesma biblioteca usando:

$ apt-cache rdepends libsigc++-2.0-0v5
...
  libatkmm-1.6-1v5
  inkscape
  gparted
  gnome-system-monitor
  aptitude

Verifique se o binário contido realmente depende dele, usando:

$ dpkg -L gnome-system-monitor | grep /bin/
/usr/bin/gnome-system-monitor

$ ldd 'which gnome-system-monitor' | grep libsigc
    libsigc-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0 (0x00007f9491bec000)

Instruções:

  1. Crie uma pasta para conter a biblioteca compartilhada externa (a outra versão que você não consegue instalar), exemplo:

    mkdir ~/Desktop/sand_box/local_so_lib_test
    
  2. Extraia a biblioteca do pacote

    $ dpkg-deb --extract ~/Downloads/libsigc++-2.0-0c2a_2.2.10-0ubuntu2_amd64.deb /tmp/libsigc
    $ cp -a /tmp/libsigc/usr/lib/x86_64-linux-gnu/* ~/Desktop/sand_box/local_so_lib_test
    $ ls -l
    total 20
    lrwxrwxrwx 1 sneetsher sneetsher    20 Dec 12  2011 libsigc-2.0.so.0 -> libsigc-2.0.so.0.0.0
    -rw-r--r-- 1 sneetsher sneetsher 18488 Dec 12  2011 libsigc-2.0.so.0.0.0
    
  3. Inicie as ferramentas dependentes especiais, definindo LD_LIBRARY_PATH

    $ LD_LIBRARY_PATH=~/Desktop/sand_box/local_so_lib_test gnome-system-monitor
    

Verifique:

$ LD_LIBRARY_PATH=~/Desktop/sand_box/local_so_lib_test ldd /usr/bin/gnome-system-monitor | grep libsigc
    libsigc-2.0.so.0 => /home/sneetsher/Desktop/sand_box/local_so_lib_test/libsigc-2.0.so.0 (0x00007fabbe960000)

$ LD_LIBRARY_PATH=~/Desktop/sand_box/local_so_lib_test gnome-system-monitor &
$ lsof -c "gnome-system-mo" | grep libsigc
gnome-sys 28655 sneetsher  mem       REG                8,5    18488  2752572 /home/sneetsher/Desktop/sand_box/local_so_lib_test/libsigc-2.0.so.0.0.0
    
por user.dz 09.06.2016 / 06:13
2

Ambos os pacotes contêm os mesmos arquivos:

  • /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0
  • /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0

Você pode encontrar isso nos detalhes do pacote pesquisando nos pacotes do Ubuntu: link

por exemplo. link link

Assim, o confilct é causado pelos mesmos arquivos nos pacotes. O que o sistema deve fazer agora? Como não pode decidir, exibe o conflito.

    
por Michael W 26.02.2016 / 19:21
1

tente sudo apt-get build-dep libsigc++-2.0-0v5 libsigc++-2.0-0c2a

    
por kpie 09.06.2016 / 06:20