Як видалити рекомендовані та запропоновані залежності видалених пакетів?


16

Мені відомо, як усунути залежності видаленого пакета? і я спробував

apt-get autoremove

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

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

apt-get remove --auto-remove Z

тоді Y не видаляється автоматично, навіть якщо від цього нічого не залежить. (X "підхопив" Y, хоча це не залежить від нього).


1
Чи можете ви замість цього сказати, що таке пакет, що робить це?
Брайам

Прикладів багато, тому я спробував витягти суть проблеми у наведеному вище описі. Ви праві, що я мав би також включити конкретний приклад: Розгляньте встановлення 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цього можна зробити це через GUI консолі, меню Опції> Налаштування> "Встановити рекомендовані пакети автоматично" (зніміть прапорець).


Я б не рекомендував не встановлювати рекомендації, оскільки вони більшість часу корисні .
Браїам

1
@Braiam Це не те, що запитував ОП. Ваш коментар для нього, а не для мене.
Тотор

Я просто кажу, що це, можливо, непосильне.
Брайам

@Braiam Це ваш POV. Я досить добре живу з InstallRecommendsінвалідами. Для запису він був відключений за замовчуванням до виходу Debian Squeeze, тобто з лютого 2011 року (не знаю про Ubuntu). Крім того, вам може не знадобитися однакова конфігурація на сервері або на робочому столі.
Тотор

2
InstallRecommends: Тому що навіщо встановлювати 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

Обережно!

Деяка функціональність може бути втрачена. Будьте готові до розслідування та перевстановлення речей. Можливо, простіше залишити ці пакунки в спокої.

Інші варіанти

Щоб видалити "рекомендовані" та "запропоновані" пакети виключно для певного пакета, ознайомтеся з журналом підходящої історії.


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>

Таким чином ви можете бути впевнені, що ваш пакет буде видалений.

Ви також можете використовувати деборфан для усунення деяких залежностей.


1
До речі, моє розуміння з підходящої сторінки полягає в тому, що 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але деборфан все ще може пропустити деякі пакунки. Ви можете скористатися Debug::параметрами, а також перевірити іншу відповідь щодо цього . Ви також можете використовувати --no-install-recommends, але apt-get не встановлювати запропоновані пакети за замовчуванням.
Брайам

@ user2809402 також слід перевірити askubuntu.com/q/244470/169736
Брайам

Браям - дякую за вказівник деборфану. Я перевірю це.
user2809402

-1

Правильно, якщо ви хочете видалити пакет <Z>із залежностями, просто введіть:

sudo apt-get autoremove --purge <Z>

3
Дякую, але, на жаль, додавання "--purge" просто видаляє конфігурації пакетів, які видаляються за допомогою "autoremove". Але наскільки я бачу, це не змінює рішення про те, які пакети видалити. Тобто, залежності Z, запропоновані деяким раніше існуючим пакетом X, все ще не знімаються, незалежно від того, вказую чи ні "--purge".
користувач2809402

1
Крім того, autoremoveпрацює в масштабах всієї системи. Тому щоразу, коли ви зателефонуєте autoremove, він видалить усі невикористані пакети у вашій системі. Встановивши пакет, тоді autoremoving, як правило, система не повернеться в той самий стан, а натомість залишить купу пакетів, що залишилися.
Рольф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.