Ubuntu

在 Ubuntu 中優先考慮儲存庫

  • May 11, 2013

我們在我們堅持使用的一些伺服器上有一些 PPA 資源/etc/apt/sources.list.d。其中一些 repos 提供相同的包(在名稱方面)但不同的版本和可能不同的二進製文件。有沒有辦法我們可以優先考慮一個回購而不是另一個?

我閱讀了 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

感謝您的回答!

在您的情況下,通過優先級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缺少 epoch 部分,所以這被 apt 解釋為0:1.4.1-1ppa0~precise,低於1:1.2.6-1~43~precise.

因此,您可以嘗試通過版本號進行固定:

Pin: version 0:*

另一種方法是通過release帶有回購發行人名稱的選項進行固定:

Pin: release o=<issuer>

要找出<issuer>不同 repos的正確值,請apt-cache policy不帶參數執行。

引用自:https://serverfault.com/questions/506772