Недавно я обнаружил коллекции программного обеспечения и понял, как они позволяют мне устанавливать несколько версий программного обеспечения, вводя пространство имен для каждой коллекции. В Enterprise Linux это удобно, потому что я смогу поддерживать постоянную стабильность моей системы, а теперь могу легко обновлять определенные версии программного обеспечения по мере их обновления (не только обновления безопасности, но и функции!)
Я бы хотел, чтобы основным веб-сервером моей системы был httpd 2.4. Версия, доступная из коллекции программного обеспечения centos-sclo-rh
, в настоящее время - 2.4.12, в то время как версия, доступная из base
, - только 2.4.6. Итак, я установил httpd из этого SCL и включил его:
> scl enable httpd24-httpd bash
А затем включил и запустил службу с помощью systemctl
> systemctl enable httpd24-httpd
> systemctl start http24-httpd
Так что я ожидал, что моя система должна понять, что теперь у меня установлен веб-сервер. Однако, когда я пытаюсь установить phpmyadmin из epel
, он все еще хочет установить стандартный пакет httpd
из base
в качестве зависимости.
немного о механике rpms, я только что узнал, что пакеты могут иметь строку Provides в своем файле спецификации, в которой перечислены виртуальные пакеты, такие как webserver
, и действительно, src rpm для httpd имеет строку Provides: webserver. Я' я предполагаю, что пакет httpd24-httpd
, который я получил из SCL, не имеет этого дескриптора.
Как мне заставить мою систему распознавать установленный и включенный httpd
из SCL предоставляет виртуальный пакет веб-сервера
, поэтому он не хочет устанавливать пакет httpd
из base
для выполнения виртуальной зависимости веб-сервера
?
Как предложил @Michael Hampton, я обратился к группе SCL, поскольку она поддерживает пакет httpd24-httpd
(и многие другие). Вот ответ, который я получил от Джо Ортона:
SCL не должны быть совместимы на уровне пакета с системные пакеты по определению. Пакеты, зависящие от "веб-сервера" обычно нужно поместить файл конфигурации в /etc/httpd/conf.d, как вы найдено, и это не работает с SCL httpd24.
Теоретически вы могли бы преодолеть разрыв между пакетами, которые требуют "webserver" и httpd24: own /etc/httpd/conf.d, перетащите файл в /opt/rh/.../conf.d/, у которого есть IncludeOptional для этого каталога, и предоставить "веб-сервер". Не уверен, что рекомендую, но должно быть можно получить работу с помощью некоторого взлома.
В этом конкретном случае я ценю простоту обслуживания системы по сравнению с меньшим объемом установленного программного обеспечения, возникающим из-за того, что не нужны оба httpd
и httpd24-httpd
установлено; поэтому я установил оба, и меня это устраивает. Если вы действительно не хотите, чтобы эти два пакета были установлены одновременно, то Джо предложил возможный путь, который вы можете рассмотреть.
С помощью диспетчера пакетов 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