我问这个是因为我自己花了太多时间来弄清楚它,文档缺少几个重要的注释,而且我还没有发现任何其他与此真正相关的问题:
我如何优先考虑多个架构的特定包版本?特别是,我有许多不同的软件包,我想为多个架构下载它们,我想对版本进行优先级排序,以便如果没有明确提供它们,apt 将尝试获得与我的任意要求匹配的版本(在我的情况下,当前的 git 分支名称)并回退到develop
分支版本。
例如。我想下载和体系结构的软件包my-package
,并且我想在回退到包含.i386
amd64
my-git-branch-name
develop
官方文档在这里。
为了支持多种架构,所有被固定的包都必须指定其架构,并且每个架构都必须有一个条目。没有指定架构的包名称的固定只会影响默认(平台)架构:
Package: my-package
Pin: version /your regex here/
Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)
这些条目对空格敏感,但如果您有空格,则不会报告任何错误。以下固定将被静默忽略:
Package: my-package:amd64
Pin: version /your regex here/
Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)
apt update
必须在更新首选项文件后调用以使其受到尊重,并且在使用(例如)添加其他架构后dpkg --add-architecture i386
以下摘录/etc/apt/preferences
解决了上述问题:
Package: my-package:amd64
Pin: version /-my-git-branch-name-/
Pin-Priority: 1001
Package: my-package:i386
Pin: version /-my-git-branch-name-/
Pin-Priority: 1001
Package: my-package:amd64
Pin: version /-develop-/
Pin-Priority: 900
Package: my-package:i386
Pin: version /-develop-/
Pin-Priority: 900
Run Code Online (Sandbox Code Playgroud)