在Ubuntu中优先考虑存储库

我们在一些服务器上有几个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

由于两个回购都在ppa.launchpad.net上,这对你没有帮助.

您可以在此处找到提供较低版本的原因:

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

版本号1.4.1-1ppa0~precision缺少epoch部分,因此这被解释为apt为0:1.4.1-1ppa0~precact,精确度低于1:1.2.6-1~43~.

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

Pin: version 0:*

另一种方法是通过发行选项固定repo发行者的名称:

Pin:release o =< issuer>

要找出< issuer>的正确值.在不同的repos上,运行不带参数的apt-cache策略.

相关文章

文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预...
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载U...
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装...
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standa...
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主...