基于软件主要版本的依赖项的 RPM 包(例如 php 5.3 及其附加组件,然后是 php 5.4)

基于软件主要版本的依赖项的 RPM 包(例如 php 5.3 及其附加组件,然后是 php 5.4)

设想:

PHP5.3

  • php-5.3.21-1_x86_64.rpm(根据)
  • php-pecl-memcache-3.0.6-1_x86_64.rpm(由于内部 PHP ABI 版本变化,因此依赖于上述内容)

PHP5.4

  • php-5.4.13-1_x86_64.rpm(根据)
  • php-pecl-memcache-3.0.7-1_x86_64.rpm(由于内部 PHP ABI 版本变化,因此依赖于上述内容)

这是一个关于 RPM 和版本控制的更一般的问题,但我将特别将其与 PHP 联系起来,因为这是我目前正在研究的部分。然而,它也可能与任何需要特定 API/ABI 版本的软件的库/包有关(同样适用于 apache/httpd、python 等)。

问题

我目前正在升级到 PHP 5.4,正在寻找一种使用 yum/rpm 的方法,以允许某些服务器运行旧版 PHP 5.3,我想知道实现此目的的最佳方法。上述问题是(如果所有软件包都在一个 yum 存储库中),PHP5.3 服务器(版本锁定为 5.3)看到 php-pecl-memcache(3.0.6 < 3.0.7)有“升级”,并尝试更新,但遇到了依赖性错误,因为软件包 php-pecl-memcache-3.0.7 需要随 5.4 软件包发布的 PHP ABI 版本。

基本上我想解决的问题是:

  • 有没有办法让 yum 说,'如果我安装了 php 5.3 软件包,则忽略依赖新版本的升级“?
  • 其次,这是使用我还没有想到的版本控制系统或 RPM/RPMBuild 中的 Epoch 关键字来实现的吗?
  • 我见过创建 php54-common-5.4.11...、httpd24-devel-2.4.2-、python27 等的另一种方法(不过,当以前的版本控制方案没有将主要版本指定为名称的一部分时,这看起来有点混乱)
  • 最后,也许唯一的方法是将包分成不同的存储库,这又带来了另一个有趣的问题,即命名包/版本/修订版本,以便您可以从文件名中知道它是为哪个主要版本/API 版本/时代构建的。(php-pecl-memcache-3.0.7_php54_x86_65.rpm)

想到这个问题,我感到困惑的是,我目前只关心小批量的软件包。RHEL/Fedora 软件包维护者在升级影响数千个库的主要版本时如何处理这个问题(python 从 2.6 升级到 2.7,或 perl/ruby/等)

谢谢大家,我试图使问题尽可能简短,但它相当复杂。

答案1

IUS 回购有一个

yum 插件替换

我已成功使用它将 php 5.3.3 升级到 5.3.2x。命令如下

yum replace php --replace-with php53u

我说的是http://iuscommunity.org/

相关内容