• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] libxml2 und libxml2 guru Version gleichzeitig?

EagleFox

Member
Hallo Leute,

ich habe plötzlich ein Problem, wenn ich mit smart ein update durchführen möchte.
Smart will immer die libxml2-devel-32bit deinstallieren (ich habe ein 64-bit System).

Daraufhin erhalte ich beim update immer die Fehlermeldungen :

Code:
FEHLER!: php5-5.1.2-29.14 benötigt libxml2.so.2()(64bit)
FEHLER!: MozillaThunderbird-1.5.0.7-0.1 benötigt libxml2.so.2()(64bit)
FEHLER!: libzypp-1.3.2-0.6 benötigt libxml2.so.2()(64bit)
FEHLER!: apache2-mod_php5-5.1.2-29.14 benötigt libxml2.so.2()(64bit)
FEHLER!: libzypp-zmd-backend-7.1.1.0-42.53 benötigt libxml2.so.2()(64bit)
FEHLER!: libsvg-0.1.4-14 benötigt libxml2.so.2()(64bit)
FEHLER!: libxklavier-2.1-17 benötigt libxml2.so.2()(64bit)
FEHLER!: libxslt-1.1.15-13 benötigt libxml2.so.2()(64bit)
.
.
.


Ich habe seltsamer Weise jeweils zwei Versionen installiert:

Code:
eaglefox:/home/bernd # rpm -qa | grep libxml
libxml2-2.6.23-13
libxml2-2.6.26-1.guru.suse101
libxml2-devel-32bit-2.6.23-13
libxml2-devel-2.6.26-1.guru.suse101
libxml2-32bit-2.6.23-13
libxml2-devel-2.6.23-13
libxml2-python-2.6.26-1.guru.suse101

Was kann da schief gelaufen sein?
Ich hoffe es hat jemand nen Tip für mich! Besten Dank im voraus!
 
Ah, wunderbar - mal wieder jemand mit dem mittlerweise nicht mehr ganz unbekannten Problem, dass smart x86_64-Systeme gerne abzurauchen pflegt ;)

Poste bitte die Ausgabe von:
Code:
rpm -qa --queryformat '%{N}-%{V}-%{R}.%{ARCH}\n' | grep libxml2
Kurz gesagt:

- Du musst die bis jetzt doppelt installierten Pakete wieder bereinigen, d.h. die verkehrt installierte Version entfernen, aber ohne die richtige dabei zu zerstören

- Danach musst Du die verkehrte Version, aus welchem Repository auch immer sie kam, sperren

Dazu ist die Ausgabe des o.g. Befehls erforderlich.
 
OP
E

EagleFox

Member
HI traffic, danke für die Antwort. Hier die Ausgabe der Dateien:

Code:
libxml2-2.6.26-1.guru.suse101.x86_64
libxml2-devel-32bit-2.6.23-13.x86_64
libxml2-32bit-2.6.23-13.x86_64
libxml2-devel-2.6.26-1.guru.suse101.x86_64
libxml2-python-2.6.26-1.guru.suse101.x86_64
libxml2-devel-2.6.23-13.i586
libxml2-2.6.23-13.i586

Woran merke ich nun welche die verkehrte Version ist? Wie kommt es überhaupt zustande, dass ich ne "normale" und ne "guru" Version drauf habe?

Wie muss ich nun weiter verfahren?
 
EagleFox schrieb:
Woran merke ich nun welche die verkehrte Version ist?
Hinschauen?
EagleFox schrieb:
Wie kommt es überhaupt zustande, dass ich ne "normale" und ne "guru" Version drauf habe?
Das kommt davon, dass smart gerne das Paket mit der höchsten Versionsnummer installieren möchte.

Eine weitere interessante Angewohnheit von smart ist es, die 64-Bit-Versionen und die 32-Bit-Versionen derselben Pakete gleichzeitig zu installieren.
EagleFox schrieb:
Wie muss ich nun weiter verfahren?

Diese Versionen hier sind OK:

libxml2-2.6.26-1.guru.suse101.x86_64
libxml2-devel-32bit-2.6.23-13.x86_64
libxml2-32bit-2.6.23-13.x86_64
libxml2-devel-2.6.26-1.guru.suse101.x86_64
libxml2-python-2.6.26-1.guru.suse101.x86_64

Diese Versionen hier sind nicht OK:

libxml2-devel-2.6.23-13.i586
libxml2-2.6.23-13.i586

Wobei "OK" jeweils bedeutet, dass die x86_64-Versionen OK und die i586-Versionen nicht OK sind. Ob die *.guru.*-Pakete für Dich OK sind, müsstest Du wissen, die i586-Pakete sind allerdings definitiv und objektiv nicht OK.

Deinstallier die verkehrten i586-Pakete, und zwar am besten ganz ohne smart, sondern mit rpm:
Code:
rpm -e libxml2-devel.i586
rpm -e libxml2.i586
Anschließend kann es sein, dass Du die anderen x86_64-Pakete neu installieren musst (Befehl "smart reinstall <Paketname>" oder Menüpunkt "Erneut installieren" im GUI), weil die i586-Pakete Dateien aus den x86_64-Paketen überschrieben haben könnten.
 
OP
E

EagleFox

Member
Genau wie Du es hier vorschlägst hatte ich es gestern, bzw. heute nacht noch gemacht. Hat bisher keine Probleme gegeben.
Manchmal sieht man den Wald vor lauter Bäumen nicht! Die i586 Versionen sind mir garnicht aufgefallen, da ich auf dem System recht viele 32-bit Sachen installiert habe. Aber die werden dann ja immer extra mit 32-bit tituliert. :roll:

Danke Dir tausendfach!
 
OP
E

EagleFox

