Как удалить рекомендуемые и предлагаемые зависимости неустановленных пакетов?

16

Я знаю, как удалить зависимости неустановленного пакета? и я попробовал

apt-get autoremove

но это не удаляет зависимости, которые рекомендуются / предлагаются другими пакетами.

То есть, если я устанавливаю пакет X, который рекомендует Y, но я не устанавливаю Y, а затем я устанавливаю пакет Z, который зависит от Y. и позже я делаю

apt-get remove --auto-remove Z

тогда Y не удаляется автоматически, хотя от этого ничего не зависит. (X «подобрал» Y, хотя это от этого не зависит).

user2809402
источник
1
Не могли бы вы вместо этого сказать, что это за пакет?
Braiam
Примеров много, поэтому я попытался раскрыть суть проблемы в приведенном выше описании. Вы правы, что я должен был также включить конкретный пример: рассмотрите возможность установки texlive-full. Он устанавливает множество пакетов шрифтов, которые предлагаются (но не требуются) многими ранее существовавшими пакетами (я не могу точно вспомнить, какие именно, но я думаю, что существовавшие ранее libreoffice или matplotlib или octave предложили их). Таким образом, проблема в том, что «apt-get install texlive-full», за которым следует «apt-get remove --purge --auto-remove texlive-full», не оставляет систему в том же исходном состоянии.
user2809402

Ответы:

14

Если вы хотите удалить рекомендуемые пакеты из вашей системы, даже если все еще есть некоторые установленные пакеты, рекомендующие (или предлагающие) их, поместите в файл следующее /etc/apt/apt.conf.d/99_norecommends(создайте его):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

Документация по этим опциям находится здесь .

Затем следующий прогон должен удалить их всех. Если этого не произойдет, запустите aptitudeи введите gи gснова.

Эта конфигурация также отключает автоматическую установку рекомендуемых пакетов при использовании apt-get. Для aptitudeэто можно сделать с помощью графического интерфейса консоли Опции меню> Настройки> «Установить пакеты рекомендуется автоматически» (снимите галочку).

Totor
источник
Я не рекомендовал бы не устанавливать рекомендации, поскольку они большую часть времени полезны .
Брайам
1
@Braiam Это не то, что спросил ОП. Ваш комментарий для него, а не для меня.
Тотор
Я просто говорю, что это может быть излишним.
Брайам
@Braiam Это твое POV. Я очень хорошо живу с InstallRecommendsинвалидами. Для записи, он был отключен по умолчанию до выпуска Debian Squeeze, то есть с февраля 2011 года (не знаю об Ubuntu). Кроме того, вам может не понадобиться такая же конфигурация на сервере или в настольной системе.
Тотор
2
Рекомендуем установить: потому что зачем устанавливать 5 МБ того, что вам нужно, тогда как вы также можете установить 1 ГБ того, что вам не нужно?
Марк К Коуэн
7

Переопределение параметров APT

В отличие от зависимостей, автоматически устанавливаемые «рекомендуемые» или «предлагаемые» пакеты могут игнорироваться apt-get autoremove.

Как описано в другом месте, это поведение APT может быть изменено в конфигурации.

Аналогично, конфигурация apt-getкоманды может быть временно изменена с помощью параметра -oкомандной строки.

Таким образом, вы бы принудительно удалили «рекомендуемые» и «предлагаемые» пакеты в дополнение к неиспользуемым зависимостям.

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

Внимание!

Некоторые функции могут быть потеряны. Будьте готовы исследовать и переустанавливать вещи. Может быть проще оставить эти пакеты в покое.

Другие опции

Чтобы удалить «рекомендуемые» и «предлагаемые» пакеты исключительно для определенного пакета, взгляните на журнал истории apt.

Рольф
источник
1
чтобы просто проанализировать такие пакеты, выполните пробный прогон с параметром apt-get's' -sи grep ^Remvapt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
отправьте
1

На самом деле команда это:

sudo apt-get autoremove <Z>

Но в этом есть хитрость! Если у какой-либо из зависимостей есть другие ранее установленные пакеты, которые рекомендуют / предлагают их, то apt не удалит их.

Вы не указали, что это за пакет, но, например, если бы я установил плагин IcedTea, он установил бы Java / OpenJRE по зависимостям. Если я удалю их с помощью, sudo apt-get autoremove icedtea-7-pluginвы заметите, что он не удалит Java / OpenJRE, поскольку LibreOffice также предлагает пакеты.

Таким образом, чтобы удалить их, вы должны быть слишком конкретны в отношении пакета, который хотите удалить, что обычно autoremoveне происходит:

sudo apt-get autoremove <Z> <dependency of Z>

Таким образом, вы можете быть уверены, что ваш пакет будет удален.

Вы также можете использовать deborphan, чтобы удалить некоторые зависимости.

Braiam
источник
1
Кстати, я понимаю из справочной страницы apt, что autoremove не ожидает имя пакета и просто удалит все ненужные зависимости пакетов в системе. Таким образом, вам нужно будет сделать 2 шага: «apt-get remove Z» с последующим «apt-get autoremove». Эти 2 шага могут быть выполнены одновременно с помощью «apt-get remove --auto-remove Z», как упоминалось в моем первоначальном вопросе. Но, как я уже сказал, проблема в том, что есть некоторые оставшиеся пакеты, которые не удаляются, если они были предложены чем-то другим.
user2809402
1
Да, вы описали мою проблему отлично. Спасибо. Но, к сожалению, вы не решили это, потому что я не хочу идти в /var/log/apt/history.log и искать все пакеты Y, которые были установлены пару месяцев назад с Z (в вашем примере, Y = java / jre, Z = плагин icedtea), а затем вручную добавьте их все в командную строку apt. Я хочу указать только Z, а остальные зависимости будут выбраны автоматически, даже если они предложены другим существующим пакетом X (X = libreoffice в вашем примере).
user2809402
1
К сожалению, именно так работает система apt, она предпочитает сохранять пакеты установленными, а не удалять их, даже если они больше не нужны. Единственный способ удалить их - вручную или с помощью, deborphanно deborphan может пропустить некоторые пакеты. Вы можете использовать Debug::параметры, а также проверить мой другой ответ по этому поводу . Вы также можете использовать --no-install-recommends, но apt-get не устанавливает предложенные пакеты по умолчанию.
Брайам
@ user2809402 Вы также должны проверить askubuntu.com/q/244470/169736
Braiam
Брайам - Спасибо за указатель на деборфану. Я это проверю.
user2809402
-1

Хорошо, если вы хотите удалить пакет <Z>с зависимостями, просто введите:

sudo apt-get autoremove --purge <Z>
user1019723
источник
3
Спасибо, но, к сожалению, добавление «--purge» просто удаляет конфигурации пакетов, которые удаляются с помощью «autoremove». Но, насколько я вижу, это не меняет решение о том, какие пакеты удалять. То есть зависимости Z, которые предлагаются некоторыми ранее существовавшими пакетами X, все еще не удалены, независимо от того, указываю ли я «--purge».
user2809402
1
Также autoremoveработает в масштабе всей системы. Поэтому при autoremoveкаждом вызове он удалит все неиспользуемые пакеты в вашей системе. Устанавливая пакет, он autoremoving, как правило, не возвращает систему в то же состояние и вместо этого оставляет кучу «оставшихся» пакетов.
Рольф