Как исключить определенные пакеты из установки с помощью apt-get?

Я хотел бы исключить определенные пакеты из установки с 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

3 ответа

Итак, мат-ядро зависит от 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 пакеты установлены.

Там особенный apt синтаксис для таких сценариев, как это: добавление дефиса (знак минуса) к пакету удалит / не установит его, так что ближайший к вашему sudo apt-get install xorg mate-core --without xterm mate-terminalявляетсяsudo apt-get install xorg mate-core xterm- mate-terminal-(замечено на /questions/583927/no-install-rekomenduet-tolko-ukazannyie-paketyi/583935#583935)

Это не поможет в этом случае, так как вы столкнетесь с

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.

но, похоже, это ответ на ваш конкретный вопрос. Так что для справки этот кросс-пост.

Если вы используете 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 скажет вам об этом, и вы можете сказать, чтобы он не устанавливал этот пакет без каких-либо сломанных зависимостей. Например:

введите описание здесь

Другой метод

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

  • Список зависимостей можно найти в DEBIAN /control -> зависимость
  • Для получения справки по ремонту Deb см. Мой ответ о том, как создать PPA
Другие вопросы по тегам