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

45

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

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

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

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

yuvilio
источник
Я бы передал Synaptic по трем причинам: Ubuntu удалил его как средство обновления программного обеспечения в пользу Ubuntu Software Center, я не видел способа для Synaptic остановить обновление с ppa поверх установленных файлов (что было моей проблемой), и я предпочитаю решение командной строки для GUI. Закончилось поиском чего-то, что сработало (см. Мой ответ ниже).
Ювилио
2
Центр программного обеспечения используется для установки и удаления программного обеспечения, менеджер обновлений используется для обновления, вы могли бы использовать закрепление в Synaptic, чтобы другие пакеты не обновлялись, также для нового пользователя, который не хотел бы связываться с Терминалом. Графический интерфейс предпочтительнее, конечно, ваш правильный ответ.
Ури Эррера
Есть несколько вещей, которые вы просто не можете сделать с помощью Software-Center (что легко с Synaptic). И не всем (особенно новичкам) комфортно с командной строкой.
Mrokii
@Mrokii Я согласен, что мой подход не для начинающих. Синаптический ответ, который вы написали, и на который намекнул Ури Эррера, который, как я полагаю, работает, лучше в этом отношении. Я позволю другим, кто попробует это, оценить это.
yuvilio

Ответы:

61

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

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

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

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

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

$ 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, имели более низкий приоритет, за исключением пакетов с именем «chromium ». Механизм для этого - закрепление пакета

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

$ 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]?
yuvilio
источник
5
довольно сложно, имхо.
Мрокии
5
Я не согласен, это довольно просто для того, что хочет кто-то любит. И приятно иметь все инструкции по определению PIN-кода PPA.
Никол
Этот конкретный ответ предназначен для тех, кто хочет убедиться, что apt всегда предпочитает пакеты из определенного репозитория. Если вы хотите одноразовое решение, попробуйте этот ответ или этот
Braiam
8

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

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

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

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

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

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
Braiam
источник
5

На самом деле вы можете «выбрать вишню» определенных пакетов через Synaptic, и это очень просто. Это работает так:

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

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

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

Mrokii
источник