我最近发现了软件集合,并了解了它们如何允许我通过为每个集合引入命名空间来安装多个版本的软件。在 Enterprise Linux 上,这很棒,因为我将能够保持系统的常规稳定性,同时现在能够轻松地更新某些版本的软件(不仅是安全更新,还有功能!)
我希望我的系统的主要 Web 服务器是 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
因此我希望我的系统能够理解我现在已经安装了一个 Web 服务器。但是,当我尝试从 安装 phpmyadmin 时epel
,它仍然希望httpd
从 安装标准包base
作为依赖项。
研究了一下 rpm 的机制,我刚刚了解到软件包可以在其 spec 文件中有一个 Provides 行,列出虚拟软件包,例如webserver
,并且 httpd 的 src rpm 确实有一个 Provides: webserver 行。我猜httpd24-httpd
我从 SCL 获得的软件包没有该描述符。
我怎样才能让我的系统识别已安装并启用的httpd
SCL 提供的webserver
虚拟包,以便它不想httpd
从中安装包base
来满足webserver
虚拟依赖关系?
答案1
使用 RPM 软件包管理器,您只需提供 foo 4 bar。这是一个愚蠢的虚拟规范示例,纯粹主义者会删除 rpmlint ;-) 警告:
$ cat ~/rpmbuild/SPECS/provides-httpd.spec
Summary: Dummy package to provide with httpd for httpd24
Name: provides-httpd
Version: 0.1
Release: 1%{?dist}
License: GPLv2
Requires: httpd24-httpd
Provides: httpd
BuildArch: noarch
%description
This is a no-brainer dummy package to provide httpd for SCL httpd24
You should read https://serverfault.com/questions/770417/make-yum-recognize-that-httpd24-httpd-from-scl-provides-the-webserver-virtual
%files
与 rpmdevtools 和朋友一起构建:
$ rpmbuild -ba ~/rpmbuild/SPECS/provides-httpd.spec
安装虚拟包:
$ sudo yum install ~/rpmbuild/RPMS/noarch/provides-httpd-0.1-1.el7.noarch.rpm
答案2
根据 @Michael Hampton 的建议,我联系了 SCL 小组,因为它维护着这个httpd24-httpd
软件包(以及许多其他软件包)。以下是我从 Joe Orton 那里得到的回复:
根据定义,SCL 不应在软件包级别与系统软件包兼容。依赖于“webserver”的软件包通常希望将配置文件放入 /etc/httpd/conf.d,正如您所发现的,而这不适用于 SCL httpd24。
理论上,您可以弥补需要“webserver”和 httpd24 的软件包之间的差距:拥有 /etc/httpd/conf.d,将一个文件放入 /opt/rh/.../conf.d/,该文件包含该目录的 IncludeOptional,并提供“webserver”。我不确定我是否推荐这样做,但通过一些黑客攻击应该可以让它工作。
在这个特定情况下,我更看重系统可维护性的易用性,而不是因为不需要同时安装httpd
和httpd24-httpd
安装而导致的安装软件占用空间更小;所以我安装了这两个软件包,对此我感到很满意。如果您真的不想同时安装这两个软件包,那么 Joe 提出了一种您可以考虑的可能方法。