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