Недавно я обнаружил коллекции программного обеспечения и понимаю, как они позволяют мне устанавливать несколько версий программного обеспечения, вводя пространство имен для каждой коллекции. В 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 обеспечивает webserver
виртуальный пакет, чтобы он не хотел устанавливать httpd
посылка из base
выполнить webserver
виртуальная зависимость?
С помощью диспетчера пакетов 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
Как было предложено @Michael Hampton, я обратился к группе SCL, поскольку она поддерживает httpd24-httpd
пакет (и многие другие). Вот ответ, который я получил от Джо Ортона:
По определению не ожидается, что SCL будут совместимы на уровне пакета с системными пакетами. Пакеты, зависящие от «веб-сервера», обычно хотят поместить файл конфигурации в /etc/httpd/conf.d, как вы обнаружили, и это не работает с SCL httpd24.
Теоретически вы можете преодолеть разрыв между пакетами, для которых требуется "веб-сервер" и httpd24: own /etc/httpd/conf.d, поместите файл в /opt/rh/.../conf.d/, который имеет для этого IncludeOptional каталог и укажите «веб-сервер». Не уверен, что рекомендовал бы это, но должно быть возможно работать с некоторым взломом.
В данном конкретном случае я ценю простоту обслуживания системы по сравнению с меньшим объемом установленного программного обеспечения, возникающим из-за отсутствия необходимости в обоих. httpd
и httpd24-httpd
установлены; поэтому я установил оба, и меня это устраивает. Если вы действительно не хотите, чтобы эти два пакета устанавливались одновременно, то Джо предложил возможный путь, который вы можете рассмотреть.