Phi*_*ing 10 dpkg apt dependencies deb
我很想了解~
Apt 的依赖项是如何处理的,或者它是如何为 deb 文件定义的(我不确定语法是在哪里定义的)。
我遇到了关于 Ubuntu (Focal) 元包的依赖关系,python3
该包具有依赖关系约束:(python3.8 >= 3.8.2-1~
请参阅此处)。
我相信软件包版本是这样定义的,以便它们按词法顺序排序,但是当我检查 ubuntu focus 时,没有按python3.8
词法排序的版本>=
3.8.2-1~
,但有一个版本3.8.10-0ubuntu1~20.04.4
推断 Ubuntu Focal 的依赖项已损坏(它们没有)或存在~
依赖关系中有一些特殊含义。
我能找到的关于该主题的唯一文档是 Debian 的声明包之间的关系。但这没有提到~
or 模式匹配。
~
那么.deb 依赖项中尾随的含义是什么?
版本中的波浪线在有关版本的策略部分中进行了描述。基本上,波浪号排序在任何内容之前。
\n因此>= 3.8.2-1~
,以 开头的任何版本都满足3.8.2-1
,包括带有以波形符本身开头的后缀的版本,例如3.8.2-1~bpo
(用于向后移植),只要有 \xe2\x80\x99t 两个波形符连续。事实上,此类依赖项(在版本(包括 Debian 修订版)末尾带有波浪号)通常用于促进向后移植。
由于这就是您的问题的具体内容,并且 Debian 政策并未解决 \xe2\x80\x99 问题,因此 \xe2\x80\x99s 值得更详细地介绍。典型的版本依赖关系如下所示python3.8 >= 3.8.2-1
,需要 3.8.2-1 或更高版本的python3.8
包。Python 3.8 的任何更高版本的上游版本以及该软件包的任何更高版本的 Debian 版本(3.8.2-2 或 3.8.2-1ubuntu1 等)都可以满足这一要求。但向后移植无法满足 xe2\x80\x99 的要求,向后移植的版本形式为 3.8.2-1~bpo10+1;由于波形符排在空字符串之前,因此 3.8.2-1~bpo10+1 被认为小于 3.8.2-1。因此,使用这种形式的版本化依赖项向后移植包需要更改其依赖项,这违背了向后移植应尽可能接近原始包的一般规则。
因此,在版本化依赖项中添加波浪号作为版本的最后一个字符有助于稍微放松依赖关系:它允许具有相同前缀和波浪号分隔的后缀的版本,以满足版本化依赖项。这与预发布版本中使用波浪线的记录相反,预发布版本可以\xe2\x80\x99t满足对最终版本的严格版本依赖关系。
\n(请注意,波浪线作为版本号中的最后一个字符,其中包括问题中给出的 Debian 修订版,can\xe2\x80\x99t允许上游预发布 \xe2\x80\x94 ,这些版本看起来像 3.8.2 ~pre1-1,小于 3.8.2-1~。)
\n版本不是按词法排序的,而是按组件排序的,如果可能的话按数字排序,否则按词法排序。因此3.8.10-0ubuntu1~20.04.4确实满足这个关系:10大于2,因此满足依赖关系,比较到此为止。
\n