Какие зависимости rpmlib(foo) и mvn(foo) указаны как "теги требований" пакета RPM?

Вопрос или проблема

Предположим, что я установил пакет ongres-scram на Fedora 40.

Тогда

$ rpm --query --requires ongres-scram

выдает мне список “тегов зависимости”, которые необходимы для установки этого пакета:

javapackages-filesystem
mvn(com.ongres.stringprep:saslprep)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsZstd) <= 5.4.18-1
rpmlib(RichDependencies) <= 4.12.0-1

В свою очередь

$ rpm --query --provides ongres-scram

выдает мне “теги зависимости”, которые предоставляет установка:

mvn(com.ongres.scram:common) = 2.1
mvn(com.ongres.scram:common:pom:) = 2.1
ongres-scram = 2.1-13.fc40

Тег зависимости javapackages-filesystem разрешается соответствующим пакетом:

$ rpm --query --whatprovides javapackages-filesystem
javapackages-filesystem-6.2.0-9.fc40.noarch

Тег зависимости mvn(foo) безусловно относится к процессу сборки на основе maven и может быть разрешен:

$ rpm --query --whatprovides "mvn(com.ongres.stringprep:saslprep)"
ongres-stringprep-1.1-12.fc40.noarch
$ dnf provides "mvn(com.ongres.stringprep:saslprep)"
...
ongres-stringprep-1.1-12.fc40.noarch : RFC 3454 Подготовка интернационализированных строк на чистом Java
...

Но тег зависимости rpmlib(foo) не разрешается:

$ rpm --query --whatprovides "rpmlib(FileDigests)"
no package provides rpmlib(FileDigests)
$ dnf provides "rpmlib(FileDigests)"
Ошибка: Не найдено совпадений....

Может быть, этот тег обозначает требование к системе для сборки RPM-пакета. Но что его предоставляет?

Более того, кажется

rpmlib(FileDigests) <= 4.6.0-1

указывает на требование к довольно старой версии, так как текущая версия rpm составляет 4.19.1.1?

rpmlib зависимости – это флаги возможностей, хранящиеся в заголовках RPM, указывающие на функции, которые rpm сам должен поддерживать для обработки RPM. Версионные отношения читаются задом наперед: RPM ongres-scram требует версию rpm, которая поддерживает полезные нагрузки, сжатые с использованием zstd, и эта функция доступна только в rpm версии 5.4.18 или новее.

Вы можете увидеть, какие возможности поддерживает ваша команда rpm, выполнив

rpm --showrc | grep rpmlib

Если вы изучите зависимости с помощью yum или dnf, вы увидите, что эти зависимости rpmlib не видны: они связаны с конкретными файлами RPM, а не с общими свойствами самого пакета. Это означает, что перестройка пакета с использованием других настроек не должна повлиять на “реальные” зависимости (библиотеки и т. д.), но может повлиять на требуемые возможности (например, если RPM сжат с использованием другого алгоритма).

mvn зависимости – это зависимости от пакетов Maven, как вы и обнаружили.

Ответ или решение

Зависимости rpmlib(foo) и mvn(foo) в RPM-пакетах представляют собой специфические требования к функциям и библиотекам, которые необходимы для установки и работы пакета.

Зависимости rpmlib(foo)

Зависимости, начинающиеся с rpmlib, указывают на функциональные возможности, которые требуются для работы RPM-менеджера с данным пакетом. Эти зависимости не относятся к конкретным пакетам или библиотекам, а скорее указывают на возможности, поддерживаемые версию RPM, используемого в системе. Например:

  • rpmlib(FileDigests) <= 4.6.0-1 означает, что пакет требует, чтобы версия RPM поддерживала возможность вычисления контрольных сумм файлов, как минимум версии 4.6.0-1.
  • rpmlib(PayloadIsZstd) <= 5.4.18-1 указывает, что пакет использует алгоритм сжатия Zstandard и требует, чтобы версия RPM была 5.4.18 или выше.

Чтобы увидеть, какие возможности поддерживает ваш текущий RPM, вы можете выполнить команду:

rpm --showrc | grep rpmlib

Таким образом, если вы видите rpmlib(foo), это не означает, что отсутствует какой-либо пакет; это значит, что ваша версия RPM должна поддерживать указанные функции. Если, например, в системе установлена версия RPM 4.19.1.1, она, как правило, будет поддерживать большинство возможностей, указанных в зависимостях rpmlib.

Зависимости mvn(foo)

Зависимости, начинающиеся с mvn, относятся к библиотекам, используемым в проектах на основе Maven. Эти зависимости указывают на сторонние библиотеки или компоненты, которые необходимы для сборки или работы вашего пакета. В примере, который вы привели:

  • mvn(com.ongres.stringprep:saslprep) указывает на то, что пакет ongres-scram зависит от Maven-пакета saslprep из группы com.ongres.stringprep.

Вы можете выяснить, какие пакеты предоставляют зависимости mvn, с помощью команды:

rpm --query --whatprovides "mvn(com.ongres.stringprep:saslprep)"

Это позволит вам обнаружить, какие именно RPM-пакеты могут удовлетворить указанную зависимость.

Вывод

Зависимости rpmlib(foo) и mvn(foo) играют важную роль в управлении зависимостями RPM-пакетов, указывая на требования к функционалу RPM и используемым библиотекам в проектах на Maven соответственно. Чтобы корректно обновлять или устанавливать пакеты, необходимо учитывать как возможности RPM, так и зависимости, которые требуются для Maven.

Оцените материал
Добавить комментарий

Капча загружается...