如何在archlinux中保留同一软件包的两个版本?


8

我正在运行Archlinux。最近,一个名为的软件包icu被更新了。但是,Firefox取决于libicuuc.so.56,而R取决于libicuuc.so.55。我怎么解决这个问题?

注意:R软件包是针对Intel MKLlibiary构建的,因此它不适用于新版本的依赖项。我试图重建R-仍然取决于旧的libicuuc.so.55


2
官方回购协议中不应发生此类情况。即使您尚未完全更新,archlinux滚动发行版也不支持部分更新。如果确实是这样(在完全更新的系统上),则应提交错误。
bvolkmer 2015年

Answers:


6

我假设您希望使用旧库运行特定的可执行文件。我们称之为可执行文件myprogram

例如,如果放置libicuuc.so.55在其他目录中,/opt/oldlibs/libicuuc.so.55则可以myprogram通过以下命令来指示使用旧库:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

可以从包文件中提取库文件(您可能在中找到/var/cache/pacman/pkg)。

如果这不能解决您打算如何使用该应用程序的问题,则可以考虑在chroot或容器中运行它。


1
我在* BSD和Linux之间拥有丰富的经验,在将其称为监狱或chroot时,我确实三思而后行。实际的名字不是监狱,而用chroot命令实现它吗?否则,先生,答案很好。
Rui F Ribeiro

@RuiFRibeiro我认为“ jail”是* BSD上的常用术语(它们的行为与chroots不同,因为它们更安全),而我认为“ chroot”在Linux上更常用。我相信,就安全性而言,在Linux上相当于BSD监狱的就是Linux容器。感谢您的输入。
亚历山大

1
谢谢您的回答,行得通。我应该指出,我投入/opt/oldlibs//etc/ld.so.conf.d/R.conf。(该R.conf文件已经存在,其中包含R的标准lib路径。)
Nick

0

我对Arch Linux的经验

systemctl start mongodb给进程启动错误

我只是点击 journalctl -xe来检查当前日志

它显示缺少libboost_system.so.1.64.1(旧的)

这是一个sumlink我使用解决它

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

readlink告诉我symlink指向/usr/lib/libboost_system.so.1.65.1

我从/ var / cache / pacman / pkg中提取boost-libs 1.64并将其所有/ lib文件粘贴到/ usr / lib中,也跳过以覆盖旧文件

这解决了我打破依赖关系的进一步工作,如果不解决,使符号链接丢失像

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

经验积累

不要寻找补丁,请始终使用 pacman -Suy && pacman -S package_name安装任何内容。不支持部分更新(对于arch)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.