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