Come disinstallare X Server e Desktop Manager quando si esegue come server senza testa?


88

Sto usando il mio Raspberry Pi come server senza testa su cui posso accedere. Non ho bisogno di X Server, LXDE ecc.

Sto eseguendo Raspbian "wheezy". Ho già disabilitato "Avvia desktop all'avvio" usando raspi-configcome descritto qui . Ma continuo a ricevere molti aggiornamenti dei pacchetti per tutte le cose del desktop che non utilizzo ( eseguo apticron per avvisarmi di aggiornamenti in sospeso via e-mail), quindi mi piacerebbe completamente apt-get removetutti i pacchetti non necessari per evitare questi aggiornamenti non necessari.

Quali pacchetti dovrei rimuovere?

Finora ho escogitato quanto segue:

sudo apt-get remove desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

Ho creato l'elenco sopra cercando in aptitude tutti i pacchetti nella sezione principale Pacchetti installati -> x11 -> che non erano "installazioni automatiche".

Per qualche motivo quando eseguo questo, apt-getmi dice che:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

che sembra un po 'strano per un'operazione di rimozione .

C'è un modo più semplice? Esiste un pacchetto "super" che possiede tutta questa roba grafica e può essere rimosso, portando con sé tutte le sue dipendenze? Da quanto ho capito, non sembra che sia possibile, perché queste cose non sono state installate automaticamente, il che significa che devo rintracciarle tutte e rimuoverle tutte in modo esplicito.

Risposte:


85

TL; DR o "Basta bruciare il mio pi"

sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge

(Ripeti apt-get autoremove --purgefinché non rimangono orfani)

Ulteriori spiegazioni

