Как я могу ограничить обновления, которые устанавливаются для определенного набора репозиториев? Это вообще возможно?
Как я могу ограничить обновления, которые устанавливаются для определенного набора репозиториев? Это вообще возможно?
Ответы:
Пиннинг - это процесс, который позволяет вам оставаться в стабильной версии 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_preferenceman-странице для этого.
Файлы предпочтений 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 отключает все сторонние репозитории во время обновления (и не просто запускайте какую-либо опцию, чтобы временно исключить их).