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

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

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

19
задан 1 February 2017 в 17:13

2 ответа

Вы можете использовать то, что называется «закреплением»

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

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

См. Прикрепление wiki Ubuntu

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

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

Со страницы wiki:

Чтобы сделать обновление 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
17
ответ дан 1 February 2017 в 17:13

Прежде всего, если вы уже обновили пакеты из PPA по ошибке, смотрите этот ответ: https://askubuntu.com/a/142808/103117 в частности раздел об использовании ppa-purge. Так как я уже обновил пакеты и apt-get не будет понижать класс, независимо от приоритетов, проще всего сначала очистить все обновленные пакеты, затем исправить приоритеты, затем повторно добавить PPA и обновить только те пакеты, которые вам нужны.

Полное объяснение системы приоритетов/пиновки смотрите в man apt_preferences.

Если пакет доступен из нескольких источников, то каждому из них будет присвоен приоритет, и вы можете увидеть это с помощью apt-cache policy . Например, я использую 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 самостоятельно отображает информацию обо всех источниках. Я знаю, что в названии моего 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]?

Так как обновляется только тот пакет, который я хочу, я с радостью соглашусь.

9
ответ дан 1 February 2017 в 17:13

Другие вопросы по тегам:

Похожие вопросы: