设想:
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