Вопрос или проблема
Я искал, но не смог найти ничего о том, как указывать рекомендуемые пакеты в spec-файле.
Я бы даже не считал это возможным, если бы не увидел это в spec-файле для Mono 2.10.9. В нем написано следующее:
Recommends: libgdiplus0 >= 2.6
Но rpmbuild определенно жалуется на это. Я предполагаю, что это не совсем разрешено. Так ли это? Есть ли другой способ рекомендовать другие пакеты во время фазы установки?
Да, это возможно, но не во всех дистрибутивах.
- Fedora>=24: Слабые зависимости — это Suggests и Recommends, а также Supplements и Enhances
- SUSE>=10: Suggests и Recommends
- CentOS>=8. Я еще не нашел ссылок для CentOS.
RPM не имеет концепции “рекомендуемых” пакетов, как это есть в DEB. Я участвовал в обсуждениях этого вопроса, и вывод был таков, что это просто не имеет особого смысла. “Рекомендуемые” для какой цели? “Рекомендуемые” могут варьироваться от “Вам, возможно, стоит это тоже рассмотреть” до “Очень маловероятно, что это будет полезно без…” Зачем вам это предложение? Либо это требуется, либо пользователь знает, что делать. RPM предназначен для полностью автоматизированного развертывания, остановка, чтобы спросить пользователя, следует ли устанавливать рекомендуемые пакеты, противоречит его основной философии.
Вам стоит просмотреть страницы по упаковке на вики Fedora Project. Я также посмотрел раздел Как создать RPM пакет и там тоже не увидел упоминаний об этом.
В дополнение к ответу sebix, типы слабых зависимостей RPM (Recommends, Suggests, Supplements, Enhances) также поддерживаются в RHEL 8 и позже.
Хотя я не смог найти официальное подтверждение для CentOS, я предполагаю, что это уже не столь актуально после перехода на поток.
Хотя я не могу найти официальный источник, я также проверял это на Rocky 8, и это работает, я предполагаю, что пользователи CentOS, такие как OP, вероятно, сейчас используют его или Alma.
Ответ или решение
Вопрос о том, как указать рекомендуемые пакеты в файле спецификации RPM (spec file), актуален для многих разработчиков и системных администраторов, использующих RPM-пакеты для распространения программного обеспечения. Давайте рассмотрим этот вопрос более детально.
Понимание системы зависимостей RPM
Система пакетирования RPM изначально была разработана с акцентом на автоматизацию установки и управления пакетами, и у неё нет такой концепции, как «рекомендуемые» или «предлагаемые» пакеты, как это реализовано в системах, основанных на DEB, таких как Debian или Ubuntu. В RPM существуют основные категории зависимостей, такие как Requires
, Conflicts
, Provides
, но «рекомендуемые» зависимости не находят своего отражения в основном инструменте управления пакетами.
Однако в некоторых дистрибутивах Linux, таких как Fedora, открытая SUSE и RHEL 8, были внедрены «слабые зависимости». Эти зависимости могут быть представлены в виде Recommends
, Suggests
, Supplements
и Enhances
.
Слабые зависимости
-
Fedora (>= 24): В Fedora можно использовать слабые зависимости, такие как
Recommends
, которые относительны к группам пакетов, добавляя возможность устанавливать дополнительные пакеты, которые могут улучшить функциональность основного пакета, но не являются критически необходимыми. -
openSUSE (>= 10): В этом дистрибутиве также поддерживаются зависимости, такие как
Suggests
иRecommends
, что позволяет упаковщикам указывать дополнительные пакеты, которые могут быть полезны пользователям. -
RHEL 8 и его производные, такие как Rocky Linux и AlmaLinux: Эти дистрибутивы теперь поддерживают концепцию слабых зависимостей, что также может быть полезно для разработчиков, стремящихся свести к минимуму необходимый объем программного обеспечения для установки, но предлагая пользователям дополнительные возможности.
Исходные проблемы и рекомендации
Указание в спецификации RPM, подобных следующим:
Recommends: libgdiplus0 >= 2.6
может вызвать ошибки в различных дистрибутивах. Особенно это явно в CentOS, где подобное поведение не документировано и не поддерживается.
Как действовать
Если вы хотите рекомендовать пакеты, то на данный момент вы можете:
-
Использовать слабые зависимости, если ваш дистрибутив это поддерживает. Проверьте, какие версии вашего дистрибутива могут содержать эту поддержку.
-
Документация и метаданные: Рекомендуется предоставить пользователям документацию, в которой будут описаны дополнительные пакеты, которые могут быть установлены для улучшения работы вашего программного обеспечения.
-
Скрипты постинсталляции: Если необходимо, можно создать скрипты, которые будут проверять наличие рекомендуемых пакетов и выводить предупреждения для пользователя, если они отсутствуют. Это может быть не идеальным решением, но позволит пользователю самостоятельно принять решение о необходимости установки этих пакетов.
Заключение
Таким образом, хотя RPM не поддерживает концепцию рекомендованных пакетов так же, как это реализовано в DEB, современные дистрибутивы Linux сделали шаги к ее внедрению через слабые зависимости. Если вы разрабатываете пакеты для дистрибутивов, поддерживающих слабые зависимости, убедитесь, что вы ознакомлены с документацией и спецификациями вашего дистрибутива, чтобы правильно настроить свои пакеты.