Sorgen Sie dafür, dass RPM die Abhängigkeitsanforderungen anderer installierter Pakete erfüllt

Sorgen Sie dafür, dass RPM die Abhängigkeitsanforderungen anderer installierter Pakete erfüllt

Ich installiere also eine Java-App, die ich geschrieben habe und die jnetpcap verwendet. Dies erfordert libpcap mindestens v1.0.0. Mein CentOS 5.8 hat nur libpcap 0.9.4, das von anderen installierten Paketen benötigt wird. Ich habe das RPM für libpcap 1.4.0 erstellt, aber wenn ich versuche, es zu installieren, erhalte ich Folgendes:

# rpm -Uvh /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm
error: Failed dependencies:
        libpcap.so.0.9.4 is needed by (installed) ppp-2.4.4-2.el5.i386
        libpcap.so.0.9.4 is needed by (installed) isdn4k-utils-3.2-56.el5.i386
        libpcap >= 14:0.8.3-6 is needed by (installed) ppp-2.4.4-2.el5.i386

und überprüfen Sie die Abhängigkeiten von einem davon:

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4

Das Aktualisieren des Betriebssystems ist ein No-Go, außerdem ist es ein geschlossenes System, das nie mit dem Netz verbunden ist, also spielt es keine große Rolle. Jetzt, ichMaiIch kann die Pakete entfernen, die die Dinge verzögern. Aber, angenommen, das ist mir nicht möglich, wie kann ich die Installation dieses Pakets erzwingen, sodass es die älteren Abhängigkeitsanforderungen erfüllt? D. h., es muss libpcap 0.9.4 „bereitstellen“, damit die Anforderungen der bereits installierten Software erfüllt werden.

Antwort1

Ich empfehle Ihnen, das Quell-RPM dieser Datei zu ändern. Bearbeiten Sie den Pfad, in dem die Dateien installiert werden, um keine Konflikte zwischen den Dateien zu verursachen, die Sie installieren möchten, und denen, die von bereitgestellt werden libpcap.so.0.9.4(es dürfen keine zwei RPMs installiert werden, die dieselbe Datei in demselben Pfad bereitstellen).

Oder entfernen Sie aus dem Quell-RPM diejenigen Dateien, die mit dem, was Sie installiert haben, in Konflikt stehen. Dies könnten sein: /usr/lib/libpcap.so.0und möglicherweise /usr/share/man/man3/pcap.3.gz. (eine ist ein symbolischer Link und die andere eine Manpage) aus der .spec-Datei Ihres src-RPM:s, und erstellen Sie sie mit rpmbuild.

Anschließend können Sie installieren (nicht aktualisieren)/root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm zusammen mit libpcap-0.9.4damit die Versionen friedlich auf Ihrem System koexistieren können.

Wenn Sie yum verwenden, müssen Sie möglicherweise Ihre bearbeiten, um sie zu Ihrer Liste von /etc/yum.confhinzuzufügen , damit yum Ihre ältere Version von libpcap nicht durch die gerade erstellte ersetzt ( ). (Wenn Sie yum statt einfachem rpm verwenden, kann es mit alle Transaktionen für Sie verfolgen . Es ist sehr leistungsfähig.) Sie können auch den Namen in der Datei im Quell-RPM in etwas wie ändern , das mache ich normalerweise.libpcapinstallonlypkgsman 5 yum.confyum history.speclibpcap14

Fügen Sie dann den Pfad, unter dem Sie die Pakete installiert haben $LD_LIBRARY_PATH, in das Skript/den Befehl ein, der Ihr Programm startet, und es sollte funktionieren. (oder LD_PRELOADstattdessen Ihre neuere Version von libpcap).

Sie könnten auch das tun, was slm vorgeschlagen hat. Das ist bei weitem der schnellste Weg zum Ziel: rpm2cpio /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm > libpcap-1.4.0-1.i386.cpiound dann extrahieren Sie das Archiv in einen separaten Ordner und verwenden die Dateien wie oben beschrieben. Allerdings werden Programme über rpm aus CentOS ausgeliefert und ich denke, das ist chaotisch und auf lange Sicht schwer zu warten.

Ein weiterer Handlungsgrund könnte sein, dass Sie alles, was von libpcap v0.9.4 abhängt, auf v1.0.0 neu erstellen und diese aktualisieren. Normalerweise würde dies Probleme bei zukünftigen Updates bedeuten, aber da Sie anscheinend CentOS 5 verwenden, müssen Sie sich keine Sorgen machen, da es EOL ist.

Eine letzte Option, die Sie in Betracht ziehen sollten yum remove libpcap, ist zu sehen, wie viele Pakete entfernt werden sollen ( yumes wird nichts entfernt, bis Sie die Y-Taste drücken und die Eingabetaste drücken), da SieMaiSie können diese Pakete entfernen und yum verwenden. Wenn sich herausstellt, dass dies doch nicht möglich ist, können Sie mit yum history undodem Befehl ein Rollback durchführen (ich weiß nicht mehr, in welcher Version von yum dies implementiert wurde, prüfen Sie also zuerst, ob Ihnen dieser Unterbefehl zur Verfügung steht). Stellen Sie außerdem sicher, dass Ihre Repositories auf die Repos verweisen, in denen diese Dateien verfügbar sind.

verwandte Informationen