2016-03-11 7 views
0

RPM очень гибкий в том, что он позволяет вам (строителю пакетов) указывать в разделе «Предоставляет». Можно указать одно и то же имя виртуального пакета несколько раз, потенциально с разными версиями. Он также позволяет вам указать пакет с отношениями версии, помимо равенства.Есть ли RPM, которые предоставляют несколько или сложных версий для одного виртуального пакета, существуют в дикой природе?

Таким образом, в то время как следующий может быть типичным Обеспечивает линию для спецификации RPM:

Provides: virtual-name, virtual-version = 1.0, local-version = 1.5

также допускается следующее:

Provides: virtual-name, virtual-name = 1.0, virtual-name = 1.5

или даже это:

Provides: virtual-name < 1.0, virtual-name >= 1.5

rpmbuild вполне с радостью создаст эти RPM для вас, которые запросят правильно, используя rpm и могут быть установлены как ожидалось. У меня есть два вопроса: во-первых, существуют ли какие-либо пакеты, которые фактически используют эти виды сложных спецификаций Provides? Во-вторых, как решатель зависимостей RPM интерпретирует третий пример с < и> = версиями?

+0

Посмотрите на 'postfix.spec', может быть? [Этот пример] (http://pkgs.fedoraproject.org/cgit/rpms/postfix.git/tree/postfix.spec?id=25f5011e85c22c915a5a2f301308e9d0890ea811) имеет виртуальные теги для 'Обеспечивает: MTA smtpd smtpdaemon server (smtp)'. Не выглядит настолько сложным, насколько вы хотите. –

ответ

0

У RPM нет решателя зависимости. Yum/DNF имеет решателя зависимостей. RPM просто получите список пакетов для установки/удаления/обновления и проверьте, удовлетворены ли все ограничения. Если да, то это будет продолжаться, и если нет, тогда будет напечатана ошибка.

И как DNF обрабатывает это? Он просто переводится в дерево отношения, и он пытается найти лучший путь на графике, что является просто математической проблемой.

Относительно exacmple. Множество пакетов используют одиночные (mariadb-server, httpd ...), но я не знаю ни одного примера, который будет использовать два варианта с одним и тем же именем, но с другой версией. Это может иметь смысл в случае переименования пакета, а затем вы хотите переименовать его обратно в исходное имя. Но я не знаю ни одного примера в реальной жизни.

+0

Возможно, «решатель зависимостей» - это неправильный выбор слов, но сам RPM имеет код, который определяет зависимости IF, и этот код проверки зависимостей, который выполняет depsolvers yum/DNF, удовлетворяет. Как таковой, для меня не имеет значения, что делает yum/DNF, я просто забочусь о том, «что RPM будет считать удовлетворительным требованием в этом случае». –

+0

Требуется: виртуальное имя <1.0 будет удовлетворено, Requires: virtual-name == 1.2 не будет и требуется: virtual-name> = 1.5 будет выполнено. – msuchy

 Смежные вопросы

  • Нет связанных вопросов^_^