Web-Server

讓 Yum 認識到 httpd24-httpd(來自 SCL)提供了 webserver 虛擬包

  • August 12, 2020

我最近發現了軟體集合,並了解它們如何允許我通過為每個集合引入命名空間來安裝多個版本的軟體。在 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,它仍然希望從安裝標準httpdbase作為依賴項。

研究了一些 rpm 的機制,我剛剛了解到,包可以在其規範文件中列出虛擬包之類的 Provides 行webserver,實際上 httpd 的 src rpm 有一個 Provides: webserver 行。我猜httpd24-httpd我從 SCL 獲得的包沒有那個描述符。

如何讓我的系統辨識httpd從 SCL 安裝和啟用的webserver虛擬包,以便它不想安裝httpdbase來滿足webserver虛擬依賴項?

正如@Michael Hampton 所建議的那樣,我聯繫了 SCL 小組,因為它維護了這個httpd24-httpd包(和許多其他的)。這是我從喬·奧頓那裡得到的回复:

根據定義,SCL 不應在包級別與系統包兼容。正如您所發現的,依賴於“webserver”的軟體包通常希望將配置文件放入 /etc/httpd/conf.d,而這不適用於 SCL httpd24。

理論上,您可以彌合需要“webserver”和 httpd24 的軟體包之間的差距:擁有 /etc/httpd/conf.d,將文件放在 /opt/rh/…/conf.d/ 中,該文件具有 IncludeOptional目錄,並提供“網路伺服器”。不確定我會推薦它,但應該可以進行一些黑客攻擊。

在這種特殊情況下,我更看重系統可維護性的易用性,而不是由於不需要httpdhttpd24-httpd安裝而導致的較小的已安裝軟體佔用空間;所以我安裝了這兩個並且很好。如果您真的不想同時安裝這兩個軟體包,那麼 Joe 建議您可以考慮一種可能的前進方式。

使用 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 

引用自:https://serverfault.com/questions/770417