在Ubuntu中优先考虑存储库

在我们的一些服务器上,我们有一些PPA资源,我们将其放在/etc/apt/sources.list.d 。 这些回购中的一些提供相同的软件包(按名称),但是不同的版本和可能不同的二进制文件。 有一种方法可以使一个回购优先于另一个吗?

我给了一个阅读apt_preferences教程,但它不能更晦涩难懂,没有find我的问题的答案。 这是情况。 我们有以下来源:

 $ 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中列出的回购?

我尝试了这样的事情:

 $ 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在你的情况下不起作用,因为它期望一个主机名作为参数:

Pin: origin ppa.launchpad.net

因为这两个回购是在ppa.launchpad.net ,这不会帮助你。

你可以find你在这里得到较低版本的原因:

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

版本号1.4.1-1ppa0~precise缺less时元部分,所以这被解释为0:1.4.1-1ppa0~precise ,低于1:1.2.6-1~43~precise

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

 Pin: version 0:* 

另一种方法是通过release选项与回购发行人的名称挂钩:

Pin: release o=<issuer>

要find不同仓库中<issuer>的正确值,请运行无参数的apt-cache policy