Как установить обновления только из определенного репозитория?

Как я могу ограничить обновления, которые устанавливаются для определенного набора репозиториев? Это вообще возможно?

6 ответов

Решение

Используйте закрепление

Пиннинг - это процесс, который позволяет вам оставаться в стабильной версии Ubuntu (или любой другой системы Debian) при получении пакетов из более новой версии. - help.ubuntu.com

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

Отключить автоматическое обновление из репозитория repo, добавьте файл
/etc/apt/preferences.d/repo со следующим содержанием:

Package: *
Pin: release n=repo
Pin-Priority: 50

Что даст всем пакетам из этого репозитория более низкий приоритет, чем уже установленным пакетам (которые имеют 100).

Для дополнительной информации man apt_preferences или посмотрите вики-сообщество Ubuntu.

Вы можете указать релиз с -t вариант. В качестве примера я добавил следующий репозиторий в /etc/apt/sources.list установить последнюю версию Iceweasel:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Как вы знаете, там же пакет iceweasel в официальном репозитории Debian. Если я хочу установить Iceweasel из этой конкретной версии, я запускаю:

apt-get install -t squeeze-backports iceweasel

со страницы руководства apt-get:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

Я думаю, что это лучшее решение.

ОБНОВЛЕНИЕ: Как @SuB упомянул в комментарии, " -t указывает релиз, а не имя репозитория. В Ubuntu нет имени хранилища (в отличие от Linux на основе RedHat, такого как RHEL,Fedora,CentOS, ...)".

Короткий ответ

Вам нужно закрепить репозитории, из которых вы не хотите устанавливать, с приоритетом менее 100. Что означает (от apt_preference справочная страница)

100 <= P <500
вызывает установку версии, если только не существует версии, принадлежащей другому дистрибутиву, или установлена ​​более поздняя версия

И чтобы выбрать хранилище для закрепления, вы должны использовать поля из хранилищ " Release файл. Такие как archive, label, release, version и т. д. Указав значения этих полей, вы можете точно выбрать хранилище и назначить ему предпочтительный приоритет. Проверьте страницу apt_preference для более подробной информации.


Длинный ответ

Прежде чем продолжить, мы должны знать некоторые важные вещи о закреплении. Те включает

  1. Поля Release файлы и это сопоставление с apt-cache policy выход

  2. Формат подходящих файлов предпочтений

  3. С помощью Release поля файлов для установки приоритета

1. Поля Release файл и apt-cache policy выход

Из статьи вики Debian

  • Описание
  • этикетка
  • происхождения
  • Версия
  • свита
  • Кодовое имя
  • Компоненты
  • архитектуры

Вы бы увидели вывод apt-cache policy как это

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64

Значения в этих строках происходят из Release файлы.

  • Описание устанавливает описание для хранилища. Это не показано в apt-cache policy выход

  • Метка это метка хранилища. Многие репозитории имеют пустые ярлыки. Это показано в l=<label> в выходной.

  • Происхождение это говорит о происхождении хранилища. Официальный репозиторий Ubuntu имеет Ubuntu в качестве значения. Показано как o= в выходной

  • Версия - это версия дистрибутива. Для Ксениала 16.04. Показано как v= в выходной

  • Люкс такой же, как Архив. Из вики Debian это имя дистрибутива Debian, к которому относятся (или предназначены) пакеты в этом каталоге, то есть стабильные, тестируемые или нестабильные., Для Ubuntu это release-updates, release-security и т.д. Например, xenial-updates, xenial-security, Это показано в выводе как a=xenial, a=xenial-security, Для этого PPA использует только название релиза, поэтому в Pinning это не сильно поможет.

  • Компонент рассказывает о лицензировании. Это main, multiverse, restricted, universe в убунту. На выходе это показано как c=main или же c=restricted и т.д. Большинство PPA используют main для этой области, таким образом это также не помогает в закреплении много.

  • Архитектура - это архитектура ОС. Показано как b=i386 или же b=amd64 в выходной

  • Кодовое имя - это название выпуска дистрибутива. Для 16.04 это xenial, Для 14.04 это trusty, Показано в apt-cache policy вывод как n=xenial или же n=trusty, Обычно это одинаково для всех репозиториев для одного дистрибутива. Вот почему это не помогает в закреплении.

Другая строка в apt-cache policy вывод, начинающийся с origin сообщает интернет-происхождение хранилища. Это также может быть использовано в закреплении. Но не следует смешивать с Release файлы Origin поле. Это разные.

Мы будем использовать эти значения для закрепления хранилища.

Итак, как мы используем закрепление 1, чтобы ограничить хранилище?

Есть несколько способов контролировать закрепление, и только небольшое подмножество эффективно для Ubuntu. Подробное объяснение выходит за рамки ответа. Пожалуйста, обратитесь к apt_preference man-страница для этого.

