Перш за все, якщо ви вже оновили пакети з 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]?
Оскільки лише пакунок, який я хочу оновити, я радий сказати, що так.