web-dev-qa-db-fra.com

Comment résoudre les conflits de paquets?

Je voudrais installer les deux paquets libsigc++-2.0-0c2a et libsigc++-2.0-0v5 en même temps, afin d'exécuter certains logiciels.

Apparemment, cependant, les paquets sont en conflit et

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

résulte en

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-t-il une stratégie commune pour aborder de telles situations? La solution " Numérotation des versions " ne devrait-elle pas s'appliquer ici?

2
Martin R.

Problème

Je suis d'accord avec MichaelW qu'il contient le même fichier lib avec la même version. Cependant, l’erreur que vous avez n’est pas liée à cela, mais c’est un conflit de version de paquet déclaré dans l’un des paquets:

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

Si ces lignes sont supprimées, nous obtenons le même remplacement de fichier lié à l'erreur, semblable à celui-ci:

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)

Source de l'erreur: erreur dpkg: "en essayant d'écraser le fichier, qui est également dans ..."

Comme ils sont compilés dans la même version, il n’est pas possible de les assembler, changer le nom manuellement n’aidera pas. Les outils du référentiel avaient déjà été compilés pour utiliser libsigc-2.0.so.0.

Solution

Voici une solution facile avec cas de test.

Cas de test:

J'ai cherché le paquet qui dépend de la même bibliothèque en utilisant:

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

Vérifiez que le binaire contenu en dépend vraiment, en utilisant:

$ 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)

Instructions:

  1. Créez un dossier contenant la bibliothèque externe partagée (l'autre version que vous ne pouvez pas installer), exemple:

    mkdir ~/Desktop/sand_box/local_so_lib_test
    
  2. Extraire la bibliothèque du paquet

    $ 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. Lancez les outils spéciaux dépendants en définissant LD_LIBRARY_PATH

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

Vérification:

$ 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
2
user.dz

Les deux paquets contiennent les mêmes fichiers:

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

Vous pouvez le trouver dans les détails des paquets dans les paquets Ubuntu: http://packages.ubuntu.com/

par exemple. http://packages.ubuntu.com/wily/AMD64/libsigc++-2.0-0v5/filelisthttp://packages.ubuntu.com/precise/AMD64/libsigc++-2-2-) 0c2a/liste de fichiers

Donc, la configuration est causée par les mêmes fichiers dans les packages. Que devrait faire le système maintenant? Puisqu'il ne peut pas décider, il affiche le conflit.

2
Michael W

essayez Sudo apt-get build-dep libsigc++-2.0-0v5 libsigc++-2.0-0c2a

1
kpie