Wie kann ich zwei Versionen desselben Pakets in Archlinux behalten?

8

Ich verwende Archlinux. Kürzlich wurde eines der genannten Pakete icuaktualisiert. Firefox hängt jedoch davon ab libicuuc.so.56, während R von abhängt libicuuc.so.55. Wie kann ich dieses Problem lösen?

Hinweis: Das R-Paket wurde gegen Intel MKLlibiary erstellt, sodass es bei neuen Versionen von Abhängigkeiten nicht funktioniert. Ich habe versucht, R wieder aufzubauen - es hängt immer noch vom alten ablibicuuc.so.55

Nick
quelle
2
Solche Dinge sollten mit dem offiziellen Repo nicht passieren. Nur wenn Sie nicht vollständig aktualisiert haben, da Teilaktualisierungen von der fortlaufenden Version von Archlinux nicht unterstützt werden. Wenn es wirklich so ist (auf einem vollständig aktualisierten System), sollten Sie einen Fehler melden.
Bvolkmer

Antworten:

6

Ich gehe davon aus, dass Sie eine bestimmte ausführbare Datei mit der alten Bibliothek ausführen möchten. Rufen wir die ausführbare Datei auf myprogram.

Wenn Sie sich libicuuc.so.55in einem anderen Verzeichnis befinden, können Sie beispielsweise /opt/oldlibs/libicuuc.so.55anweisen myprogram, die alte Bibliothek mit einem Befehl wie dem folgenden zu verwenden:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

Die Bibliotheksdateien können aus der Paketdatei extrahiert werden (die Sie wahrscheinlich in finden /var/cache/pacman/pkg).

Wenn dies das Problem für die beabsichtigte Verwendung der Anwendung nicht löst, können Sie sie stattdessen in einer Chroot oder einem Container ausführen.

Alexander
quelle
1
Ich habe die Mischung aus Erfahrung zwischen * BSD und Linux und denke zweimal darüber nach, ob ich es Gefängnis oder Chroot nenne. Ist nicht der tatsächliche Name Gefängnis, und chroot den Befehl, um es zu erreichen? Ansonsten ausgezeichnete Antwort, Sir.
Rui F Ribeiro
@RuiFRibeiro Ich denke, "Gefängnis" ist der gebräuchliche Begriff bei * BSD (und diese verhalten sich anders als Chroots, da sie sicherer sind), während ich denke, dass "Chroot" unter Linux häufiger verwendet wird. Ich glaube, das Äquivalent von BSD-Gefängnissen unter Linux wären aus Sicherheitsgründen Linux-Container. Danke für die Eingabe.
Alexander
1
Vielen Dank für Ihre Antwort, das funktioniert. Ich sollte darauf hinweisen, dass ich /opt/oldlibs/in /etc/ld.so.conf.d/R.conf. (Die R.confDatei ist bereits vorhanden, mit Rdem Standard-Lib-Pfad darin.)
Nick
0

meine erfahrung mit arch linux

systemctl start mongodb gibt Prozessstartfehler

Ich drücke einfach journalctl -xe , um das aktuelle Protokoll zu überprüfen

es zeigt fehlende libboost_system.so.1.64.1 (alte)

Es ist ein Sumlink, mit dem ich es auflöse

readlink -f /lib/libboost_system.so.1.65.1  (new one)

readlink sag mir symlink point zu /usr/lib/libboost_system.so.1.65.1

Ich extrahiere boost-libs 1.64 aus / var / cache / pacman / pkg und füge alle / lib-Dateien in / usr / lib ein. Überspringe auch, um alte Dateien zu überschreiben

Dies löst mich auf, Abhängigkeiten zu brechen. Weitere Arbeit, wenn nicht gelöst, macht einen Symlink von fehlenden wie

 ln -s /lib/libboost_system.so.1.64.1 /usr/lib/libboost_system.so.1.64.1 

Erfahrungsgewinn

Suchen Sie nicht nach Patches. Verwenden Sie immer pacman -Suy && pacman -S Paketname, um etwas zu installieren. Teilaktualisierung nicht unterstützt (bei Arch)

Shivshankar
quelle