Как я могу ограничить обновления, которые устанавливаются для определенного набора репозиториев? Это вообще возможно?
Как я могу ограничить обновления, которые устанавливаются для определенного набора репозиториев? Это вообще возможно?
Ответы:
Пиннинг - это процесс, который позволяет вам оставаться в стабильной версии 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 .
apt-cache policy package-name
release n=repo
что не будет никого кэшировать
Вы можете указать релиз с -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, ...)».
apt-get
руководстве, -t
укажите релиз, а не имя репозитория. В Ubuntu нет имени хранилища (в отличие от Linux на основе RedHat, такого как RHEL, Fedora, CentOS, ...)
-t xenial
работает для одного пакета. но все его зависимости все равно будут извлечены из более высоких пакетов
Вам нужно закрепить репозитории, из которых вы не хотите устанавливать, с приоритетом менее 100. Что означает (со apt_preference
страницы руководства )
100 <= P <500
вызывает установку версии, если только не доступна версия, принадлежащая другому дистрибутиву, или установлена более поздняя версия
И чтобы выбрать репозиторий для закрепления, вы должны использовать поля из Release
файла репозитория . Такие , как archive
, label
, release
, и version
т.д. Задавая значения этих полей, вы можете точно выбрать хранилище и присвоить нужный приоритет к нему. Проверьте страницу apt_preference для более подробной информации.
Прежде чем продолжить, мы должны знать некоторые важные вещи о закреплении. Те включает
Поля Release
файлов и их отображение на apt-cache policy
вывод
Формат подходящих файлов предпочтений
Использование Release
файловых полей для установки приоритета
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
в 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
man-странице для этого.
Файлы предпочтений 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:
и ее значение является числом. Что означает приоритет целевых элементов выше.
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.
Чтобы закрепить пакеты из репозитория, нам нужно настроить таргетинг на него, используя информацию, найденную в 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
значение 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.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 отключает все сторонние репозитории во время обновления (и не просто запускайте какую-либо опцию, чтобы временно исключить их).