linux - 如何安装相同 rpm 的两个不同版本并使它们并行工作

标签 linux rpm rpmbuild rpm-spec

目前我正在尝试安装 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/

相关文章:

linux - rpmbuild 设置错误的文件所有权说 root :root (wrong owner/group build:users)

linux - rpmbuild 不包括符号链接(symbolic link)共享对象作为提供

rpm - 自定义 RPM,用于传送文件并备份任何预先存在的同名文件

macros - 是否有任何语法或技巧可以创建多行 rpm 规范文件宏

python - RPi 上的 Raspbian - Python 脚本在 IDLE shell 中运行,但不在 cmd 中运行

linux - 动态链接器和动态加载器有什么区别?

c++ - 如何编译并运行一个hello world JUCE程序?

linux - 可以使用 RPM 分发 *.bin 文件吗

linux - 安装时可以将用户定义的参数传递给 RPM 吗?

linux - 为什么我执行的 sbrk 系统调用不起作用?