Як встановити оновлення лише з певного сховища?


39

Як обмежити встановлені оновлення лише оновленнями із певного набору сховищ? Це взагалі можливо?


Ви хочете мати змогу вказати репо під час виконання, або це має бути більше статична річ? Ці два відповіді нижче , припускають , другий варіант.
thepang

В ідеалі це було б під час виконання. Однак статичного варіанту достатньо.
Ton van den Heuvel

2
Ви рушаєте та фактична допомога, яку ви просите, відрізняються.
sundar

Відповіді:


29

Використовуйте фіксацію

Закріплення - це процес, який дозволяє вам залишатися на стабільному випуску 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 .


3
Прикро, єдина відповідь apt_preferences - остання ...
Роберт Сімер

як дізнатися, яка версія, з якої репо?
Макс N

2
@MaxN ви зазвичай знайдете цю інформацію, запустившиapt-cache policy package-name
Anwar

Це не змусить сховище не розглядатися під час оновлення. бо release n=repoне буде кешувати нікого
Anwar

35

Ви можете вказати випуск з -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, ...)".


4
Як ви бачите в apt-getпосібнику, -tвкажіть назву випуску не сховища. У Ubuntu немає назви сховища (на відміну від Linux на базі RedHat, таких як RHEL, Fedora, CentOS, ...)
SuB

1
@SuB Так, ти маєш рацію! Я переплутав назву сховища з випуском!
мультфільм

-t xenialпрацює для одного пакету. але все, що залежать від цього, все одно вийде з більш високих пакетів
Anwar

11

Коротка відповідь

Потрібно закріпити сховища, з яких ви не хочете встановлювати, з пріоритетом менше 100. Що означає (зі apt_preferenceсторінки man)

100 <= P <500
призводить до встановлення версії, якщо немає доступної версії, яка належить до якогось іншого дистрибутиву, або інстальована версія є більш новітньою

І щоб вибрати сховище для закріплення, ви використовуєте поля з Releaseфайлу сховищ . Такі , як archive, label, release, і versionт.д. Ставлячи значення цих полів, ви можете точно вибрати сховище і привласнити потрібний пріоритет до нього. Перегляньте сторінку apt_preference для отримання більш детальної інформації.


Довга відповідь

Перш ніж продовжувати, ми повинні знати важливу річ щодо закріплення. Це включає

  1. Поля Releaseфайлів і відображення для apt-cache policyвиведення

  2. Формат файлів уподобань

  3. Використання Releaseполів файлів для встановлення пріоритету

1. Поля 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сторінки .

2. Закріпіть формат файлу

Файли налаштувань прикріплення чи вподобання знаходяться у /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:і його значення - це число. Що означає пріоритет націлених вище елементів.

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у файлі випуску. Для успішного закріплення нам потрібно об’єднати більше полів у файлі 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значення 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сторінку керівництва для деталей.


7

Альтернативою на основі gui було б відкрити програмний центр та вибрати редагувати> джерела програмного забезпечення ...

Джерела програмного забезпечення з обраною вкладкою програмного забезпечення Ubuntu

Джерела програмного забезпечення з обраною вкладкою іншого програмного забезпечення

все, що вам потрібно зробити, це зняти галочку з сховищ, з яких не потрібно оновлення.

Сподіваюся, це допомагає


5

Очевидний вибір - змінити /etc/apt/sources.listта прокоментувати всі інші сховища, а потім запустити

apt-get update && apt-get upgrade && apt-get autoclean

А потім видаліть коментарі з sources.list. Можливо, не найкращий спосіб, але принаймні apt-getчоловічі сторінки не вказують жодного способу зробити це.

Наприклад, пов'язана примітка, наприклад, процес оновлення дистрибуції Ubuntu відключає всі сторонні сховища під час оновлення (і не просто запускайте якусь опцію, щоб тимчасово їх виключити).


1

Ще один варіант GUI - просто вибрати походження в диспетчері пакетів Synaptic.

  1. Знайдіть назву пакета, який ви хочете встановити
  2. Натисніть кнопку «Походження»
  3. Виберіть сховище, з якого ви хочете встановити
  4. Виберіть пакети
  5. Застосувати
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.