Як я можу виключити конкретні пакети з установки з apt-get?


12

Я хотів би виключити конкретні пакети з інсталяції apt-get, тобто встановити метапакет без переліку конкретних пакетів, бажано з одним викликом apt-get.

Наприклад, у командному рядку Ubuntu 14.04 LTS я встановлюю середовище робочого столу MATE. У 14.04 LTS MATE не є офіційним ароматом, тому я додаю PPA:

sudo apt-get install software-properties-common # need them for 'apt-add-repository'
sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
sudo apt-get update

потім встановіть:

sudo apt-get install xorg mate-core --no-install-recommends

Навіть без рекомендованих додатків, mate-coreвстановлює 3 емулятори терміналу: xterm, uxtermі mate-terminal , останній недолік відповідних шрифтів в той час як встановлено в цій мінімальній конфігурації.

Припустимо, я вирішу, що 3 термінальних програм буде занадто багато, і я хотів би встановити xorgі mate-core без, xterm і безmate-terminal . Я міг би зробити

sudo apt-get install xorg mate-core --no-install-recommends
sudo apt-get purge xterm mate-terminal

але чи можна це зробити за один раз? Чи є такий синтаксис, як

sudo apt-get install xorg mate-core --without xterm mate-terminal

Ви впевнені, що можете видалити xtermі mate-terminal? У 15.04 mate-terminal- це жорстка залежність mate-desktop-environment-core, яка є важкою залежністю mate-core, і я вважаю, що PPA mate-terminalне передбачає x-terminal-emulator(що пакет у 15.04 робить).
муру

Можливо, ти маєш рацію , якщо тільки зірочка поруч із назвами пакунків не означає тут щось особливе. Також напрочуд мало місця буде звільнено. У будь-якому разі, моє запитання полягає в тому, щоб видалити все, що можна видалити, скажімо, XTermі, можливо, UXTerm(я не впевнений, яка назва пакета для останнього)
Микола Лещів

1
Це те, що ви шукаєте? askubuntu.com/questions/75895 / ...
Seth

@Seth Не зовсім: я хотів би, щоб були якісь синтаксиси на кшталтsudo apt-get install xorg mate-core --without xterm mate-terminal
Микола Лещов

Якщо ви використовуєте aptitude(або якийсь графічний менеджер пакунків), ви можете (де) вибрати, які пакунки встановити, і якщо один призведе до розбитої залежності, пояснення (як правило) буде надано.
saiarcot895

Відповіді:


7

Таким чином, мат-ядро залежить від mate-desktop-environment-coreяких , в свою чергу , залежить від mate-terminal. Залежить не може бути порушена легко. Також apt-getні aptitudeпідтримує --withoutабо --excludeваріант і «тримає» пакети не допоможе:

$ echo "mate-terminal hold" | sudo dpkg - набір-вибір
$ sudo apt - отримайте встановлення mate-core
[...]
Неможливо встановити деякі пакунки ...
Наступні пакети мають невиконані залежності:

Звичайно, можна dpkg --force-dependsвстановити пакет, але це, можливо, не те, що ви хочете.

Можливістю було б заповнити Depends:прапор фіктивним пакетом:

$ sudo apt-get install equivs
$ equivs-control mate-terminal
$ vi мате-термінал
Розділ: різне
Пріоритет: за бажанням
Стандарти-версія: 3.9.2
Пакет: мате-термінал
Версія: 1.8.0
Опис: Макетна упаковка для мате-терміналу
: х

$ equivs-build mate-термінал
$ sudo dpkg -i мате-термінал_1.8.0_all.deb

Тепер mate-coreслід мати змогу встановити без огляду mate-terminal. Повторіть те ж саме для інших пакетів, які потрібно виключити.

Звичайно, це зусилля, і --withoutваріант був би непоганий. Може бути, помилка у списку бажань може бути відкрита для надання такої функціональності в майбутньому, але я якось сумніваюся, що це буде реалізовано.

Однак більш реалістичним варіантом буде подати клопотання власнику PPA надати ще один мета-пакет для MATE з меншими Dependsпакетами.


4

Якщо ви використовуєте aptitudeабо графічний менеджер пакунків (Synaptic тощо), ви можете скасувати вибір пакунків, які слід встановити , якщо це не спричинить проблеми із залежностями.

У випадку aptitude, перш ніж встановлювати пакет (на графічному поданні), він покаже, чому встановлюється залежний пакет. У моєму випадку я використовую KDE, тому не маю пакетів MATE. Якщо я скажу встановити mate-core, я отримую наступне:

введіть тут опис зображення

Зауважте, що mate-coreпозначено як встановлення вручну, і багато інших пакунків встановлюються. Для mate-terminalпакета внизу написано: " mate-desktop-environment-core[всесвіт] залежить від mate-terminal(> = 1.0.0)". Перейшовши на запис для mate-desktop-environment-core,

введіть тут опис зображення

" mate-core[Всесвіт] залежить від mate-desktop-environment-core(> = 1,8,0 + 9)". Ось чому mate-terminalвстановлюється.

Якщо замість цього встановлений рекомендований пакет (а не те, що залежить від іншого пакету), aptitudeвам це скаже, і ви можете сказати йому не встановлювати цей пакет без жодних порушених залежностей. Наприклад:

введіть тут опис зображення


2

Інший метод

Завантажте основний пакет, який залежить від іншого. Витягніть пакет, видаліть небажані залежності, перепакуйте його. Тепер відкрийте новий пакет з інсталятором пакету gdebi . Він встановить нові залежності для вас.

  • Список депозитів можна знайти на DEBIAN / control -> залежить
  • Щоб отримати допомогу щодо відновлення дебю, дивіться мою відповідь про те, як створити PPA

0

Існує спеціальний aptсинтаксис для таких сценаріїв: додавання дефіса (знак мінус) до пакету видалить / не встановить його, тому найближчим до вашого sudo apt-get install xorg mate-core --without xterm mate-terminal є sudo apt-get install xorg mate-core xterm- mate-terminal- (помічено на /ubuntu//a/1011439/182923 )

У цьому випадку це не допоможе, як ви зіткнетесь

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

але, здається, це відповідь на ваше конкретне питання. Тож для довідки, це перехресне повідомлення.

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