Скажем, я добавил PPA, у которого есть пакет X, который я хочу, но у него также есть Y-пакет, от которого я не хочу использовать или получать обновления. Как я могу из одного и того же PPA получать обновления для определенного пакета, но отказывать в обновлениях от того же PPA для других пакетов.
Поэтапный пример был бы хорош, так как это произошло со мной в нескольких PPA которые имеют конкретный пакет, который я хочу, но также добавляют целую кучу других, которые я еще не хочу обновлять.
Вы использовали бы то, что называется «pinning»
Предполагая, что вы устанавливаете пакет foo из PPA, вам наверняка потребуется установить любые зависимости от ppa.
] Но если есть другие программы, вы можете указать, какой репозиторий использовать с фиксацией.
См. Ubuntu wiki pinning
Существует пример привязки ppa на этой странице
Чтобы сделать apt-get обновлением как можно более безболезненным, установите более низкий приоритет Pin на PPA, это остановит нежелательные версии пакетов от установки.
Создайте файл /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400
. Создайте файл /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400
d11] Добавьте в файл следующее:
Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400
Используйте следующие команды до и после, чтобы проверить, что приоритет Pin-Priority обновлен.
apt-cache policy
apt-cache policy firefox-3.5
Вы использовали бы то, что называется «pinning»
Предполагая, что вы устанавливаете пакет foo из PPA, вам наверняка потребуется установить любые зависимости от ppa.
] Но если есть другие программы, вы можете указать, какой репозиторий использовать с фиксацией.
См. Ubuntu wiki pinning
Существует пример привязки ppa на этой странице
Чтобы сделать apt-get обновлением как можно более безболезненным, установите более низкий приоритет Pin на PPA, это остановит нежелательные версии пакетов от установки.
Создайте файл /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400
. Создайте файл /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400
d11] Добавьте в файл следующее:
Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400
Используйте следующие команды до и после, чтобы проверить, что приоритет Pin-Priority обновлен.
apt-cache policy
apt-cache policy firefox-3.5
Вы использовали бы то, что называется «закрепление»
Предполагая, что вы устанавливаете пакет foo из PPA, вам почти наверняка потребуется установить любые зависимости от ppa.
Но если есть другие программы, вы можете указать, какой репозиторий использовать с пиннингами.
Существует пример привязки ppa на этой странице
https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA
Чтобы сделать apt-get обновлением как можно более безболезненным, установите более низкий приоритет Pin на 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-кода обновлен.
apt-cache policy
apt-cache policy firefox-3.5
Вы использовали бы то, что называется «закрепление»
Предполагая, что вы устанавливаете пакет foo из PPA, вам почти наверняка потребуется установить любые зависимости от ppa.
Но если есть другие программы, вы можете указать, какой репозиторий использовать с пиннингами.
Существует пример привязки ppa на этой странице
https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA
Чтобы сделать apt-get обновлением как можно более безболезненным, установите более низкий приоритет Pin на 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-кода обновлен.
apt-cache policy
apt-cache policy firefox-3.5
Прежде всего, если вы уже обновили пакеты из PPA по ошибке, см. этот ответ: https://askubuntu.com/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. Обратите внимание, что все файлы в этом каталоге читаются, и есть некоторые правила о имени файла (он должен содержать только буквенно-цифровые символы, hypens, тире и не иметь расширения или заканчиваться на .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
В этом случае пакет из PPA nathan имеет приоритет 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]?
Поскольку только пакет, который я хочу, должен быть обновлен, я с радостью могу сказать «да».
Прежде всего, если вы уже обновили пакеты из PPA по ошибке, см. этот ответ: https://askubuntu.com/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. Обратите внимание, что все файлы в этом каталоге читаются, и есть некоторые правила о имени файла (он должен содержать только буквенно-цифровые символы, hypens, тире и не иметь расширения или заканчиваться на .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
В этом случае пакет из PPA nathan имеет приоритет 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]?
Поскольку только пакет, который я хочу, должен быть обновлен, я с радостью могу сказать «да».