Можно ли разрешить только определенные обновления пакетов из PPA

19

Допустим, я добавил PPA с пакетом X, который мне нужен, но также с пакетом Y, с которого я не хочу использовать или получать обновления. Как я могу из того же PPA получать обновления для определенного пакета, но запрещать обновления из того же PPA для других пакетов.

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

Луис Альварадо
источник

Ответы:

16

Вы бы использовали то, что называется "закрепление"

Предполагая, что вы устанавливаете пакет foo из PPA, вам почти наверняка потребуется установить все зависимости от ppa.

Но если есть другие программы, вы можете указать, какой репозиторий использовать с закреплением.

Смотрите Ubuntu Wiki Pinning

На этой странице есть пример закрепления ppa

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

Со страницы вики:

Чтобы сделать обновление apt-get настолько безболезненным, насколько это возможно, установите более низкий Pin-Priority на PPA, это остановит установку нежелательных версий пакетов. После установки пакеты из PPA ubuntu-mozilla-daily всегда проигрывают в любом конкурсе с пакетами из других репозиториев, даже если они имеют более высокую версию.

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

Добавьте следующее в файл:

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

Используйте следующие команды, до и после, чтобы убедиться, что Pin-Priority был обновлен.

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, в соответствии с man-страницей выбрана та, которая имеет наибольший номер версии.

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

Для начала нам нужно узнать, как определить наш PPA. apt-cache policyКоманда на своей dispays информацию обо всех источниках. Я знаю, что у моего PPA есть «nathan» в имени, поэтому я делаю:

$ 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]?

Поскольку только пакет, который я хочу, должен быть обновлен, я рад сказать, что да.

Роб Фишер
источник