首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行为不同基础库版本构建的程序?

如何运行为不同基础库版本构建的程序?
EN

Stack Overflow用户
提问于 2020-01-28 01:03:45
回答 1查看 292关注 0票数 0

busybox系统在glibc-2.24上附带了一个rpm命令。Fedora Core (FC)和/或更高版本的程序如何在此系统上运行?

我发现FC25也有相同的glibc版本。如果我下载FC25 rpm包并安装它们,有时它们就会运行。其他一些将会失败。我也想运行FC30或其他版本。

这个问题来自于FC包覆盖了同一目录中的现有库。我想要运行一个bash,你只需要安装bashglibcglibc-commonncurses-basencurses-libslibgcc。Bash将在安装这些包之后运行。因为这些是少量的libries,所以使用FC版本安装它们应该会带来不会影响bash的细微差别。但微小的差异可能会影响其他程序,或者安装更多的包可能会带来更多的差异,从而影响更多的程序。

如何解决这个问题?

我读过关于linux名称空间的文章。因此,一种开始的方法是创建一个名称空间,从而隔离主机文件系统。我尝试这样创建一个名称空间文件系统:

代码语言:javascript
复制
cd /root
mkdir root-fc30
cd root-fc30
mkdir dev proc tmp var
cp -a /bin /sbin /lib /usr ./
mount -o bind /proc proc
mount -o bind /dev dev
mkdir root-old

然后进入名称空间:

代码语言:javascript
复制
unshare -m --propagation slave
pivot_root . root-old

在此之后,可以安装新的包。但它仍然会覆盖现有的库。在隔离的名称空间中,如何采取进一步的步骤来解决这个问题?

还有其他更干净的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-30 14:19:21

更简单的答案是使用匹配的ld-linux.so来运行相应的应用程序,并相应地指向PATHLD_LIBRARY_PATHld-linux.so通常指向实体动态加载器.so文件。

作为示例,继续使用我上面问题中的名称空间来说明这是如何工作的:

当在名称空间中看到时,我们将旧系统的二进制文件保存在/opt目录中,并将FC30系统的所有新文件安装到普通根目录中。

将上面的复制命令cp -a /bin /sbin /lib /usr ./改为:

代码语言:javascript
复制
mkdir opt
cp -a /bin /sbin /lib /usr ./opt/

在名称空间中,通过添加修改后的PATHLD_LIBRARY_PATH以及ld-*.so,所有旧版本的二进制文件仍然可用。

第一步是使用名称空间中的旧版本启动一个shell:

代码语言:javascript
复制
LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib PATH=/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin \
/opt/lib/ld-2.24.so /opt/bin/sh

在这个可用的shell中,安装用于运行FC25版本的bash的包:

代码语言:javascript
复制
/opt/lib/ld-2.24.so /opt/bin/rpm -i bash-4.3.43-4.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i file-5.28-4.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i file-libs-5.28-4.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i glibc-2.24-10.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i glibc-common-2.24-10.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i ncurses-base-6.0-6.20160709.fc25.noarch.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i ncurses-libs-6.0-6.20160709.fc25.armv7hl.rpm
/opt/lib/ld-2.24.so /opt/bin/rpm -i libgcc-6.4.1-1.fc25.armv7hl.rpm

安装完这些包后,可以在执行以下命令后正常使用FC25版本的bash:

代码语言:javascript
复制
LD_LIBRARY_PATH=/lib:/usr/lib PATH=/bin:/sbin:/usr/bin:/usr/sbin /usr/bin/bash

安装FC30二进制文件和其他包的过程是相同的。一旦安装了足够的工具包,就可以使用FC版本的工具来安装更多的工具包。可以移除namespace中/opt下的旧版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59935725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档