我最近发现了软件集合,并了解它们如何通过为每个集合引入一个名称空间来安装多个版本的软件。 在Enterprise Linux上,这样做很简单,因为我可以保持系统的正常稳定性,而且现在可以轻松更新特定版本的软件(不仅仅是安全更新,而且还包括function)!
我想我的系统的主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
所以我希望我的系统应该明白,我现在有一个networking服务器安装。 但是,当我尝试从epel安装phpmyadmin时,它仍然想从base安装标准的httpd包作为依赖。
看一下rpms的机制,我刚刚了解到软件包的spec文件列表中有一个提供行,列出虚拟软件包,比如webserver ,实际上httpd的src rpm有一个提供:web服务器行。 我猜测我从SCL获得的httpd24-httpd包没有这个描述符。
我怎样才能让我的系统识别已安装和启用的httpd从SCL提供的webserver虚拟包,以便它不希望从base安装httpd包履行webserver虚拟依赖?
正如迈克尔·汉普顿(@Michael Hampton)所build议的那样,我接触到SCL集团,因为它维护着httpd24-httpd软件包(以及其他许多软件包)。 这是我从Joe Orton那里得到的答复:
根据定义,SCL不能与包系统兼容。 依赖于“web服务器”的软件包通常希望将configuration文件放到/etc/httpd/conf.d中,正如你发现的那样,并且这对SCL httpd24不起作用。
您理论上可以在需要“webserver”和httpd24:拥有/etc/httpd/conf.d的软件包之间架起一道空白,在/opt/rh/…/conf.d/中放置一个包含IncludeOptional的文件目录,并提供“networking服务器”。 不知道我会推荐它,但应该有可能得到一些黑客的工作。
在这种特殊情况下,我重视系统可维护性,而不需要安装httpd和httpd24-httpd 。 所以我安装了这两个,很好。 如果你真的不想同时安装这两个软件包,那么乔就build议了一个可以考虑的方法。