Jak mogę usunąć pakiety sieroce w Fedorze?

42

Właśnie przełączyłem się z Ubuntu na Fedorę14. W Ubuntu mieliśmy apt-get autoremovemożliwość usunięcia osieroconych / nieużywanych pakietów. Jaki jest odpowiednik Fedory?

c0da
źródło

Odpowiedzi:

36

package-cleanup --quiet --leavesz pakietu yum-utils wyświetli listę bibliotek, na które inne pakiety nie korzystają. Niestety bywa nieco przesadzona. Na przykład w moim systemie zasugerowałem usunięcie libvirt. Dodanie --exclude-binargumentu pomaga. Jeśli jesteś zadowolony z tej sugestii, to aby posprzątać paczki, wykonaj:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

źródło
1
Przetestowałem to po zainstalowaniu i usunięciu, netbeans-platforma czyszczenie pakietów zawiera listę niektórych rzeczy, ale w rzeczywistości nie ma wcześniej zainstalowanych netbeans-platformzależności (używając Fedory 17).
maxschlepzig
2
Nie działa, jak wskazał @maxschlepzig
c0da
30

DNF, yum zastępujący od Fedory 22, zapewnia także autoremovepodkomendę, która jest wzorowana na apt-get / yum autorove.

Przykłady:

# dnf autoremove

który próbuje usunąć wszystkie automatycznie zainstalowane i w przeciwnym razie nieużywane pakiety zależności - powinien być prawie równoważny z apt-get autoremove.

# dnf autoremove examplepackage

który usuwa examplepackage i wszystkie jego automatycznie zainstalowane (i poza tym nieużywane) zależności.

Mniam

Yum ma polecenie autorove od Fedory 19 i jest udokumentowane od Fedory 20 / RHEL 7.

Użycie jest analogiczne do implementacji dnf, np .:

# yum autoremove

lub

# yum autoremove examplepackage

Zmień zachowanie yum usuwa

Yum obsługuje opcję konfiguracji zmieniającą domyślne zachowanie removepodkomendy (np. Przez /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Po ustawieniu tej opcji następna yum removepróba usunięcia automatycznie zainstalowanych zależności, jeśli nie są one potrzebne innym pakietom.

Możesz także tymczasowo przetestować tę opcję za pomocą:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Obejście dla starej wersji Fedory

(Dla wersji Fedory, w której podkomenda autora nie jest dostępna i / lub clean_requirements_on_removenie działa.)

Chociaż podczas instalacji pakietów zainstalowane są zależności jako takie (wydaje się, że jest to stosunkowo nowa funkcja rpm / yum).

Możesz znaleźć niepotrzebne zależności poprzez:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Ta linia poleceń jest inspirowana skryptem fenris02 .

Po sprawdzeniu tmp(i być może kuracji) możesz je usunąć poprzez coś takiego:

# xargs yum remove < tmp
maxschlepzig
źródło
Dał błąd „Nieprawidłowy„ powód ”yumdb querytag dla zainstalowanego pkg: adobe-release-x86_64-1.0-1.noarch”. Co to teraz jest?
c0da,
@ c0da, myślę, że funkcja, którą yum zapisuje w swojej bazie danych jako „przyczynę” instalacji (np. didep lub „user”) dla każdego pakietu, jest stosunkowo nowa. Być może Twoja instancja Fedory poprzedza wprowadzenie tej funkcji, tak że wciąż masz (kilka) starych pakietów zainstalowanych bez tego zestawu znaczników.
maxschlepzig
Zainstalowałem Fedorę kilka dni temu. Myślę więc, że wymagany tag powinien tam być.
c0da,
1
@ c0da, być może „przyczyna” nie została zarejestrowana, ponieważ pakiet został zainstalowany adobe-releaseprzezyum localinstall
maxschlepzig
16

musisz zainstalować wtyczkę yum „remove-with-leaves”:

# yum install yum-plugin-remove-with-leaves.noarch

po zainstalowaniu:

# yum remove --remove-leaves package

powodzenia!

mrc
źródło
3
i jak go uruchomić dla wszystkich zainstalowanych aplikacji?
cnd 20'12
Nie wydaje się również bardzo wiarygodny: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig
1
RHEL / CentOS / Oracle Linux 6 wymaga yum-plugin-remove-with-leaves.noarchzainstalowanego pakietu do użyciapackage-cleanup
Terry Wang
8
# package-cleanup --orphans >/tmp/junk

edytuj /tmp/junkplik i usuń pierwszy wiersz informacyjny z wiersza poleceń, wprowadź:

for file in `cat /tmp/junk`
do
  yum remove $file
done
Larry Mohr
źródło
1
Package-cleanup (1) mówi: „--orphans Wyświetla listę zainstalowanych pakietów, które nie są dostępne z aktualnie skonfigurowanych repozytoriów”. To nie jest równoważne z tym, co apt-get autoremoverobi. apt-get (8) mówi: „autorove służy do usuwania pakietów, które zostały automatycznie zainstalowane, aby spełnić zależności dla niektórych pakietów i które nie są już potrzebne”.
maxschlepzig
1
Nie działa! Musiałem się wcześniej mylić. Dzięki @maxschlepzig
c0da
Kiedyś to działało dla mnie, ale w CentOS 6.6 faktycznie wyświetla wszystkie zainstalowane pakiety, nie tylko sieroty.
Gaia,
4

UWAGA: Ta odpowiedź jest poprawna, ale dotyczy tylko RHEL 7+ i Fedory 20+ (gdzie autorove został dodany jako nowa funkcja).

# yum autoremove

Potwierdź, aby usunąć wybrane pakiety.

Chilly Milly
źródło
0

Opierając się na odpowiedzi Larry'ego Mohra :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Jeśli zastanawiasz się, obejmuje pomijanie w celu uzyskania najszybszego kopii lustrzanej).

Bengt
źródło
0

W Fedorze pakiet osierocony oznacza brak repozytoriów kandydatów do jego aktualizacji!

  1. Jeśli pakiety osierocone zostały wygenerowane przez ciebie, wyłącz yum.repos.d / some.conf.

    yum distro-sync
    
  2. W przypadku innych pakietów osieroconych polecenie może być niebezpieczne.

    yum remove $(package-cleanup --orphans)
    

    lub po prostu użyj polecenia bezpieczeństwa.

    yum remove name-of-page
    
firo
źródło