Frage Wie löst man Paketkonflikte?


Ich möchte beide Pakete installieren libsigc++-2.0-0c2a und libsigc++-2.0-0v5 zur gleichen Zeit, um bestimmte Software zu laufen.

Offensichtlich sind die Pakete jedoch widersprüchlich und

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

Ergebnisse in

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.

Gibt es eine gemeinsame Strategie, um solchen Situationen zu begegnen? Sollte nicht die "Versionsnummerierung"Lösung hier anwenden?


1
2018-02-26 17:33


Ursprung




Antworten:


Problem

Ich stimme MichaelW zu, dass es dieselbe lib-Datei mit derselben Version enthält. Der Fehler, den Sie bekommen haben, hängt jedoch nicht damit zusammen, aber es ist der Paketversionskonflikt, der in einem der Pakete deklariert wurde:

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

Wenn diese Zeilen entfernt werden, haben wir die gleichen Fehler beim Überschreiben der Dateien bekommen, ähnlich wie bei dieser:

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)

Fehlerquelle: dpkg error: "versucht Datei zu überschreiben, was auch in ... ist"

Da sie in der gleichen Version kompiliert werden, ist es nicht möglich, sie zusammen zu setzen, auch wenn Sie den Namen nicht manuell ändern können. Die Tools im Repository wurden bereits kompiliert libsigc-2.0.so.0.

Lösung

Hier ist eine einfache Lösung mit Testfall.

Testfall:

Ich suchte nach einem Paket, das von derselben Bibliothek abhängig ist:

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

Überprüfen Sie, ob die enthaltene Binärdatei wirklich davon abhängt:

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

Anleitung:

  1. Erstellen Sie einen Ordner mit der externen freigegebenen Lib (die andere Version, die Sie nicht installieren können), Beispiel:

    mkdir ~/Desktop/sand_box/local_so_lib_test
    
  2. Entpacken Sie die Bibliothek aus dem Paket

    $ 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. Starten Sie die speziellen abhängigen Tools, indem Sie festlegen LD_LIBRARY_PATH

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

Prüfen:

$ 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
2018-06-09 04:13



Da ich jetzt ein anderes Setup habe, kann ich das für das ursprüngliche Problem nicht mehr reproduzieren. Aber basierend auf Ihrer Beschreibung bin ich zuversichtlich, dass dieser Ansatz in meinem Szenario funktioniert hätte. Daher wähle ich Ihre Antwort als richtige Lösung. - Martin R.


Beide Pakete enthalten die gleichen Dateien:

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

Sie finden dies in den Paketdetails in den Ubuntu-Paketen: http://packages.ubuntu.com/

z.B. http://packages.ubuntu.com/wily/amd64/libsigc++-2.0-0v5/filelist http://packages.ubuntu.com/precise/amd64/libsigc++-2.0-0c2a/filelist

Der Konflikt wird also von den gleichen Dateien in den Paketen verursacht. Was sollte das System jetzt tun? Da er es nicht entscheiden kann, zeigt es den Konflikt an.


2
2018-02-26 18:21



Ich sehe, also würde es keinen Weg geben, diesen Konflikt zu lösen, oder? (Zum Beispiel durch den Einsatz zusätzlicher Tools) - Martin R.


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


0
2018-06-09 04:20