Как исключить определенные пакеты из установки с помощью 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 Не совсем: Я хотел бы, чтобы был какой-то синтаксис, как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 --set-selection
$ sudo apt-get install mate-core
[...]
Некоторые пакеты не могут быть установлены ...
Следующие пакеты имеют неудовлетворенные зависимости:

Конечно, можно использовать dpkg --force-dependsдля установки пакета, но это, возможно, не то, что вы хотите.

Можно было бы заполнить Depends:флаг фиктивной посылкой:

$ sudo apt-get установить эквиваленты
$ эквив-контроль мат-терминал
$ vi mate-терминал
Раздел: разное
Приоритет: необязательно
Стандарты-Версия: 3.9.2
Пакет: мат-терминал
Версия: 1.8.0
Описание: Пустышка для мат-терминала
:Икс

$ эквив-сборка mate-терминал
$ sudo dpkg -i mate-terminal_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[Universe] зависит от mate-terminal(> = 1.0.0)». Переходя к записи для mate-desktop-environment-core,

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

mate-coremsgstr " [вселенная] зависит от mate-desktop-environment-core(> = 1.8.0 + 9)". Вот почему mate-terminalустанавливается.

Если вместо этого устанавливается рекомендуемый пакет (а не что-то, что зависит от другого пакета), aptitudeвам сообщат об этом, и вы можете сказать ему не устанавливать этот пакет без каких-либо сломанных зависимостей. Например:

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


2

Другой метод

Загрузите основной пакет, который зависит от другого. Распакуйте пакет, удалите нежелательные зависимости, перепакуйте его. Теперь откройте новый пакет с помощью установщика пакета gdebi . Это установит новые зависимости для вас.

  • Список зависимостей можно найти в DEBIAN / control -> зависимость
  • Для получения справки по ремонту Deb см. Мой ответ о том, как создать 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.