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


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.