2. Пин формат файла

Файлы предпочтений Pin или apt находятся в /etc/apt/preferences.d папка. Каждый пиннинг содержит три строки.

  • Первая строка начинается с Package: и разделенные запятой имена пакетов следуют. Регулярные выражения и глобусы разрешены

  • Вторая строка начинается с Pin: и он используется для целевого набора пакетов.

    Если мы хотим прикрепить пакеты от xenial выше чем xenial-updates мы будем использовать release a=xenial,

    Если мы хотим закрепить версию 5.0, мы будем использовать version 5.0 Вот. Шаровые патенты разрешены.

    Или если мы хотим прикрепить пакеты от происхождения http://archive.ubuntu.com мы будем использовать origin "archive.ubuntu.com", Обратите внимание, мы не пишем http:// Протокол там.

  • Третья строка начинается с Pin-Priority: и это значение является числом. Что означает приоритет целевых элементов выше.

3. Использование Release поля файлов для установки приоритета

Вот пример

Package: *
Pin: release a=xenial
Pin-Priority: 1001

В этом примере пакеты из xenial архивы имеют более высокий приоритет, чем xenial-updates а также xenial-security,

После закрепления, запустив apt-cache policy nautilus показывает, что он действительно дал более высокий приоритет более низкой версии от xenial архив более высокой версии из xenial-updates архив. Обратите внимание на Candidate: линия.

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Но, если мы хотим отдать приоритет пакетам, предоставленным PPA, это не сработает. Поскольку PPA используют то же имя архива xenial по умолчанию. Итак, присвоение приоритета a=xenial будет также применяться к этим пакетам. Например (после включения PPA),

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Теперь версия кандидата от PPA. Оба пакета из xenial архив официального репо Ubuntu и PPA имеют одинаковый приоритет 1001 потому что они оба используют одно и то же значение для Archive в файле Release. Чтобы успешно закрепить, нам нужно объединить больше полей в файле Pin.


Некоторые примеры

Закрепить репозиторий PPA

Чтобы закрепить пакеты из репозитория, нам нужно настроить таргетинг на него, используя информацию из apt-cache policy команда. Мы только что видели это a=xenial не поможет точное указание хранилища. Нам нужно использовать несколько полей вместе, используя запятую в файле настроек для точного нацеливания на хранилище.

Например, чтобы предотвратить все пакеты от http://ppa.launchpad.net/oibaf/graphics-drivers/ PPA, мы можем использовать

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

Здесь мы используем значение кодового имени, а также Origin стоимость ППА. (Хотя значение кодового имени здесь на самом деле не требуется). Иногда хранилище может пропустить эти значения. В этих случаях следует использовать некоторые другие методы. Выход из apt-cache policy libgl1-mesa-glx говорит, что это работает. Это понизило приоритет всех пакетов этого PPA.

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~gd~x
  Candidate: 12.1~git1608200730.16ef7a~gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Не обращайте внимания на тот факт, что это кандидат. Это произошло, потому что он уже установлен в моей системе. Проверьте приоритет справа

Закрепить репозиторий, если информация о выпуске отсутствует

Если мы хотим закрепить репозиторий, информация о выпуске которого отсутствует, как этот http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04 Мы должны использовать другой метод. Поскольку ни один другой репозиторий не использует этот источник, мы можем безопасно использовать origin закрепить этот репозиторий.

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

Примечание 1. Это происхождение является интернет-происхождением, а не тем, которое указывает поставщика в файле выпуска.

Заметка 2: Pin-Priority номер имеет особое значение. Проверьте apt_preference страница руководства для деталей.

Альтернатива на основе графического интерфейса - открыть центр программного обеспечения и выбрать "Правка"> "Источники программного обеспечения".

Программные источники с выбранной вкладкой программного обеспечения Ubuntu

Источники программного обеспечения с выбранной вкладкой другого программного обеспечения

все, что вам нужно сделать, это снять отметки с репозиториев, из которых вы не хотите получать обновления.

Надеюсь это поможет

Очевидный выбор - изменить /etc/apt/sources.list и закомментируйте все остальные репозитории, а затем выполните

apt-get update && apt-get upgrade && apt-get autoclean

А затем удалите комментарии из sources.list, Может быть, не самый лучший способ, но по крайней мере apt-get на страницах руководства не указано, как это сделать.

В примечании, связанном с этим, например, процесс обновления дистрибутива Ubuntu отключает все сторонние репозитории во время обновления (и не просто запускайте некоторые опции, чтобы временно исключить их).

Еще один вариант графического интерфейса - просто выбрать источник в менеджере пакетов Synaptic.

  1. Найдите имя пакета, который вы хотите установить
  2. Нажмите кнопку происхождения
  3. Выберите репозиторий, из которого вы хотите установить
  4. Выберите пакеты
  5. Применять
Другие вопросы по тегам