当我尝试运行一个简单的 时,我遇到了依赖冲突yum update
。我注意到,在某些情况下,它正在寻找一个名为 的包,foo w.x-y.z.el6
而仓库只有foo w.x-y.z.el6_a.b
,其中的a.b
内容类似于“2.1”或“2.9”。规格RPM 文件名中没有提到这个下划线位——它是什么意思?
答案1
vonbrand 全部正确。
在您的示例中,版本 wx-yzel6_a.b 表示上游版本号为 wx,而您本地发行版的版本(通常是补丁或内部版本号)为 yzel6_a.b
这与版本 wx-yzel6 不同,后者是相同的上游版本 (wx),但本地发行版本 (yzel6) 不同。它们不是同一版本。
至于 yzel6 和 yzel6_a.b 之间的区别,这取决于部分的具体语法,这完全取决于制作软件包的个人/团体如何在内部对其版本进行编号。对于 Red Hat 的软件包,您观察到的更改通常是指单个补丁级别内的不同版本。这两个版本的源代码可能相同,但它们是针对不同版本的 RHEL6(例如 6.3 与 6.4)编译的。它们可能依赖于不同版本的 glibc 或其他共享库。
例如,我刚刚应用的更新将 cups-1.4.2-48.el6_3.3.x86_64.rpm 替换为 cups-1.4.2-50.el6_4.4.x86_64.rpm。两者都是 cups 版本 1.4.2 的版本。据我了解,Red Hat 的惯例是,该软件包已从补丁级别 48 升级到 50,并且现在针对 RHEL 6.4(而不是 6.3)构建。我不确定最后的“.4”和“.3”是什么意思 - 我有一些软件包的版本以“el6”结尾,一些以“el6_3”结尾,一些以“el6_4”结尾,一些以“el6_4.1”结尾,一些以“el6_4.4”结尾,等等。当然,由于所有这些版本号都是特定于发行版的,我需要找到某种 Red Hat 文档才能确定。
总而言之,对于您的示例,这两个软件包是同一上游源版本的不同补丁/构建,但除此之外的具体含义将需要询问软件包的来源。
答案2
RPM 软件包名称为 <name>-<version>-<localrelease>.<arch>.rpm <name> 是软件包名称(它很可能是类似 funky-gui-devel-libs 的名称,分隔符“-”从末尾开始计算),<version> 是上游版本(没有“-”!),<localrelease> 是本地版本(同一上游基础上可能会有几轮补丁,通常包括目标系统),<arch> 是体系结构。下划线只是一个分隔符,在这里不是“-”。