Як обмежити встановлені оновлення лише оновленнями із певного набору сховищ? Це взагалі можливо?
Як обмежити встановлені оновлення лише оновленнями із певного набору сховищ? Це взагалі можливо?
Відповіді:
Закріплення - це процес, який дозволяє вам залишатися на стабільному випуску 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 Community Wiki .
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
сторінки man)
100 <= P <500
призводить до встановлення версії, якщо немає доступної версії, яка належить до якогось іншого дистрибутиву, або інстальована версія є більш новітньою
І щоб вибрати сховище для закріплення, ви використовуєте поля з Release
файлу сховищ . Такі , як archive
, label
, release
, і version
т.д. Ставлячи значення цих полів, ви можете точно вибрати сховище і привласнити потрібний пріоритет до нього. Перегляньте сторінку apt_preference для отримання більш детальної інформації.
Перш ніж продовжувати, ми повинні знати важливу річ щодо закріплення. Це включає
Поля Release
файлів і відображення для apt-cache policy
виведення
Формат файлів уподобань
Використання Release
полів файлів для встановлення пріоритету
Release
файлу та apt-cache policy
виводуЗ статті Wiki 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
виході
Label it - це мітка сховища. У багатьох сховищах є порожні мітки. Це показано у l=<label>
висновку.
Походження цього говорить про походження сховища. Офіційне сховище Ubuntu має Ubuntu
значення. Показано як o=
у висновку
Версія - це версія дистрибутива. Це 16.04 для Xenial. Показано як v=
у висновку
Люкс такий же, як Архів . Від debian wiki це - назва розповсюдження 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
поле. Вони різні.
Ми будемо використовувати ці значення для закріплення сховища.
Отже, як ми використовуємо pinning 1 для обмеження сховища?
Існує кілька способів керування фіксацією, і лише невеликий підмножина ефективний для Ubuntu. Однак пояснення деталей виходить за рамки відповіді. Будь ласка, зверніться до цієї apt_preference
сторінки .
Файли налаштувань прикріплення чи вподобання знаходяться у /etc/apt/preferences.d
папці. Кожна фіксація містить три рядки.
Перший рядок починається з, Package:
і слідують відокремлені комою назви пакунків. Регулярні вирази та глобуси дозволені
Другий рядок починається з Pin:
і використовується для орієнтації на набір пакетів.
Якщо ми хочемо закріпити пакети xenial
вище, ніж xenial-updates
ми, ми будемо використовувати release a=xenial
.
Якщо ми хочемо закріпити версію 5.0, ми використаємо version 5.0
тут. Патенти Glob дозволені.
Або якщо ми хочемо закріпити пакунки від походження 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
у файлі випуску. Для успішного закріплення нам потрібно об’єднати більше полів у файлі 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: Це походження інтернет походження, а не один , який визначає Продавець в файлі Release.
Примітка 2: Pin-Priority
число має особливе значення. Перевірте apt_preference
сторінку керівництва для деталей.
Очевидний вибір - змінити /etc/apt/sources.list
та прокоментувати всі інші сховища, а потім запустити
apt-get update && apt-get upgrade && apt-get autoclean
А потім видаліть коментарі з sources.list
. Можливо, не найкращий спосіб, але принаймні apt-get
чоловічі сторінки не вказують жодного способу зробити це.
Наприклад, пов'язана примітка, наприклад, процес оновлення дистрибуції Ubuntu відключає всі сторонні сховища під час оновлення (і не просто запускайте якусь опцію, щоб тимчасово їх виключити).