Se un pacchetto foo dipende da un altro pacchetto libfoo e si rimuove il pacchetto libfoo , viene rimosso anche il dipendente ( foo ). Poiché Foo ha una dipende linea specificando libfoo , sarebbe rotto per lasciare foo se libfoo sono stati rimossi. Il contrario non è vero: la rimozione di foo non cancella automaticamente libfoo . Un altro pacchetto xfoo può anche dipendere da libfoo, quindi apt non lo rimuoverà (anche se apt monitorerà se è stato installato solo come effetto collaterale dell'installazione di foo e offriti di rimuoverlo automaticamente se lo chiedi, a condizione che nessun altro dipenda ancora da esso)

I meta-pacchetti dipendono da una serie di altri pacchetti nello stesso modo in cui il foo dipendeva da libfoo , quindi quando rimuovi un meta-pacchetto, poco altro viene in genere rimosso. Ad esempio, potrebbero esserci due meta-pacchetti che dipendono da xterm (forse lxsession e xfsession), ma disinstallare uno o entrambi non disinstallerà xterm perché xterm non è rotto senza lxsession o xfsession. I meta-pacchetti sono generalmente nella parte superiore dell'albero delle dipendenze, non nella parte inferiore, e poche cose tendono a dipendere direttamente dai meta-pacchetti. I meta-pacchetti forniscono principalmente un modo conveniente per installare contemporaneamente una serie ragionevole di pacchetti, ma non sono strumenti di disinstallazione.

Quindi, se vuoi bruciare tutto ciò che dipende da X11, dovrai scegliere come target il set di base delle librerie libx11 da cui tutte le app x11 devono infine dipendere:

sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge

Questo (simulerà) rimuoverà tutto ciò che alla fine dipende da libx11 -. * E rimuoverà anche tutti i pacchetti installati come dipendenza di un programma X11 anche se non dipendevano direttamente da X11 stesso (CUPS e Ghostscript sono generalmente installati come effetto collaterale dell'installazione di un ambiente desktop). Il secondo comando rimuoverà gli orfani successivi fino a quando nessuno rimarrà. Rimuovere "--auto-remove" se si desidera eseguire questo passaggio in un secondo momento o non farlo affatto, o semplicemente aggiungere nuovamente i pacchetti manualmente dopo aver pulito la GUI.

Rimuovere l' opzione --dry-run per eseguire effettivamente l'operazione dopo aver verificato che non rimuoverà i pacchetti che non si intendeva rimuovere.)

Preferisco pulire ed eliminare gli effetti collaterali e aggiungerli nuovamente se necessario. Inoltre, sono andato avanti e l'ho provato sul mio pi, e si è riavviato su un server molto spartano ma funzionale. :)

Perché una rimozione installa qualcosa?

La strategia di cui sopra risolve il problema dichiarato, ma c'è ancora la curiosità del motivo per cui un'operazione di rimozione comporta l' installazione di pacchetti .

Al centro di ogni gestore di pacchetti c'è un risolutore di soddisfazioni di qualche tipo. Quando si dice a un gestore di pacchetti di installare alcuni pacchetti, rimuovere alcuni pacchetti o aggiornarne alcuni, ciò che si sta realmente chiedendo di fare è risolvere il successivo stato desiderato di installazione del software, dato un set disponibile di pacchetti. Questa soluzione può includere l'installazione di pacchetti aggiuntivi (dipendenze), la rimozione di pacchetti esistenti (conflitti, interruzioni), il downgrade / l'aggiornamento di pacchetti specifici (livello di compatibilità) o una loro combinazione. Quindi, sebbene sia un po 'controintuitivo, il risolutore determina che alcuni pacchetti devono essere installati per poter rimuovere altri pacchetti, ha perfettamente senso. Questo è il brutto problema di gestione delle dipendenze che i gestori di pacchetti risolvono.

Un esempio concreto: dato un set di applicazioni Java già installate, dipendono tutte da un runtime compatibile con Java che attualmente risulta essere openjdk-7-jre . Quindi si chiede al gestore pacchetti di risolvere l'installazione di un nuovo strumento Java che dichiara un conflitto con openjdk-7-jre ma funziona con oracle-7-jre (entrambi i pacchetti genericamente forniscono un java-7-runtime ). Il solutore proporrà una rimozione di openjdk-7-jre e un'installazione di oracle-java-7-jrecome soluzione per lo stato desiderato di installazione del nuovo pacchetto senza interrompere i pacchetti esistenti.

In questo caso specifico , xterm è un pacchetto che fornisce una dipendenza virtuale chiamata x-terminal-emulator ( xterm , lxterminal e aterm forniscono tutti un x-terminal-emulator ), quindi è probabile che rimuovendo lxterminal (come parte di rimuovendo lxde), il solutore ha trovato un pacchetto installato esistente ( transcodifica come possibile esempio) che richiedeva un qualche tipo di emulatore x-terminal , quindi il solutore ha scelto di installare xterm (che richiede libutempter0 e xbitmaps, spiegando gli altri pacchetti da installare) per soddisfare la dipendenza altrimenti rotta. Senza vedere il database dei pacchetti, ipotizzerei che questo sia lo scenario più probabile.

Per scoprire i pacchetti che dipendono attualmente da xterm (o da un altro), usare il comando apt-cache rdepends (usando l' opzione --installed per limitare solo ai pacchetti installati):

$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
    |xorg
     clusterssh
    |xinit
    |tk8.5
    |tk8.4
    |transcode

Dipendenze che iniziano con il carattere di alternanza '|' significa che il pacchetto dipende da xterm o da qualcosa che fornisce (che in questo caso qualcosa è x-terminal-emulator ). Il pacchetto clusterssh dipende esplicitamente da xterm e non consente un'alternativa. Questa è la breve lista dei pacchetti che stanno causando la richiesta di xterm.

Che dire di deborphan?

La funzionalità di tracciamento degli orfani è stata incorporata in apt-get tramite la funzionalità "autoremove" nel 2010 (bug Debian 582791 ) rendendo il deborphan per lo più ridondante ed essenzialmente obsoleto. A differenza di deborphan e di altre soluzioni simili, apt-get traccia direttamente quali pacchetti sono stati installati esplicitamente e quali pacchetti sono stati installati come effetto collaterale o dipendenza di un pacchetto installato esplicitamente. Ad esempio, se un amministratore installa foo, libfoo è installato come effetto collaterale e apt-get autoremove volontà , infatti, rimuovere libfoo se non viene specificato autoremove (o --auto-rimozione) durante la rimozione foo.

L'approccio adottato da deborphan è una raccolta di ipotesi. Ad esempio, supponendo che una libreria installata che non abbia un dipendente debba essere un orfano: se è installato libfoo , ma non lo sono né fooxfoo , deborphan può decidere che deve essere un orfano. Una modalità di errore qui è che le librerie potrebbero essere installate specificamente per gli strumenti che forniscono (libxml2 per xmllint prima di essere riconfezionate in libxml2-utils) o semplicemente disponibili per scopi di sviluppo. Tali pacchetti non sono orfani. Inoltre, deborphan si concentra sulle librerie, quindi manca un numero di orfani non di libreria che apt track (pacchetti obsoleti vs. pacchetti orfani) .


2
Brilliant ha funzionato per me grazie. Inoltre è stato rimosso muninper qualche motivo, ma ho potuto rimetterlo abbastanza facilmente in seguito.
Giorno

4
Scorch it! Ho dovuto citare 'libx11-.*'per evitare che la conchiglia palpitante.

1
@Maxx, ottima risposta, ma in tutti i tuoi scenari, non hai descritto come è quando ha eseguito apt-get removequello che voleva install xterme altri due. Anch'io ho sperimentato questo e non sono riuscito a risolverlo.
Madivad,

2
Pulito, raspbian non espanso installare, dopo apt-get aggiornamento, dist-upgrade: rootfs ... 94% /. Dopo apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Ottima risposta, grazie mille!
Daniel F,

2
E dopo apt-get autoremove: rootfs ... 41% /...
Daniel F,

27
sudo apt-get install deborphan
sudo apt-get autoremove --purge libx11-.* lxde-.* raspberrypi-artwork xkb-data omxplayer penguinspuzzle sgml-base xml-core alsa-.* cifs-.* samba-.* fonts-.* desktop-* gnome-.*
sudo apt-get autoremove --purge $(deborphan)
sudo apt-get autoremove --purge
sudo apt-get autoclean

Viene installata la prima riga deborphanche rimuoverà tutti i pacchetti orfani.

La seconda riga rimuove i pacchetti principali del sistema X11 LXDE, Samba (condivisione file di Windows), i caratteri, Gnome e altri elementi correlati all'ambiente desktop di Raspberry Pi.

La terza riga rimuove tutti i pacchetti orfani rilevati da deborphan.

La quarta riga rimuove tutti i pacchetti non necessari.

La quinta riga cancella la cache del pacchetto.


3
Benvenuti nello scambio di stack di Raspberry Pi! Sebbene questo possa tecnicamente rispondere alla domanda, sarebbe preferibile includere alcune spiegazioni su come funziona e cosa sta facendo esattamente.
RPiAwesomeness,

1
Eseguendo questi comandi sulla nuovissima installazione di Raspbian sono passato da meno di un gigabyte gratuito su una scheda SD da 4 GB a 2,5 GB gratuiti. Per me almeno questa è la risposta corretta.
rapina il

2
La risposta accettata è molto approfondita, ma in realtà non fornisce un elenco per realizzare il problema di OP. Questa risposta può essere barebone, ma in realtà realizza ciò di cui OP (e io) abbiamo effettivamente bisogno
portforwardpodcast

Perché disinstallare Samba? Questa non è un'applicazione GUI. Potrebbe essere necessario per il networking.
Dogweather,

9

1 /. Per rimuovere tutti i desktop che ho appena fatto (vai a fare una tazza di caffè. Fai una passeggiata, ci vorrà un po ') ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Quindi ho installato deborphan per eliminare i file orfani ...
sudo apt-get install deborphan

Se vuoi vedere cosa è rimasto orfano, fallo ...
deborphan -sz

3 /. Quindi ho rimosso tutti i file orfani ...
sudo apt-get remove --purge $(deborphan)

Infine, fai questo per rimuovere i pacchetti non necessari che non sono orfani ...
sudo apt-get autoremove

Risultato finale: senza testa e pulito come un fischio


2
apt-get remove --dry-runnon fa assolutamente nulla , ma stampa i messaggi sullo schermo.
lenik,

7

Dai un'occhiata qui ma scorri verso il basso fino alla parte relativa tasksel.

Correre tasksel --list-taskssul pi via wifi ssh mi dà (dopo circa 30 secondi):

u desktop   Debian desktop environment
u web-server    Web server
u print-server  Print server
u database-server   SQL database
u dns-server    DNS Server
u file-server   File server
u mail-server   Mail server
u ssh-server    SSH server
u laptop    Laptop

Quindi, tasksel remove desktopdovrebbe fare quello che vuoi [vedi commenti] . La pagina man è un po 'breve e misteriosa, forse perché taskel è principalmente destinato ai manutentori di Debian. Se funziona, faccelo sapere;)


Grazie, non ne avevo mai sentito parlare tasksel, anche se ho una discreta esperienza Ubuntu. Purtroppo ho provato questo, ci è voluto un po 'per eseguire il remove desktopcomando, ma tutti quei pacchetti "grafici" sono ancora lì secondo aptitude.
Giorno

Nemmeno io, ma ero un po 'turbato quando ho notato che rimuovere un componente X di base non tirava l'intero stack di dipendenze, cosa che pensavo avrebbe fatto. Ho trovato una pagina migliore per TaskSel e in realtà ho avviato l'app ncurses ( taskselsenza opzioni). Abbastanza sicuro ora la 'u' si intendono i metapacchetti are't installati, e se si installa 'desktop', si otterrà un ottenere più di una semplice versione LXDE wiki.debian.org/tasksel Quindi niente dadi. Noto che il metapacchetto "xorg" di apt-cache search metapackagenon è nemmeno installato. Incolpare i raspbians immagino.
Riccioli d'oro

2
Lascerò questa risposta per salvare qualcuno un vicolo cieco, o nel caso in cui qualcuno possa fare luce migliore.
riccioli d'oro

5

In alternativa, puoi provare questa immagine minima di Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/


2
Non risponde affatto alla domanda. La domanda era come disinstallare X, non come installare un nuovo sistema operativo senza X. Sarebbe meglio lasciarlo come commento, provare a porre la propria domanda o fornire una risposta utile per ottenere il rappresentante necessario per lasciare un commento. Bel collegamento comunque.
Impulss,

3

Sulla base delle informazioni taskel, è possibile scoprire che esiste un desktop task meta-pacchetto, che fa riferimento a tutti gli altri pacchetti relativi alla GUI. Quindi

sudo apt-get remove task-desktop

Ciò rimuoverà molti altri pacchetti (relativi alla GUI / Desktop).

Background: il nome del pacchetto task-desktoppuò essere trovato eseguendo i seguenti comandi taskel:

tasksel --list-tasks
tasksel --task-packages desktop

0

Un'altra opzione è usare aptitude che dovresti sempre preferire, se hai intenzione di fare qualcosa di più che installare o rimuovere alcuni pacchetti.

Inizia aptitude come root digitando sudo aptitude. Nella vista Pacchetti standard di aptitude è presente l'ultima voce dell'elenco Tasksin cui è possibile selezionare le varie opzioni elencate da TaskSel. Navigare attraverso gli elementi con j, ke enter. Contrassegnare un elemento da eliminare immettendo _(trattino basso) sull'elemento evidenziato. Questo prepara solo azioni. Per eseguire le azioni premere g.

Leggi aptitude nel manuale debian .


0

Digita questo codice:

sudo apt-get purge desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

1
Quindi, per chiarire, l'unica differenza tra la riga di comando del PO e la tua, è l'uso di al purgeposto di remove?
Greenonline,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.