Как я могу выбрать пакеты из PPA?

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

Например, я хочу просто пакет chromium-browser из этого хранилища , но не другие. Поэтому я не хочу, чтобы мои sudo apt-get upgrade устанавливали другие пакеты ppa (кроме chromium-browser) поверх моих существующих, только этот.

Я понимаю, что это лицензия на то, чтобы стрелять себе в ногу, если я неправильно читаю зависимости и исключаю те, которые необходимы для тех, которые я включил, но в этом случае я точно знаю, что другие пакеты не являются зависимостями для этого.

Это вообще возможно? Может быть, есть какой-нибудь белый или черный список?

49
задан 22 August 2013 в 04:20

3 ответа

Найден один способ сделать это.

Хитрость в том, чтобы использовать два пиннинговых пункта. Первое, чтобы запретить ВСЕ пакеты из PPA, а второе, чтобы выбрать нужные.

Так что для примера выше, я сначала добавил ppa как обычно:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

Теперь, если я запущу политику apt-cache, она покажет мне, что есть более новая версия chromium-браузера, и что он будет устанавливаться с обновлением, потому что он имеет тот же приоритет (500), что и мой текущий chromium-браузер.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

Это здорово по сравнению с этим пакетом, но я не хочу, чтобы остальные были в этом ppa (которые также имеют приоритет 500) для установки. Прямо сейчас, если я попытаюсь обновиться, я получу не только нужные мне пакеты с хромом из этого репозитория:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Так что я могу сказать apt, что я хочу, чтобы все пакеты в этом ppa, webapps-preview в данном случае, имели более низкий приоритет , за исключением пакетов с "хромом" в их названии. Механизм для этого - привязка пакета

Я создаю файл в файле /etc/apt/preferences.d/ с двумя пунктами. В первом говорится, что все пакеты в webapps-preview ppa имеют более низкий приоритет, чем обычные пакеты (так что они не предпочтительны, даже если у них более высокий номер версии. Второй пункт частично отменяет первый, говоря о том, чтобы дать пакетам в этом ppa с "хромом" в их имени тот же самый приоритет, что и другим пакетам, так что он будет установлен (имея более высокий номер версии).

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Чтобы определить правильную строку для опции "Pin: release", мы можем снова использовать политику apt-cache.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

Для версий apt < 0.8.14 пин-кодовые пакеты должны быть явно указаны, так как подстановочные символы не работают:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

А теперь, когда я пытаюсь обновиться, я получаю только те пакеты, которые мне нужны от этого ppa, а не те, которые мне нужны. Все хорошо выбраны вишни для меня:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?
61
ответ дан 22 August 2013 в 04:20

Вы можете на самом деле "cherry pick" определенных пакетов с помощью Synaptic, и это очень просто. Это работает следующим образом:

  • Если вы хотите сделать это только для определенных PPA, выберите "Origin" (нижний левый угол) в окне Synaptic и затем выберите PPA, который вы хотите изменить

  • выберите все пакеты, которые вы больше не хотите автоматически обновлять.

  • выберите меню "Package/Lock Version" (Версия пакета/блокировки). Все выбранные вами пакеты больше не будут автоматически обновляться до тех пор, пока вы не разблокируете их снова.

5
ответ дан 22 August 2013 в 04:20

Вы также можете выбрать выпуск, из которого хотите установить, с помощью селектора ? Origin :

Соответствует версиям пакета, происхождение которых совпадает с происхождением регулярного выражения. Например, «!? Origin (debian)» найдет все неофициальные пакеты в вашей системе (пакеты не из архива Debian).

Итак, в вашем конкретном случае вы можете использовать:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

Или вы можете указать версию using = :

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
10
ответ дан 22 August 2013 в 04:20

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

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