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

Как мне ограничить количество устанавливаемых обновлений обновлениями из определенного набора репозиториев? Возможно ли это вообще?

Вы можете указать выпуск с помощью -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, ...)".

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

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

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

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

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

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

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

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

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

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

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


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

Прежде чем продолжить, нам нужно знать кое-что важное о закреплении. К ним относятся

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

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

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

1. Области применения Release файл и apt-cache policy выход

От Debian Wiki статья

  • Описание
  • Этикетка
  • Происхождение
  • Версия
  • Набор
  • Кодовое имя
  • Компоненты
  • Архитектуры

Вы увидите вывод из 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 wiki это Название дистрибутива Debian, к которому принадлежат пакеты в этом каталоге (или для которого они предназначены), т.е. стабильный, тестируемый или нестабильный.. Для Ubuntu это release-updates, release-security и т.д. Например, xenial-updates, xenial-security. Это показано в выходных данных как a=xenial, a=xenial-security. PPA используют для этого только название выпуска, поэтому это не сильно поможет при закреплении.

  • Компонент рассказывает о лицензировании. Это main, multiverse, restricted, universe в Ubuntu. В выходных данных это показано как 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 справочная страница за это.

2. Формат файла Pin-кода

Файлы настроек 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=xenialPin-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 nautilusnautilus:  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 в файле выпуска. Чтобы успешно закрепить Pin-код, нам нужно объединить больше полей в файле 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-driversPin-Priority: 10

Здесь мы используем значение codename, а также Origin значение PPA. (Хотя значение кодового имени здесь на самом деле не требуется). Иногда репозиторий может пропустить эти значения. В этих случаях следует использовать некоторые другие методы. Выход из 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.orgPin-Priority: 10

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

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

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

Software Sources with Ubuntu software tab selected

Software Sources with other software tab selected

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

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

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

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

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

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

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

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

Ваш заголовок и фактическая помощь, о которой вы просите, отличаются друг от друга.

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

В идеале это было бы во время выполнения. Однако статического варианта вполне достаточно.