如何用yum安装两个不同版本的相同包

时间:2014-03-15 15:34:00

标签: package rpm yum

说我想安装相同软件包的两个不同版本。

具体来说,我想为GNOME,gjs包安装两个版本的Javascript绑定。我希望gjs-1.38.1-1.fc20.x86_64gjs-1.36.1-1.fc19.x86_64

Fedora 20中还有其他软件包很大程度上取决于gjs-1.38.1-1.fc20.x86_64,因此无法用gjs-1.36.1-1.fc19.x86_64替换它。

我有一个与gjs-1.38.1-1.fc20.x86_64不兼容的特定程序,需要前一个程序。

因此可以安装以前版本的gjs gjs-1.36.1-1.fc19.x86_64并通过/usr/bin/env gjs1 by magic magic!)访问它以运行不兼容的程序而不会破坏什么?

3 个答案:

答案 0 :(得分:0)

据我所知,没有一个简单的yum命令可以做你想做的事情,它将涉及一点点努力。我将列出一些我所知道的方法。可能是您的用例消除了以下一个或多个或全部。

软件集合(SCL)。 SCL的目的是能够安装多个版本的软件包或软件包。有一个User Guide,并且有一些page here包含一些集合,但它们似乎更专注于RHEL。如果你选择这个选项,我认为你必须创建自己的收藏。

您可以决定在自己的安装根目录中安装F19软件包。 Here's a blog post解释了如何执行此操作(示例是生皮根,但也应该使用f19也可以)。这可能是努力最少的道路,但我不能100%确定它是否适用于您的情况。它需要安装很多东西,但是有必要这样做,因为不同的Fedora版本中的软件包将针对不同的依赖集构建。

这种方式可能会或可能不会起作用,我认为至少应该达到某种程度;但可能需要相当大的努力。它基于这样的假设:您想要的实际上是gjs-1.36.1,而不是之前的fedora版本中的任何打包版本。如果您转到source repository for gjs并单击版本,您将能够下载所需版本的存档文件。然后,您可以从源构建它,在配置步骤中指定一个不同于默认值/usr的前缀 - 也许/usr/local可以。然后,如果安装了它,则可以指定完整路径,例如/usr/local/bin/gjs而不是/usr/bin/gjs。请注意,默认值将是$PATH中首先找到的默认值,因此如果/usr/local/bin位于/usr/bin之前,那么您要么想要更改PATH订单,或者将您的自定义版本安装到与/usr/local不同的位置。

与上一个选项相关,您可以获取gjs的RPM规范文件并对其进行编辑,以便您将其命名为其他名称,并将其安装到其他位置。如果您不习惯构建gjs,这可能会更直接,因为它有关于如何编译的rpmbuild的说明。如果您选择上一个选项,您可能至少可以从中获得一些提示。请参阅gjs spec file here

也许可以使用alternatives做一些魔术,就像使用java和其他包做的那样。这可能需要您使用上述规范文件,但也需要对其进行一些修改以使用alternatives - 可能为两个版本安装自定义程序包,1.36.1和1.38.1。

祝你好运!

答案 1 :(得分:0)

这通常在Fedora / RedHat世界中处理的方式是创建一个辅助" compat"包,所以它就像compat-gjs-136,你可以让spec文件将136后缀附加到所有可执行文件和库。您可以查看的一些示例包括compat-gcc-34compat-expat1

答案 2 :(得分:-1)

yum --nogpgcheck --releasever=20 install package-name

作为最后的手段可能是一个丑陋的选择。不建议在传统系统中这样做。