Как мне ограничить количество устанавливаемых обновлений обновлениями из определенного набора репозиториев? Возможно ли это вообще?
Вы можете указать выпуск с помощью -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 страница для получения более подробной информации.
Длинный Ответ
Прежде чем продолжить, нам нужно знать кое-что важное о закреплении. К ним относятся
Области применения
Release
файлы, и это сопоставление сapt-cache policy
выходФормат файлов предпочтений apt
С помощью
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
страница руководства для получения более подробной информации.
>Альтернативой, основанной на графическом интерфейсе, было бы открыть центр программного обеспечения и выбрать редактировать источники программного обеспечения...
все, что вам нужно сделать, это снять галочки с репозиториев, из которых вы не хотите получать обновления.
Надеюсь, это поможет
Очевидным выбором является изменение /etc/apt/sources.list
и закомментируйте все остальные репозитории, а затем запустите
apt-get update && apt-get upgrade && apt-get autoclean
А затем удалите комментарии из sources.list
Может быть, не самый лучший способ, но, по крайней мере apt-get
справочные страницы не указывают никакого способа сделать это.
В связи с этим, например, процесс обновления дистрибутива Ubuntu отключает все сторонние репозитории во время обновления (и не просто запускайте какую-либо опцию, чтобы временно исключить их).
Еще один вариант графического интерфейса - просто выбрать источник в Synaptic package manager.
- Найдите имя пакета, который вы хотите установить
- Нажмите кнопку Источник
- Выберите репозиторий, из которого вы хотите установить
- Выберите пакеты
- Применять
Ваш заголовок и фактическая помощь, о которой вы просите, отличаются друг от друга.
Вы хотите иметь возможность указывать репозиторий во время выполнения, или это должно быть более статичным? В two answers ниже предположим последний вариант.
В идеале это было бы во время выполнения. Однако статического варианта вполне достаточно.