优先考虑 Ubuntu 中的存储库

优先考虑 Ubuntu 中的存储库

我们的一些服务器上有一些 PPA 源,我们会坚持使用这些源/etc/apt/sources.list.d。其中一些存储库提供相同的软件包(就名称而言),但版本不同,二进制文件也可能不同。有没有办法让我们优先考虑一个存储库而不是另一个?

我读了 apt_preferences 教程,但它太晦涩难懂了,我找不到问题的答案。情况是这样的。我们有以下来源:

$ ls -l /etc/apt/sources.list.d 
total 12
-rw-r--r-- 1 root root 66 Jan  2 16:50 nginx-source.list
-rw-r--r-- 1 root root 84 Jan  2 16:49 ruby-ng-experimental-source.list

在哪里nginx-source.list

deb     http://ppa.launchpad.net/nginx/stable/ubuntu precise main

ruby-ng-experimental-source.list

deb     http://ppa.launchpad.net/brightbox/ruby-ng-experimental/ubuntu precise main

这两个源都提供了不同版本等的 nginx-full 包。当我列出优先级时,ruby-ng-experimental-source.list 位于输出的顶部,因此 nginx-full 是从该目录安装的:

$ apt-cache policy nginx-full                                 
nginx-full:
  Installed: 1:1.2.3-1~38~precise1
  Candidate: 1:1.2.6-1~43~precise1
  Version table:
     1:1.2.6-1~43~precise1 0
        500 http://ppa.launchpad.net/brightbox/ruby-ng-experimental/ubuntu/ precise/main amd64 Packages
 *** 1:1.2.3-1~38~precise1 0
        100 /var/lib/dpkg/status
     1.4.1-1ppa0~precise 0
        500 http://ppa.launchpad.net/nginx/stable/ubuntu/ precise/main amd64 Packages
     1.1.19-1ubuntu0.1 0
        500 http://mirror.rackspace.co.uk/ubuntu/ precise-updates/universe amd64 Packages
     1.1.19-1 0
        500 http://mirror.rackspace.co.uk/ubuntu/ precise/universe amd64 Packages

如何对 nginx-source.list 中列出的 repo 进行优先排序?

我尝试了这样的事情:

$ cat /etc/apt/preferences
Package: nginx-full
Pin: origin http://ppa.launchpad.net/nginx/stable/ubuntu
Pin-Priority: 1000

Package: nginx-full
Pin: origin http://ppa.launchpad.net/brightbox/ruby-ng-experimental/ubuntu
Pin-Priority: 100

但这改变了所有来源的优先级 - 或者类似的事情?

$ apt-cache policy nginx-full  
nginx-full:
  Installed: 1:1.2.3-1~38~precise1
  Candidate: 1:1.2.6-1~43~precise1
  Package pin: (not found)
  Version table:
     1:1.2.6-1~43~precise1 1000
        500 http://ppa.launchpad.net/brightbox/ruby-ng-experimental/ubuntu/ precise/main amd64 Packages
 *** 1:1.2.3-1~38~precise1 1000
        100 /var/lib/dpkg/status
     1.4.1-1ppa0~precise 1000
        500 http://ppa.launchpad.net/nginx/stable/ubuntu/ precise/main amd64 Packages
     1.1.19-1ubuntu0.1 1000
        500 http://mirror.rackspace.co.uk/ubuntu/ precise-updates/universe amd64 Packages
     1.1.19-1 1000
        500 http://mirror.rackspace.co.uk/ubuntu/ precise/universe amd64 Packages

谢谢您的回答!

答案1

在您的情况下,通过优先排序Pin: origin不起作用,因为它需要主机名作为参数:

Pin: origin ppa.launchpad.net

由于两个 repos 均已启用ppa.launchpad.net,因此这对您没有帮助。

您可以在这里找到您获得较低版本的原因:

http://www.debian.org/doc/debian-policy/ch-controlfields.html#sf-Version

版本号1.4.1-1ppa0~precise缺少时代部分,因此 apt 将其解释为0:1.4.1-1ppa0~precise,低于1:1.2.6-1~43~precise

因此,您可以尝试通过版本号进行固定:

Pin: version 0:*

另一种方法是通过release回购发行人的名称进行固定:

Pin: release o=<issuer>

要找出<issuer>不同存储库的正确值,apt-cache policy请不带参数运行。

相关内容