Як я можу вибирати пакети з ЧПУ?


45

Чи є спосіб вишневого вибору пакетів із доданого до вас сховища ppa? Тобто, щоб виключити деякі з оновлення, включаючи інші?

Наприклад, я хочу лише пакунок браузера Chrome з цього сховища, але не інші. Тож я не хочу, sudo apt-get upgradeщоб у мене (крім хромового браузера) інші пакети встановили над своїми існуючими, саме цим.

Я усвідомлюю, що це ліцензія, щоб стріляти собі в ногу, якщо я неправильно читаю залежності і виключаю ті, які потрібні тим, кого я включив, але я знаю, що в цьому випадку інші пакети не є залежністю для цього.

Це взагалі можливо? Можливо, є якийсь файл білого списку / чорного списку чи щось таке?


Я передав би синаптик з трьох причин: Ubuntu відмовився від нього як оновлення програмного забезпечення на користь програмного забезпечення Ubuntu Software Center, я не бачив способу Synaptic зупинити оновлення з ppa на встановлених файлах (що було моєю проблемою), і я віддайте перевагу рішення командного рядка перед GUI. Нарешті знайшов щось, що спрацювало (див. Мою відповідь нижче).
yuvilio

2
Центр програмного забезпечення використовується для встановлення та видалення програмного забезпечення, для оновлення використовується диспетчер оновлень, ви могли б використати фіксацію в Synaptic, щоб інші пакети не оновлювались, також для нового користувача, який не хотів би возитися з Терміналом Графічний інтерфейс воліє, звичайно, ваш вірний відповідь.
Урі Еррера

Є кілька речей, які ви просто не можете зробити через Software-Center (що легко в Synaptic). І не всім (особливо новачкам) зручно користуватися командним рядком.
Mrokii

@Mrokii Я згоден, що мій підхід не для початківців. Синаптична відповідь, яку ви написали, і Урі Еррера натякнув, що, я вважаю, працює, є кращим у цьому плані. Я дозволю іншим, хто це намагається, оцінити.
yuvilio

Відповіді:


61

Знайшов один із способів зробити це.

Хитрість полягає у використанні двох застережних пропозицій. Перший забороняє ВСІ пакети з PPA, а другий - вибирати потрібні.

Отже, для прикладу вище я спочатку додаю ppa як завжди:

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

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

$ 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)
$ 

Це чудово, що стосується цього пакету, але я не хочу, щоб інші в цій програмі (які також мають пріоритет 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/ з двома пунктами. Перший говорить, що надайте всім пакетам у веб-переглядачах ppa-пакету нижчий пріоритет, ніж звичайний (так що вони не віддають перевагу, навіть якщо вони мають більший номер версії. Другий пункт частково перекриває перший, кажучи, що дайте пакети в що ppa з "chrome" на їх ім'я той самий пріоритет, що й інші пакунки, тому він буде встановлений (тим, що він має більший номер версії).

$ 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

І тепер, коли я намагаюся оновити, я отримую лише ті пакунки, які я хочу від цієї програми, а не інші. Всі вишневі для мене вишні:

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

5
досить складно, імхо.
Mrokii

5
Я не погоджуюся, це досить прямо вперед, тому що хтось любить хоче. І приємно мати всі вказівки щодо визначення імені Pin Pin.
Ніколі

Ця конкретна відповідь призначена для тих, хто хоче переконатися, що apt завжди віддасть перевагу пакетам певного сховища. Якщо ви хочете одноразового рішення, спробуйте цю відповідь чи цю
Брайам

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

5

Ви можете насправді "забрати вишню" певних пакетів за допомогою Synaptic, і це дуже просто. Це працює так:

  • Якщо ви хочете зробити це лише для певних PPA, виберіть "Походження" (нижній лівий кут) у вікні Synaptic, а потім виберіть PPA, який ви хочете змінити.

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

  • виберіть меню "Версія пакета / блокування". Усі обрані вами пакунки більше не оновлюватимуться автоматично, доки ви не розблокуєте їх знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.