不同版本和架构的 apt-preferences 中的优先级固定

the*_*uff 0 debian apt

我问这个是因为我自己花了太多时间来弄清楚它,文档缺少几个重要的注释,而且我还没有发现任何其他与此真正相关的问题:

我如何优先考虑多个架构的特定包版本?特别是,我有许多不同的软件包,我想为多个架构下载它们,我想对版本进行优先级排序,以便如果没有明确提供它们,apt 将尝试获得与我的任意要求匹配的版本(在我的情况下,当前的 git 分支名称)并回退到develop分支版本。

例如。我想下载和体系结构的软件包my-package,并且我想在回退到包含.i386amd64my-git-branch-namedevelop

the*_*uff 5

官方文档在这里

  1. 为了支持多种架构,所有被固定的包都必须指定其架构,并且每个架构都必须有一个条目。没有指定架构的包名称的固定只会影响默认(平台)架构:

    Package: my-package
    Pin: version /your regex here/
    Pin-Priority: 1001
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这些条目对空格敏感,但如果您有空格,则不会报告任何错误。以下固定将被静默忽略:

    Package: my-package:amd64
        Pin: version /your regex here/
        Pin-Priority: 1001
    
    Run Code Online (Sandbox Code Playgroud)
  3. 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)