目标是跨基于 RPM 的 Fedora、CentOS、RedHat 等发行版识别软件包版本。我可以依赖上游版本在所有发行版上都相同吗?如果是,那么如何从命令行检索(RPM 或 DEB)上游版本号?
无法将此作为问题发布 -->
如果在 .spec 文件中指定了自动依赖项,则 rpm -qp -requires .rpm 中列出的这些依赖项是虚拟包。这些虚拟包不是库 soname,而只是虚拟包名称(即使它们看起来像 soname)。
例如,在 Fedora 27 上,这有效
$ rpm -q --whatprovides "libQt5Core.so.5()(64bit)"
qt5-qtbase-5.9.2-5.fc27.x86_64
但这并不
$ rpm -q --whatprovides libQt5Core.so.5
no package provides libQt5Core.so.5
$ rpm -q --whatprovides libQt5Core
no package provides libQt5Core
$ rpm -q --whatprovides Qt5Core
no package provides Qt5Core
如果您自己的 .rpm 本身捆绑了这些库(即提供这些虚拟软件包),那么如果这些虚拟软件包未安装在系统上,RPM 不会抱怨,因为它们是随您的软件包一起提供的。
答案1
您不能依赖(所有)Linux 发行版在任何时候都使用特定软件包的相同上游版本,因为每个发行版都有自己的开发周期。
虽然您会看到各个发行版的包名称有很多共性,但这并不能保证。根据经验,包名称在发行版和任何派生的下游发行版中基本相同。例如,考虑 Debian 和 Ubuntu,或者 Redhat 和 CentOS。