假设我已经在 Fedora 40 上安装了该包ongres-scram
。
然后
$ 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
依赖标签肯定与基于maven 的mvn(foo)
构建过程有关,可以解决:
$ 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 Preparation of Internationalized Strings in pure Java
...
但依赖标签rpmlib(foo)
尚未解析:
$ rpm --query --whatprovides "rpmlib(FileDigests)"
no package provides rpmlib(FileDigests)
$ dnf provides "rpmlib(FileDigests)"
Error: No matches found....
可能标签代表系统对构建 RPM 包的要求。但是由什么提供它呢?
此外似乎
rpmlib(FileDigests) <= 4.6.0-1
是否表示需要相当旧的版本,因为当前版本rpm
是 4.19.1.1?
rpmlib
依赖项是存储在 RPM 标头中的功能标志,指示其本身必须支持哪些功能rpm
才能处理 RPM。版本关系从后往前读:ongres-scram
因此,RPM 需要一个rpm
支持-compressed 有效负载的版本,并且此功能仅在5.4.18 或更高版本zstd
中可用。rpm
rpm
您可以通过运行来查看命令支持哪些功能如果您使用
yum
或检查需求,dnf
您会发现这些rpmlib
依赖项是不可见的:它们与特定的 RPM 文件相关联,而不是软件包本身的一般属性。也就是说,使用不同的设置重建软件包不会影响“实际”依赖项(对库等),但可能会影响所需的功能(例如,如果使用不同的算法压缩 RPM)。mvn
正如您所发现的,依赖项是 Maven 包的依赖项。