Comment puis-je conserver deux versions du même package dans archlinux?


8

J'exécute Archlinux. Récemment, l'un des packages nommés a icuété mis à jour; cependant, Firefox dépend libicuuc.so.56, tandis que R en dépend libicuuc.so.55. Comment puis-je résoudre ce problème?

Remarque: le package R a été construit contre Intel MKLlibiary, donc il ne fonctionne pas sur la nouvelle version des dépendances. J'ai essayé de reconstruire R - cela dépend toujours de l'ancienlibicuuc.so.55


2
De telles choses ne devraient pas arriver avec le repo officiel. Juste si vous n'avez pas complètement mis à jour, car les mises à jour partielles ne sont pas prises en charge par la version continue d'archlinux. Si c'est vraiment comme ça (sur un système entièrement mis à jour), vous devez signaler un bogue.
bvolkmer

Réponses:


6

Je suppose que vous souhaitez exécuter un exécutable spécifique avec l'ancienne bibliothèque. Appelons l'exécutable myprogram.

Si vous placez libicuuc.so.55dans un répertoire différent, par exemple car /opt/oldlibs/libicuuc.so.55il est possible de demander myprogramd'utiliser l'ancienne bibliothèque avec une commande comme celle-ci:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

Les fichiers de bibliothèque peuvent être extraits du fichier de package (que vous pouvez probablement trouver dans /var/cache/pacman/pkg).

Si cela ne résout pas le problème de la façon dont vous avez l'intention d'utiliser l'application, vous pouvez plutôt l'exécuter dans un chroot ou un conteneur.


1
Moi ayant le mélange d'expérience entre * BSD et Linux, je pense à deux fois entre l'appeler une prison ou un chroot. N'est-ce pas le vrai nom de prison, et chrootez la commande pour y parvenir? Sinon, excellente réponse monsieur.
Rui F Ribeiro

@RuiFRibeiro Je pense que "prison" est le terme commun sur * BSD (et ceux-ci se comportent différemment des chroots, car ils sont plus sécurisés), tandis que je pense que "chroot" est plus couramment utilisé sous Linux. Je crois que l'équivalent des prisons BSD sur Linux, en termes de sécurité, serait les conteneurs Linux. Merci pour la contribution.
Alexander

1
Merci pour votre réponse, ça marche. Je tiens à souligner que je mets /opt/oldlibs/en /etc/ld.so.conf.d/R.conf. (Le R.conffichier est déjà là, avec Rle chemin de la bibliothèque standard dedans.)
Nick

0

mon expérience avec arch linux

systemctl start mongodb donne une erreur de démarrage du processus

je frappe simplement journalctl -xe pour vérifier le journal actuel

il montre libboost_system.so.1.64.1 manquant (ancien)

c'est un sumlink je le résous en utilisant

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

readlink me dit que le lien symbolique pointe vers /usr/lib/libboost_system.so.1.65.1

j'extrait boost-libs 1.64 de / var / cache / pacman / pkg et je colle tous les fichiers / lib dans / usr / lib saute également pour remplacer l'ancien fichier

cela me résout briser les dépendances travailler davantage sinon résoudre faire un lien symbolique de manquant comme

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

gain d'expérience

ne cherchez pas de correctifs, utilisez toujours pacman -Suy && pacman -S package_name pour installer quoi que ce soit. mise à jour partielle non prise en charge (en cas d'arc)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.