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

39

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

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

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

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

    
задан yuvilio 31.07.2012 в 05:01
источник

3 ответа

55

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

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

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

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

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

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

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

Я создаю файл в /etc/apt/preferences.d/ с двумя предложениями. Первый говорит, что все пакеты в webapps-preview ppa имеют более низкий приоритет, чем обычный (так что они предпочтительны not , даже если они имеют более высокий номер версии. Второе предложение частично переопределяет сначала произнесите пакеты в том, что 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
...

Для верных версий & lt; 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]?
    
ответ дан yuvilio 31.07.2012 в 06:55
источник
5

На самом деле вы можете «вишнево выбрать» определенные пакеты через Synaptic, а very легко. Он работает следующим образом:

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

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

  • выберите меню «Версия пакета / блокировки». Все выбранные вами пакеты не будут автоматически обновляться, пока вы не разблокируете их снова.

ответ дан Mrokii 31.07.2012 в 22:20
5

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

  

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

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

sudo aptitude install ~OLP-PPA-webapps-preview chromium

Или вы можете указать версию, используя <packagename>=<version> :

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
    
ответ дан Braiam 22.08.2013 в 00:56