Jak usunąć zalecane i sugerowane zależności odinstalowanych pakietów?

16

Wiem o tym, jak usunąć zależności odinstalowanego pakietu? i próbowałem

apt-get autoremove

ale to nie usuwa zależności, które są zalecane / sugerowane przez inne pakiety.

Oznacza to, że jeśli zainstaluję pakiet X, który zaleca Y, ale nie zainstaluję Y, a następnie zainstaluję pakiet Z zależny od Y. i później to zrobię

apt-get remove --auto-remove Z

wtedy Y nie jest automatycznie usuwane, nawet jeśli nic od tego nie zależy. (X „podniósł” Y, nawet jeśli to nie zależy).

użytkownik2809402
źródło
1
Czy możesz zamiast tego powiedzieć, jaki pakiet to robi?
Braiam
Istnieje wiele przykładów, więc próbowałem wydobyć istotę problemu w powyższym opisie. Masz rację, że powinienem również podać konkretny przykład: rozważ instalację pełnego texlive. Instaluje wiele pakietów czcionek, które są sugerowane (ale nie wymagane) przez wiele wcześniej istniejących pakietów (nie pamiętam dokładnie, które, ale myślę, że sugerowały to wcześniej istniejące libreoffice, matplotlib lub oktawa). Problem polega na tym, że „apt-get install texlive-full”, a następnie „apt-get remove --purge --auto-remove texlive-full” nie pozostawia systemu w tym samym oryginalnym stanie.
user2809402

Odpowiedzi:

14

Jeśli chcesz usunąć zalecane pakiety z systemu, nawet jeśli nadal są zainstalowane niektóre pakiety, które je zalecają (lub sugerują), umieść w pliku /etc/apt/apt.conf.d/99_norecommends(utwórz):

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

Dokumentacja tych opcji znajduje się tutaj .

Następnie następny apt powinien usunąć je wszystkie. Jeśli tak się nie stanie, uruchom aptitudei wpisz gi gjeszcze raz.

Ta konfiguracja wyłącza również automatyczną instalację zalecanych pakietów podczas używania apt-get. Można aptitudeto zrobić z graficznego interfejsu konsoli, menu Opcje> Preferencje> „Automatycznie instaluj zalecane pakiety” (odznacz).

Totor
źródło
Nie polecałbym nie instalować rekomendacji, ponieważ są one najczęściej przydatne .
Braiam
1
@Braiam Nie o to jednak poprosił OP. Twój komentarz jest dla niego, nie dla mnie.
Totor
Mówię tylko, że to może przesada.
Braiam
@Braiam To jest twój POV. Żyję całkiem dobrze z InstallRecommendsniepełnosprawnymi. Dla przypomnienia, był on domyślnie wyłączony do czasu wydania Debian Squeeze, czyli od lutego 2011 (nie wiem o Ubuntu). Ponadto może nie być potrzebna ta sama konfiguracja na serwerze lub na komputerze.
Totor
2
Instaluj Polecam: Bo po co instalować 5 MB rzeczy, które chcesz, skoro możesz także zainstalować 1 GB rzeczy, których nie chcesz?
Mark K Cowan
7

Przesłanianie opcji APT

W przeciwieństwie do zależności, automatycznie instalowane pakiety „zalecane” lub „sugerowane” mogą być ignorowane przez apt-get autoremove.

Jak opisano w innym miejscu, to zachowanie APT można zmienić w konfiguracji.

Podobnie konfigurację apt-getpolecenia można tymczasowo zmienić za pomocą -oopcji wiersza polecenia.

W ten sposób zmusisz autoraove do usunięcia resztek „zalecanych” i „sugerowanych” pakietów, oprócz nieużywanych zależności.

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

Uwaga!

Niektóre funkcje mogą zostać utracone. Przygotuj się do zbadania i ponownej instalacji. Pakiety te mogą być łatwiejsze w spokoju.

Inne opcje

Aby odinstalować pakiety „zalecane” i „sugerowane” wyłącznie dla konkretnego pakietu, zajrzyj do dziennika historii apt.

