Чи можна дозволити лише оновлення конкретних пакетів із PPA


19

Скажімо, я додав PPA, у якому є пакет X, який я хочу, але він також має Y-пакет, який я не хочу використовувати або отримувати оновлення від. Як я можу від одного і того ж PPA отримувати оновлення для певного пакету, але відхиляти оновлення від того ж PPA для інших пакетів.

Покроковий приклад був би непоганим, оскільки це трапилось зі мною в декількох PPA, які мають певний пакет, який я хочу, але також додаю цілу купу інших, які я ще не хочу оновлювати.

Відповіді:


16

Ви б використовували те, що називається "закріплення"

Якщо припустити, що ви встановлюєте пакет foo з PPA, вам майже напевно потрібно також встановити будь-які залежності від ppa.

Але якщо є інші програми, ви можете вказати, який сховище використовувати для прив’язки.

Дивіться вкладку вікі Ubuntu

Наведено приклад закріплення ppa на цій сторінці

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

На сторінці вікі:

Щоб оновлення apt-get було якомога більш безболісним, встановіть нижчий пріоритет Pin на PPA, це зупинить встановлення небажаних версій пакету. Після встановлення пакети з PPA ubuntu-mozilla щоденно завжди програють у будь-якому змаганні з пакетами з інших сховищ, навіть якщо вони мають більш високу версію.

Створіть файл /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Додайте у файл таке:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Використовуйте наступні команди до та після, щоб перевірити, чи було оновлено пріоритет.

apt-cache policy

apt-cache policy firefox-3.5

7

Перш за все, якщо ви вже оновили пакети з PPA помилково, дивіться цю відповідь: /ubuntu//a/142808/103117, зокрема розділ про використання ppa-purge. Оскільки я вже оновив пакунки, і apt-get не знизиться, незалежно від пріоритетів, найпростіше спочатку очистити всі оновлені пакети, потім виправити пріоритети, потім знову додати PPA і лише оновити потрібні пакети.

Повне пояснення системи пріоритету / закріплення див man apt_preferences.

Якщо пакет доступний з декількох джерел, кожному з них буде присвоєно пріоритет, і ви можете побачити це за допомогою apt-cache policy <package name>. Наприклад, я використовую PPA під назвою nathan-renniewaldock / ppa / ubuntu, і я не хочу встановлювати mysql-server-5.5 (мій "пакет Y") звідти. Тож я можу перевірити свою поточну ситуацію за допомогою:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Отже, оскільки все є пріоритетним 500, відповідно до довідкової сторінки вибирається одна з найвищим номером версії.

Якщо, наприклад, ви хочете встановити лише ddclient ("пакет X"), але не будь-який інший пакет, ви хочете зменшити пріоритет для всіх пакетів у PPA, крім ddclient. Створіть файл під назвою /etc/apt/preferences.d/nathan-preferences. Зауважте, що всі файли в цьому каталозі читаються і є деякі правила щодо імені файлу (він повинен містити лише буквено-цифрові символи, гіпетичні тире, тире і не має розширення чи кінця у .pref).

Спершу ми повинні знати, як ідентифікувати наш ЗРП. apt-cache policyКоманда на своїй dispays інформацію про всі джерелах. Я знаю, що мій АОЗ має назву "Натан", тому я роблю:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

Цікава частина - "o = LP-PPA-nathan-renniewaldock", яку ми використовуємо у файлі /etc/apt/preferences.d/nathan-prefs таким чином:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

Це встановлює все в PPA до пріоритетного 400, а потім повертає ddclient назад до 500 за замовчуванням. Тепер я можу перевірити, чи працює він:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Таким чином, ddclient має пріоритет 500, що є таким же, як і оригінальний пакет Ubuntu, але він буде встановлений з Nathan PPA, оскільки ця версія є вищою версією. Тепер переконаймося, що інші пакети не будуть встановлені:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

У цьому випадку пакет з Nathan PPA має пріоритет на 400, що нижче, ніж у Ubuntu, тому, хоча він має більш високу версію, він не буде оновлений. Ми можемо перевірити:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Оскільки лише пакунок, який я хочу оновити, я радий сказати, що так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.