Назад | Перейти на главную страницу

Приоритет репозиториев в 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 различных версий и т. Д. Когда я перечисляю приоритеты, 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 ppa.launchpad.net

Поскольку оба репо включены ppa.launchpad.net, это тебе не поможет.

Вы можете найти причину, по которой вам предоставляется более низкая версия здесь:

http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-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 без аргументов.