Як обмежити встановлені оновлення лише оновленнями із певного набору сховищ? Це взагалі можливо?
Як обмежити встановлені оновлення лише оновленнями із певного набору сховищ? Це взагалі можливо?
Відповіді:
Закріплення - це процес, який дозволяє вам залишатися на стабільному випуску 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 відключає всі сторонні сховища під час оновлення (і не просто запускайте якусь опцію, щоб тимчасово їх виключити).