TL; DR lub „Just scorch my pi”
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(Powtarzaj, apt-get autoremove --purge
aż nie pozostanie sierota)
Dalsze wyjaśnienia
Jeśli pakiet foo zależy od innego pakietu libfoo, a ty usuniesz pakiet libfoo , to zależne ( foo ) również zostanie usunięte. Ponieważ Foo ma linię zależną określającą libfoo , opuszczenie foo byłoby zerwane, gdyby libfoo zostało usunięte. Odwrotna sytuacja nie jest prawdą: usunięcie foo nie usuwa automatycznie libfoo . Inny pakiet xfoo może również zależeć od libfoo, więc apt nie tylko go usunie (chociaż apt będzie śledził, czy został zainstalowany tylko jako efekt uboczny instalacji foo i zaoferuj automatyczne usunięcie, jeśli o to poprosisz, o ile nikt inny nie będzie od tego zależał)
Meta-pakiety zależą od zestawu innych pakietów w bardzo podobny sposób, w jaki foo zależało od libfoo , więc kiedy usuwasz meta-pakiet, niewiele innych jest zazwyczaj usuwanych. Na przykład mogą istnieć dwa meta-pakiety zależne od xterm (być może lxsession i xfsession), ale odinstalowanie jednego lub obu nie spowoduje odinstalowania xterm, ponieważ xterm nie jest uszkodzony bez lxsession lub xfsession. Meta-paczki są zazwyczaj na górze drzewa zależności, a nie na dole, a niewiele rzeczy zwykle zależy bezpośrednio od meta-pakietów. Meta-pakiety przede wszystkim zapewniają wygodny sposób instalacji rozsądnego zestawu pakietów jednocześnie, ale nie są to narzędzia do odinstalowywania.
Tak więc, jeśli chcesz przypalić wszystko , co zależy od X11, musisz celować w podstawowy zestaw bibliotek libx11, od którego ostatecznie muszą zależeć wszystkie aplikacje x11 :
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Spowoduje to (symulację) usunięcie wszystkiego, co ostatecznie zależy od libx11 -. *, A także usunie wszystkie pakiety, które zostały zainstalowane jako zależność programu X11, nawet jeśli nie były bezpośrednio zależne od samego X11 (zwykle instalowane są CUPS i Ghostscript jako efekt uboczny instalacji środowiska pulpitu). Drugie polecenie usunie kolejne sieroty, dopóki nie pozostaną żadne. Usuń „--auto-remove”, jeśli chcesz zrobić ten krok później lub w ogóle go nie robić, lub po prostu dodaj pakiety ręcznie po oczyszczeniu GUI.
Usuń opcję --dry-run , aby faktycznie wykonać operację po sprawdzeniu, że nie usunie ona pakietów, których nie zamierzałeś usunąć.)
Wolę oczyścić i oczyścić skutki uboczne i dodawać je w razie potrzeby. Ponadto poszedłem do przodu i przetestowałem to na mojej własnej pi, i zrestartowałem się do bardzo spartańskiego, ale funkcjonalnego serwera. :)
Dlaczego usunięcie coś instaluje ?
Powyższa strategia rozwiązuje zadany problem, ale wciąż istnieje ciekawość, dlaczego operacja usunięcia powoduje zainstalowanie pakietów .
Sercem każdego menedżera pakietów jest pewnego rodzaju solver satysfakcji . Gdy powiesz menedżerowi pakietów, aby zainstalował niektóre pakiety, usunął niektóre pakiety lub zaktualizował niektóre, naprawdę tak naprawdę prosisz o rozwiązanie kolejnego wymaganego stanu instalacji oprogramowania, biorąc pod uwagę dostępny zestaw pakietów. To rozwiązanie może obejmować instalowanie dodatkowych pakietów (zależności), usuwanie istniejących pakietów (konflikty, przerwy), obniżanie / uaktualnianie określonych pakietów (poziom zgodności) lub ich kombinację. Tak więc, choć jest to nieco sprzeczne z intuicją, solver określa, że niektóre pakiety muszą zostać zainstalowane , aby inne pakiety mogły zostać usunięte, to ma sens. Jest to paskudny problem zarządzania zależnościami, który rozwiązują menedżerowie pakietów.
Konkretny przykład: Biorąc pod uwagę zestaw zainstalowanych aplikacji Java, wszystkie zależą od środowiska wykonawczego kompatybilnego z Javą, którym obecnie jest openjdk-7-jre . Następnie poprosić menedżera pakietów rozwiązania dla instalacji nowego narzędzia Java, który deklaruje konflikt z openjdk-7-jre ale pracuje z oracle-7-jre (oba pakiety rodzajowo dostarczyć do java-7-runtime ). Solver zaproponuje usunięcie z openjdk-7-jre i instalacji z Oracle Java-7-jrejako rozwiązanie dla pożądanego stanu posiadania nowego pakietu bez rozbijania istniejących pakietów.
W tym konkretnym przypadku, xterma to pakiet zawiera wirtualny zależność zwane x-końcowych Emulator ( xterma , lxterminal i aterm wszystko zapewnić o x-terminala emulator ), a więc jest prawdopodobne, że w usuwaniu lxterminal (w ramach usuwając lxde), solver znalazł istniejący zainstalowany pakiet ( transkrypt jako możliwy przykład), który wymagał pewnego rodzaju emulatora terminala x , więc solver zdecydował się zainstalować xterm (który wymaga libutempter0 i xbitmaps, wyjaśniając inne pakiety do zainstalowania), aby zaspokoić w przeciwnym razie zależność. Nie widząc bazy danych pakietów, postawiłbym hipotezę, że jest to najbardziej prawdopodobny scenariusz.
Aby odkryć pakiety, które są obecnie zależne od xterm (lub alternatywy), użyj polecenia apt-cache rdepends (używając przełącznika --installed, aby ograniczyć tylko do zainstalowanych pakietów):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
Zależności rozpoczynające się od znaku naprzemiennego „|” oznacza, że pakiet zależy od xterm lub czegoś, co zapewnia ( w tym przypadku coś jest emulatorem terminala x ). Clusterssh pakiet zależy xterm jawnie , a nie pozwala na alternatywę. Oto krótka lista pakietów, które powodują, że Xterm jest wymagany.
A co z deborphanem?
Funkcja śledzenia sierot została włączona do apt-get za pośrednictwem funkcji „autorove” w 2010 r. (Błąd Debiana 582791 ), co powoduje, że deborphan jest w większości zbędny i zasadniczo przestarzały. W przeciwieństwie do deborphan i innych podobnych rozwiązań apt-get bezpośrednio śledzi, które pakiety zostały jawnie zainstalowane, a które zostały zainstalowane jako efekt uboczny lub zależność od jawnie zainstalowanego pakietu. Na przykład, jeżeli administrator instaluje foo, libfoo jest instalowany jako efekt uboczny i apt-get autoremove woli , w rzeczywistości, usunąć libfoo jeśli autoremove (lub --auto-remove) jest określona przy usuwaniu foo.
Podejście przyjęte przez deborphan jest zbiorem domysłów. Na przykład przypuszczenie, że zainstalowana biblioteka, która nie jest zależna, musi być sierotą: Jeśli zainstalowano libfoo , ale nie są to ani foo, ani xfoo , deborphan może zdecydować, że musi być sierotą. Jednym z trybów awaryjnych jest to, że biblioteki mogą być instalowane specjalnie dla dostarczanych przez nich narzędzi (libxml2 dla xmllint przed ponownym spakowaniem do libxml2-utils) lub po prostu dostępne do celów programistycznych. Takie pakiety nie są sierotami. Ponadto deborphan koncentruje się na bibliotekach, więc pomija pewną liczbę nie-bibliotekowych sierot, które nadają się do śledzenia (pakiety przestarzałe vs. pakiety osierocone) .
munin
jakiegoś powodu również to usunąłem, ale później mogłem to łatwo odłożyć.'libx11-.*'
aby zapobiec pocieszaniu się skorupy.apt-get remove
, co chciałinstall
xterm
i dwie inne. Ja też tego doświadczyłem i nie mogłem tego rozwiązać.rootfs ... 94% /
. Po apt-get remove --auto-remove --purge libx11 -. *:rootfs ... 51% /
Doskonała odpowiedź, wielkie dzięki!rootfs ... 41% /
...Instaluje się pierwszy wiersz,
deborphan
który usunie wszelkie osierocone pakiety.Druga linia usuwa podstawowe pakiety XX systemu X11, Samby (Windows File Sharing), czcionek, Gnome i innych rzeczy związanych ze środowiskiem graficznym Raspberry Pi.
Trzecia linia usuwa wszelkie osierocone pakiety wykryte przez deborphan.
Czwarta linia usuwa niepotrzebne pakiety.
Piąta linia usuwa pamięć podręczną pakietu.
źródło
1 /. Aby usunąć wszystkie pulpity, które właśnie zrobiłem (idź zrobić dzbanek kawy. Idź na spacer, to zajmie chwilę) ...
apt-get remove --auto-remove --purge libx11-.*
2 /. Potem zainstalowałem deborphan, aby pozbyć się osieroconych plików ...
sudo apt-get install deborphan
Jeśli chcesz zobaczyć, co zostało osierocone, zrób to ...
deborphan -sz
3 /. Następnie usunąłem wszystkie osierocone pliki ...
sudo apt-get remove --purge $(deborphan)
Na koniec zrób to, aby usunąć niepotrzebne pakiety, które nie są osierocone ...
sudo apt-get autoremove
Wynik końcowy: Bezgłowy i czysty jak gwizdek
źródło
apt-get remove --dry-run
absolutnie nic nie robi , ale drukuje wiadomości na ekranie.Mają wygląd tutaj jednak przewinąć w dół do części o
tasksel
.Uruchomienie
tasksel --list-tasks
pi przez Wi-Fi ssh daje mi (po około 30 sekundach):Więc
tasksel remove desktop
powinieneś robić, co chcesz [patrz komentarze] . Strona podręcznika jest trochę krótka i tajemnicza, być może dlatego, że tasksel jest przeznaczony głównie dla opiekunów Debiana. Jeśli to zadziała, daj nam znać;)źródło
tasksel
, chociaż mam spore doświadczenie z Ubuntu. Niestety próbowałem tego, uruchomienieremove desktop
polecenia zajęło trochę czasu, ale wszystkie te „graficzne” pakiety nadal istnieją zgodnie zaptitude
.tasksel
bez opcji). Jestem całkiem pewien, że teraz „u” oznacza, że metapakiety nie są zainstalowane, a jeśli zainstalujesz „desktop”, dostaniesz coś więcej niż tylko wersję lxde wiki.debian.org/tasksel Więc nie ma kości. Zauważyłem, że metapakiet „xorg” zapt-cache search metapackage
nie jest tak naprawdę zainstalowany. Chyba winię malin.Alternatywnie możesz wypróbować ten minimalny obraz Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/
źródło
Na podstawie informacji o zadaniu można dowiedzieć się, że istnieje metapakiet pulpit zadań, który odwołuje się do wszystkich innych pakietów związanych z GUI. Więc tylko
Spowoduje to usunięcie wielu innych pakietów (związanych z GUI / Desktop).
Tło: nazwę pakietu
task-desktop
można znaleźć, uruchamiając następujące polecenia tasksel:źródło
Inną opcją jest użycie aptitude, którego powinieneś zawsze preferować, jeśli zamierzasz zrobić coś więcej niż tylko zainstalować lub usunąć kilka pakietów.
Uruchom aptitude jako root, pisząc
sudo aptitude
. W standardowym widoku Pakiety aptitude ostatnia pozycja listy,Tasks
w której możesz wybrać różne opcje wymienione przez tasksel. Poruszaj się po elementach za pomocąj
,k
ienter
. Zaznacz element, który chcesz oczyścić, wpisując_
(podkreślenie) na wyróżniony element. To tylko przygotowuje działania. Aby wykonać działania, naciśnijg
.Przeczytaj o umiejętnościach w podręczniku debiana .
źródło
Wpisz ten kod:
źródło
purge
en zamiast zamiastremove
?