Member
Ich habe da hoffentlich noch eine letzte Frage:

wie kann ich verhindern, dass mir smart immer wieder die libxml für ein 32-bit System installieren will?
Bei smart upgrade erhalte ich folgendes:

Code:
Erneuere Pakete (18):
libxml2-2.6.26-1.guru.suse101@i686                                  libdvdread-devel-0.9.7-0.pm.0@x86_64
libxml2-devel-2.6.26-1.guru.suse101@i686                            libxine1-1.1.2cvs-20061007.pm.0@x86_64
amarok-1.4.3-30.guru.suse101@x86_64                                 smart-0.42-14.guru.suse101@x86_64
amarok-libvisual-1.4.3-30.guru.suse101@x86_64                       smart-addons-0.42-14.guru.suse101@x86_64
amarok-xine-1.4.3-30.guru.suse101@x86_64                            smart-debuginfo-0.42-14.guru.suse101@x86_64
bind-libs-9.3.2-17.7@x86_64                                         smart-gui-0.42-14.guru.suse101@x86_64
bind-libs-32bit-9.3.2-17.7@x86_64                                   smart-ksmarttray-0.42-14.guru.suse101@x86_64
lftp-3.5.5-1.guru.suse101@x86_64                                    xine-ui-0.99.4cvs-20061001.pm.0@x86_64
libdvdread-0.9.7-0.pm.0@x86_64                                      xmoto-0.2.2-1.guru.suse101@x86_64

Installing packages (1):
  libcaca-0.9_0.99.beta5-0.pm.0@x86_64

Removing packages (1):
  libxml2-devel-32bit-2.6.23-13@x86_64

40.2MB an Paketdateien sind benötigt.3.2MB wird benutzt.

Änderungen anwenden? (J/n) :

Ich weiss zwar, wie ich nen channel deaktiviere, aber nicht, wie ich bestimmte Pakete banne!
 
Verwende Prioritäten (lassen sich sowohl auf ganze Channels als auch auf einzelne Pakete anwenden) oder setz eine Sperre im nicht installierten Zustand auf die unerwünschte libxml2-Version oder setz eine Sperre im installierten Zustand auf die erwünschte libxml2-Version.
 
OP
E

EagleFox

Member
das gestaltet sich komplizierter als ich dachte. die libxml2-devel-32bit ist abhängig von der libxml2-devel i586 und die wiederum von der libxml2 i586.
Irgendwie steige ich da nicht mehr durch.
Ich versuche mal über yast die Abhängigkeiten zu lösen und die richtigen dateien zu installieren.
 
EagleFox schrieb:
die libxml2-devel-32bit ist abhängig von der libxml2-devel i586
Nein, das ist nicht wahr.

Wenn smart das so sagt, dann macht smart etwas falsch. libxml2-devel-32bit@x86_64 ist nicht von libxml2-devel@i586 abhängig, sondern von libxml2-devel-2.6.26@anyarchitecture und libxml2-32bit@x86_64.

Lös die Abhängigkeiten selbst oder mit YaST auf. smart kann das nicht.

Nur um das mal zu dokumentieren:
Code:
% rpm -qp --requires /tmp/libxml2-devel-32bit-2.6.26-12.x86_64.rpm
libxml2-devel = 2.6.26
libxml2-32bit = 2.6.26
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
/bin/sh
rpmlib(PayloadIsBzip2) <= 3.0.5-1
Da ist nirgendwo eine explizite Abhängigkeit zu einem i586-Paket drin, sondern nur eine mit Bezug auf eine Version, die keine Architektur vorschreibt. Sie kann theoretisch auch durch ein i586-Paket erfüllt werden, aber die Installation der i586-Variante eines Pakets, das auch für x86_64 verfügbar ist, ist immer ein Fehler. Leider weiß smart das nicht.

Holzhammer-Methode: Downgrade alle libxml2-Pakete auf die Versionen von SUSE und sperre anschließend alle außer denen von SUSE im nicht installierten Zustand oder die von SUSE im installierten Zustand.
 
OP
E

EagleFox

Member
Puh, also so wie Du mir gesagt hast habe ich das jetzt mal durchgezogen.
Gut zu wissen, dass smart das nicht kann, ich dachte schon ich wäre zu doof zum richtig hingucken.
Also, es scheint erst mal so zu laufen, smart upgraded jetzt auch wieder alle anderen Pakete, ohne seine geliebten "falschen" libxml installieren zu wollen!

Besten Dank!
 
Das Problem hier ist diese Abhängigkeit:
Code:
libxml2-devel = 2.6.26
Diese Abhängigkeit passt auf zwei Pakete:

libxml2-devel@i586
libxml2-devel@x86_64

Also hat der Abhängigkeits-Auflösungs-Algorithmus zwei Wege, von denen einer (x86_64) richtig und der andere (i586) falsch ist.

smart wählt den falschen Weg, weil smart anders gestrickt ist, und verheddert sich darin: Ab dem Zeitpunkt, wo smart fälschlicherweise libxml2-devel@i586 wählt, geht es nämlich nur noch mit libxml2@i586 weiter. => BOOM.

Nachdem Du die Abhängigkeit selbst richtig aufgelöst hast, macht smart nichts mehr falsch, weil es erstmal nichts mehr zu tun gibt - aber nur genau solange, bis in irgendeinem Repository wieder libxml2-Pakete auftauchen. Tauchen doch wieder welche auf, ist die Abhängigkeits-Situation wieder dieselbe und das Ergebnis dann wahrscheinlich auch.

Ich würde die libxml2-Pakete in ihrem jetzigen Zustand sperren... Features neuerer libxml2-Versionen wirst Du wahrscheinlich sowieso nie brauchen.
 
Oben