为 PPA 分配更高优先级

为 PPA 分配更高优先级

我正在尝试弄清楚如何为一个 PPA 分配比另一个 PPA 更高的优先级。我查看了论坛上的大量答案,但没有一个能解决我的问题。

我们的一些服务器上有两个 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 是从该 repo 安装的:

$ 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 优先于现在位于列表顶部的 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

但这样会将两个源的优先级更改为相同的数字 - 或者类似的东西?因此,这并没有改变优先级,并且 nginx-full 仍然从​​ brightbox PPA 安装

$ 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

以下是一个例子/etc/apt/preferences

mint@mint ~ $ cat /etc/apt/preferences
Package: *
Pin: release o=linuxmint
Pin-Priority: 700

Package: *
Pin: origin packages.linuxmint.com
Pin-Priority: 700

Package: *
Pin: release o=Ubuntu
Pin-Priority: 500

您可能必须apt-get update在创建文件后运行。

答案2

简短回答:将 pinning-priority 设置为小于 0,并设置 o=LP-PPA-*,例如

Package: nginx-full
Pin: release o=LP-PPA-brightbox-ruby-ng-experimental
Pin-Priority: -10

引用自 apt_preferences-manpage:

How APT Interprets Priorities
...
P < 0
prevents the version from being installed

更多信息: http://manpages.ubuntu.com/manpages/raring/en/man5/apt_preferences.5.htmlhttps://help.ubuntu.com/community/PinningHowto

相关内容