我最近发现了软件集合,并了解它们如何允许我通过为每个集合引入命名空间来安装多个版本的软件。在 Enterprise Linux 上,这很简洁,因为我将能够保持系统的常规稳定性,同时现在能够在某些软件版本更新时轻松更新它们(不仅仅是安全更新,还有功能!)
我希望我系统的主网络服务器是 httpd 2.4。软件集合中可用的版本centos-sclo-rh
目前为 2.4.12,而可用的版本base
仅为 2.4.6。所以我从那个 SCL 安装了 httpd 并启用了它:
> scl enable httpd24-httpd bash
然后使用 systemctl 启用并启动服务
> systemctl enable httpd24-httpd
> systemctl start http24-httpd
所以我希望我的系统应该明白我现在安装了一个网络服务器。但是,当我尝试从 安装 phpmyadmin 时epel
,它仍然希望从安装标准httpd
包base
作为依赖项。
查看 rpm 的一些机制,我刚刚了解到包可以在其规范文件中列出虚拟包之类的 Provides 行webserver
,实际上 httpd 的 src rpm 有一个 Provides: webserver 行。我猜httpd24-httpd
我从 SCL 获得的包没有那个描述符。
如何让我的系统识别httpd
从 SCL 安装和启用的webserver
虚拟包,以便它不想安装httpd
包base
来满足webserver
虚拟依赖项?
使用 RPM 包管理器,您可以简单地提供 foo 4 bar。这是一个愚蠢的虚拟规范示例,纯粹主义者将删除 rpmlint ;-) 警告:
使用 rpmdevtools 和朋友构建它:
安装虚拟包:
正如@Michael Hampton 所建议的那样,我联系了 SCL 小组,因为它维护了这个
httpd24-httpd
包(和许多其他的)。这是我从乔·奥顿那里得到的回复:在这种特殊情况下,我更看重系统可维护性的易用性,而不是由于不需要
httpd
和httpd24-httpd
安装而导致的较小的已安装软件占用空间;所以我安装了这两个并且很好。如果您真的不想同时安装这两个软件包,那么 Joe 建议您可以考虑一种可能的前进方式。