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

目前我正在尝试安装一个rpm secured_soft_2.0.0.rpm,我无法安装,因为我们已经安装了secure_soft_1.3.0。

要求是我们需要安装两个版本。

复杂性:

这些软件包inturn有相关的rpm(很多),所有这些相互依赖的rpm也有版本ex:secured_soft_1.3.0只适用于版本为1.3的软件包,而secured_soft_2.0.0.rpm只适用于版本2.0的依赖。 所以所有这些依赖关系也需要重新安装,甚至这些依赖关系应该并行安装,而不删除旧的。

最后,这两个版本都包含共享库,这些共享库的名称中没有版本号。

#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下可用

我试图重命名,但仍然不能安装。

是否有可能改变这些东西的位置,并完成任务有什么办法可以做到这一点。

目前,IAM卡在这里,将需要在这方面的意见鉴赏这方面的任何帮助。

由于程序使用相同的文件名,并且您需要将它们放在同一台计算机上,因此您可以将较旧的版本移动到另一个目录树,并使其在此处工作。

您可以使用许多没有编译路径名的应用程序来做到这一点。

例如,

  • 安装旧版本(这听起来像你从哪里开始)
  • 对于每个包含未版本化的可执行文件,库和相关文件的软件包使用rpm -ql
  • 使用tar来捕获这些文件的存档,相对于/usr (但是省略了不是由包所拥有的目录)。
  • 创建一个新的目录,例如/usr/local/myapp并在那里解压缩旧版本。
  • 根据需要更新新位置中的配置文件

对于这样的应用程序,我会运行一个脚本,更新PATH (也许设置LD_LIBRARY_PATH )强制程序从新的位置运行。 你可以使用stracelsof这样的工具来验证它是否工作,即通过查找程序打开的文件。

一旦您的旧版本在新位置正常工作,您可以卸载它的RPM并安装新版本的应用程序。

警告:如果较新版本的软件包是从较新版本的操作系统中复制的,不管您是否选择重新编译较新软件包以适应现有系统的替代方法,该任务可能超出您的能力。

构建新的/定制的软件包是重新编译新版本的一种途径。 如果您有每个部分的源代码RPM,那么这是一个起点:

  • 从源unrpm提取文件,例如使用诸如unrpm的脚本(例如,参见HowTo:提取RPM包文件而不安装它 ),以及
  • 将这些提取的文件复制到您的构建树中的预期位置,例如$HOME/rpmbuild/SOURCES$HOME/rpmbuild/SPECS
  • 修改spec文件以使用替代位置
  • 使用修改后的spec文件构建新的/修改的包。

不,开箱即用,你不能。

我强烈建议寻找Docker ,在那里你可以把每个人都放到自己的容器中,让他们照顾他们所有的依赖问题。