让 Yum 识别 httpd24-httpd(来自 SCL)提供了 webserver 虚拟包

让 Yum 识别 httpd24-httpd(来自 SCL)提供了 webserver 虚拟包

我最近发现了软件集合,并了解了它们如何允许我通过为每个集合引入命名空间来安装多个版本的软件。在 ​​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 获得的软件包没有该描述符。

我怎样才能让我的系统识别已安装并启用的httpdSCL 提供的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”。我不确定我是否推荐这样做,但通过一些黑客攻击应该可以让它工作。

在这个特定情况下,我更看重系统可维护性的易用性,而不是因为不需要同时安装httpdhttpd24-httpd安装而导致的安装软件占用空间更小;所以我安装了这两个软件包,对此我感到很满意。如果您真的不想同时安装这两个软件包,那么 Joe 提出了一种您可以考虑的可能方法。

相关内容