Rolf
źródło
1
po prostu analizować takie pakiety, wykonywać na sucho z apt-get„s -sopcji i rury do grep ^Remv- tak to komenda:apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
myrdd
1

W rzeczywistości polecenie to:

sudo apt-get autoremove <Z>

Ale to podstęp! Jeśli którakolwiek z zależności ma inne zainstalowane wcześniej pakiety, które je polecają / sugerują, apt nie usunie ich.

Nie określiłeś, który pakiet jest, ale na przykład, gdybym miał zainstalować wtyczkę IcedTea, zainstalowałby Java / OpenJRE według zależności. Jeśli odinstaluję je przy użyciu sudo apt-get autoremove icedtea-7-plugin, zauważysz, że nie usunie Java / OpenJRE, ponieważ LibreOffice sugeruje również pakiety.

Tak więc, aby je usunąć, musisz być zbyt konkretny w stosunku do pakietu, który chcesz odinstalować, że normalne autoremovenie:

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

W ten sposób możesz mieć pewność, że Twój pakiet zostanie usunięty.

Możesz także użyć deborphan, aby usunąć niektóre zależności.

Braiam
źródło
1
Nawiasem mówiąc, rozumiem z apt manpage, że autorove nie oczekuje nazwy pakietu i po prostu wyczyści wszystkie niepotrzebne zależności pakietu w systemie. Musisz więc wykonać 2 kroki: „apt-get remove Z”, a następnie „apt-get autorove”. Te dwa kroki można wykonać jednocześnie za pomocą polecenia „apt-get remove --auto-remove Z”, jak wspomniano w moim pierwotnym pytaniu. Ale tak jak powiedziałem, problem polega na tym, że istnieją pewne resztki pakietów, które nie są usuwane, jeśli zostały zasugerowane przez coś innego.
user2809402
1
Tak, doskonale opisałeś mój problem. Dziękuję Ci. Ale niestety nie rozwiązałeś tego, ponieważ nie chcę wchodzić do /var/log/apt/history.log i szukać wszystkich pakietów Y, które zostały zainstalowane kilka miesięcy temu przy pomocy Z (w twoim przykładzie, Y = java / jre, Z = icedtea plugin), a następnie ręcznie dodaj je wszystkie do wiersza poleceń apt. Chcę tylko określić Z, a pozostałe zależności będą pobierane automatycznie, nawet jeśli są one sugerowane przez inny istniejący pakiet X (X = libreoffice w twoim przykładzie).
user2809402
1
Niestety tak właśnie działa system apt, woli raczej instalować pakiety niż je usuwać, nawet jeśli nie są już potrzebne. Jedynym sposobem na ich usunięcie jest ręcznie lub za pomocą, deborphanale deborphan może nadal nie uwzględniać niektórych pakietów. Możesz skorzystać z Debug::opcji, a także sprawdzić moją inną odpowiedź na ten temat . Możesz także użyć --no-install-recommendsdomyślnie, ale apt-get nie instaluje sugerowanych pakietów.
Braiam
@ user2809402 powinieneś również sprawdzić askubuntu.com/q/244470/169736
Braiam
Braiam- Dzięki za wskaźnik deborphan. Sprawdzę to.
user2809402
-1

Racja, jeśli chcesz usunąć pakiet <Z>z zależnościami, po prostu wpisz:

sudo apt-get autoremove --purge <Z>
użytkownik1019723
źródło
3
Dzięki, ale niestety dodanie „--purge” po prostu usuwa konfiguracje pakietów, które są usuwane przez „autorove”. Ale o ile widzę, nie zmienia to decyzji o tym, które pakiety usunąć. Oznacza to, że zależności Z, które są sugerowane przez wcześniej istniejący pakiet X, nadal nie są usuwane, niezależnie od tego, czy podam „--purge”.
user2809402
1
autoremoveDziała również w całym systemie. Za każdym razem, gdy zadzwonisz autoremove, usunie wszystkie nieużywane pakiety w twoim systemie. Zainstalowanie pakietu autoremovingzwykle nie spowoduje przywrócenia systemu do tego samego stanu, a zamiast tego pozostawi kilka „pozostałych” pakietów.
Rolf