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

时间:2015-10-21 09:04:55

标签: 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的dependecies。 因此,所有这些依赖关系也需要重新安装,甚至是这些 应该并行安装依赖项,而不删除旧的。

最后,这两个版本都包含共享库,这些共享库 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的依赖关系

ex: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卡在这里,需要就此提出建议 感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

您可以使用许多没有编译路径名的应用程序来执行此操作。

例如,

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

对于这样的应用程序,我会在更新PATH(可能设置LD_LIBRARY_PATH)的脚本中运行,以强制程序从新位置运行。您可以使用stracelsof等工具验证是否有效,例如,查找程序打开的文件。

旧版本在新位置正常运行后,您可以卸载其rpms并安装新版本的应用程序。

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

构建新/自定义程序包是重新编译较新版本的一种途径。如果你有每个部分的source-RPMs,那就是一个起点:

  • 从source-RPM中提取文件,例如,使用unrpm等脚本(例如参见 HowTo: Extract an RPM Package Files Without Installing It )和
  • 将这些提取的文件复制到构建树中预期的位置,例如$HOME/rpmbuild/SOURCES$HOME/rpmbuild/SPECS
  • 修改规范文件以使用备用位置
  • 使用修改后的spec文件构建新的/修改过的包。

答案 1 :(得分:0)

不,开箱即用,你不能。

我强烈建议您查看Docker,您可以将每个人放入自己的容器中,让他们处理所有依赖问题。