我似乎无法在 apt 首选项文件的文档中找到与Pin: version 5.8
和之间的差异相关的任何内容。Pin: release v=5.8
他们做的事情是相同的还是有区别的?
Pin: origin "origin"
和之间也存在类似情况Pin: release o=origin
。
答案1
经过进一步挖掘,我终于明白了。
总结
Pin: release X=Y
使用简写符号对 Release 文件的字段进行过滤。在发布文件中,版本应该是发布。例如)对于 Debian bullseye,您可以使用Pin: release v=11
,或者对于 Ubuntu Jammy,您可以使用Pin: release v=22.04
。Origin 应该是作者或供应商名称。例如)Pin: release o=LP-PPA-mozillateam
。
Pin: version X
根据软件包版本进行过滤。例如)Pin: version 1:91
。
Pin: origin X
根据主机名进行过滤。例如)Pin: origin ppa.launchpad.net
。
发布文件
在Determination of Package Version and Distribution Properties
的部分man apt_preferences
我们发现了这一点。
sources.list(5) 文件中列出的位置应提供软件包和发布文件来描述该位置可用的软件包。
因此每个位置(有一个原点)都有一个发布文件对于每个可用版本。在该链接中,我们看到发布文件托管在dists/$DIST/InRelease
。
在我的本地机器上我们有
$ apt-cache policy
500 http://ppa.launchpad.net/mozillateam/ppa/ubuntu jammy/main amd64 Packages
release v=22.04,o=LP-PPA-mozillateam,a=jammy,n=jammy,l=Firefox ESR and Thunderbird stable builds,c=main,b=amd64
origin ppa.launchpad.net
在这里,您可以看到我的本地机器正在使用该jammy
版本。因此,相关发布文件位于dists/jammy/InRelease
。这为我们提供了以下文件:http://ppa.launchpad.net/mozillateam/ppa/ubuntu/dists/jammy/InRelease。
该发布文件由托管存储库的人员创建,包含有关发行版的元信息。有些信息是可选的,有些则不是。一些可选字段包括:
- 起源
- 标签
- 版本
- 套房
- 代码名称
一些非可选字段包括:
- 成分
这是您Pin: release X=
在首选项文件中指定时要过滤的内容。运行时也会对其进行描述apt-cache policy
。在上面的示例中,我们有:
- 起源:
o=LP-PPA-mozillateam
- 标签:
l=Firefox ESR
- 版本:
v=22.04
- 套房:
a=jammy
- 代码名称:
n=jammy
- 成分:
c=main
注意:我在手册页中找不到与b=
命令输出中的字段相关的任何内容apt-cache policy
。
起源
除了发布文件中的上述信息外,位置还具有原点。这也包含在命令的输出中apt-cache policy
。如上例所示,它是ppa.launchpad.net
。
这就是您Pin: origin X
在首选项文件中包含的内容所要过滤的内容。
在The Effect of APT Preferences
手册页的部分中,有这样一句有用的句子:
这不应与 Release 文件中指定的发行版来源相混淆。Release 文件中“Origin:”标签后面的内容不是 Internet 地址,而是作者或供应商名称,例如“Debian”或“Ximian”。
版本
返回Determination of Package Version and Distribution Properties
手册页部分。
如上所述,它指出:
sources.list(5) 文件中列出的位置应提供软件包和发布文件来描述该位置可用的软件包。
因此,除了这个发布文件之外,我们还有一个包文件。手册页继续说道:
[包文件] 每个记录中只有两行与设置 APT 优先级相关:
包装:线
给出包名称
版本: 行
给出指定包的版本号
这与版本字段的内容不同发布文件,上面写着
版本: 行
命名发行版本。例如,树中的软件包可能属于 Debian 发行版本 11。
如果我们找到其中一个包文件,我们就可以看到这一点。对于上面的包,对于我的架构,它在这里:http://ppa.launchpad.net/mozillateam/ppa/ubuntu/dists/jammy/main/binary-amd64/Packages.xz
在该压缩档案中,我们有一个Packages
文件,其中包含所有可用软件包及其版本的列表(以及许多其他信息)。以下是众多可用软件包之一的一部分:
Package: thunderbird
Priority: optional
Section: mail
Installed-Size: 227239
Maintainer: Ubuntu Mozilla Team <[email protected]>
Architecture: amd64
Version: 1:91.5.1+build1-0ubuntu1
Pin: version X
当您将其包含在首选项文件中时,此版本就是您所适应的。
如果您apt-cache policy
在特定包上运行,您可以看到该包可用的版本。
$ apt-cache policy thunderbird
thunderbird:
Installed: 1:78.14.0-1~deb11u1
Candidate: 1:78.14.0-1~deb11u1
Version table:
1:91.5.1+build1-0ubuntu1 500
500 http://ppa.launchpad.net/mozillateam/ppa/ubuntu jammy/main amd64 Packages
1:91.5.1-1+b2 10
10 http://ftp.us.debian.org/debian unstable/main amd64 Packages
1:91.5.0-2~deb11u1 500
500 http://security.debian.org/debian-security bullseye-security/main amd64 Packages
*** 1:78.14.0-1~deb11u1 900
900 http://deb.debian.org/debian bullseye/main amd64 Packages
100 /var/lib/dpkg/status
版本混淆
看起来发布文件中指定的版本并不总是正确的。例如,对于 Google Chrome,我们有这样的版本:
$ apt-cache policy
900 http://dl.google.com/linux/chrome/deb stable/main amd64 Packages
release v=1.0,o=Google LLC,a=stable,n=stable,l=Google,c=main,b=amd64
origin dl.google.com
我不确定这个版本应该代表什么,因为它与包文件中的版本不匹配:
$ grep "Package\|Version" /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-amd64_Packages
Package: google-chrome-beta
Version: 99.0.4844.17-1
Package: google-chrome-stable
Version: 98.0.4758.80-1
Package: google-chrome-unstable
Version: 100.0.4867.0-1