目前我正在尝试安装 rpm secured_soft_2.0.0.rpm 并且我正在 无法安装它,因为我们已经安装了 secured_soft_1.3.0。
要求是我们需要安装两个版本。
复杂性:
这些包反过来有相关的 rpm(很多)和所有这些 相互依赖的 rpm 也有版本 例如:secured_soft_1.3.0 仅适用于 1.3 版本的软件包, 和 secured_soft_2.0.0.rpm 仅适用于 2.0 版的依赖项。 所以所有这些依赖项也需要重新安装,甚至这些 依赖应该并行安装,不要删除旧的。
最后,这两个版本都包含共享库和这些共享 lib 的名称中没有版本号。
#rpm -ivh secured_soft_2.0.0.rpm
error: Failed dependencies:
init-class >= 1.4.17.1-1 is needed by secured_soft_2.0.0.rpm
init-connection-interface >= 2.0.11.0 is needed by secured_soft_2.0.0.rpm
init-logger >= 2.0.11.0 is needed by secured_soft_2.0.0.rpm
init-security >= 2.0.11.0 is needed by secured_soft_2.0.0.rpm
正如我所指定的,我们已经安装了 secured_soft_1.3.0.rpm 并且 以上依赖项也可用,但版本不同。 所以我们需要安装上面的依赖,还需要旧版本的 旧 rpm 的依赖关系
例如:secured_soft_2.0.0.rpm 有 libArt.so libSec.so 等等 复制到/usr/lib
同样secured_soft_1.3.0.rpm还有libArt.so libSec.so等等 /usr/lib 中已经可用
我尝试重命名,但仍然无法安装。
是否可以更改这些 so 的位置并完成这些事情 有什么办法可以做到吗?
目前,我被困在这里,需要这方面的建议 感谢对此的任何帮助。
最佳答案
由于这些程序使用相同的文件名,并且您需要将它们放在同一台机器上,您可能能够将旧版本移动到另一个目录树并让它在那里工作 .
您可以对许多没有内置路径名的应用程序执行此操作。
例如,
- 安装旧版本(这听起来像是您从哪里开始)
- 对包含未版本控制的可执行文件、库和相关文件的每个包使用
rpm -ql
。 - 使用 tar 获取这些文件的存档,相对于
/usr
(但省略不属于包的目录)。 - 创建一个新目录,例如
/usr/local/myapp
并在那里解压旧版本。 - 根据需要更新新位置的配置文件
对于这样的应用程序,我会在更新 PATH
(并且可能设置 LD_LIBRARY_PATH
)的脚本中运行,以强制程序从新位置运行。您可以使用 strace
等工具验证这是否有效和 lsof
,即通过查找程序打开的文件。
一旦旧版本在新位置正常运行,您可以卸载其 rpm 并安装新版本的应用程序。
警告:如果较新的软件包是从较新版本的操作系统复制的,那么无论您是否选择重新编译的替代方法,该任务都可能超出您的能力更新的软件包以适应现有系统。
构建新的/定制的包是重新编译新版本的一种途径。如果您有每个部分的源 RPM,那就是一个起点:
- 从源 RPM 中提取文件,例如,使用
unrpm
之类的脚本(参见示例 HowTo: Extract an RPM Package Files Without Installing It ),以及 - 将这些提取的文件复制到它们在构建树中的预期位置,例如
$HOME/rpmbuild/SOURCES
和$HOME/rpmbuild/SPECS
< - 修改规范文件以使用替代位置
- 使用修改后的规范文件构建新的/修改后的包。
关于linux - 如何安装相同 rpm 的两个不同版本并使它们并行工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255132/