TL; DR o "Simplemente quema mi pi"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(Repita apt-get autoremove --purge
hasta que no queden huérfanos)
Explicación adicional
Si un paquete foo depende de otro paquete libfoo y usted elimina el paquete libfoo , el dependiente ( foo ) también se elimina. Debido a que Foo tiene una línea dependiente que especifica libfoo , se rompería si dejara foo si se eliminara libfoo. Lo contrario no es cierto: eliminar foo no elimina libfoo automáticamente. Otro paquete xfoo también puede depender de libfoo, por lo que apt no solo lo eliminará (aunque apt rastreará si se instaló solo como un efecto secundario de la instalación de foo y ofrezca eliminarlo automáticamente si así lo solicita, siempre y cuando nadie más dependa de él)
Los metapaquetes dependen de un conjunto de otros paquetes de la misma manera que foo dependía de libfoo , por lo que cuando se elimina un metapaquete , normalmente se elimina poco más. Por ejemplo, puede haber dos metapaquetes que dependen de xterm (lxsession y xfsession quizás), pero desinstalar uno o ambos no desinstalará xterm porque xterm no está roto sin lxsession o xfsession. Los metapaquetes están generalmente en la parte superior del árbol de dependencias, no en la parte inferior, y pocas cosas tienden a depender directamente de los metapaquetes. Los metapaquetes proporcionan principalmente una forma conveniente de instalar un conjunto sensible de paquetes a la vez, pero no son herramientas de desinstalación.
Por lo tanto, si desea quemar todo lo que depende de X11, tendrá que apuntar al conjunto base de bibliotecas libx11 de las que todas las aplicaciones x11 deben depender en última instancia:
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Esto (simulará) eliminará todo lo que finalmente depende de libx11 -. *, Y también eliminará todos los paquetes que se instalaron como una dependencia de un programa X11, incluso si no dependían directamente de X11 (CUPS y Ghostscript generalmente se instalan como efecto secundario de instalar un entorno de escritorio). El segundo comando eliminará a los huérfanos posteriores hasta que no quede ninguno. Elimine "--auto-remove" si desea realizar este paso más adelante o no hacerlo, o simplemente agregue los paquetes manualmente después de limpiar la GUI.
Elimine la opción --dry-run para realizar realmente la operación después de haber verificado que no eliminará los paquetes que no tenía la intención de eliminar).
Prefiero limpiar y purgar los efectos secundarios y agregarlos nuevamente según sea necesario. Además, seguí adelante y probé esto en mi propio pi, y se reinició en un servidor muy espartano pero funcional. :)
¿Por qué un remove instala algo?
La estrategia anterior resuelve el problema planteado, pero aún queda la curiosidad de por qué un remove operación resulta en paquetes que se instalan .
En el corazón de cada administrador de paquetes hay un solucionador de satisfacción de algún tipo. Cuando le dice a un administrador de paquetes que instale algunos paquetes, elimine algunos paquetes o actualice algunos paquetes, lo que realmente le pide que haga es resolver el siguiente estado deseado de instalación del software dado un conjunto de paquetes disponibles. Esta solución puede incluir instalar paquetes adicionales (dependencias), eliminar paquetes existentes (conflictos, interrupciones), degradar / actualizar paquetes específicos (nivel de compatibilidad) o una combinación de los mismos. Entonces, si bien es un poco contradictorio que el solucionador determine que algunos paquetes deben instalarse para que otros paquetes se eliminenTiene mucho sentido. Este es el desagradable problema de administración de dependencias que resuelven los administradores de paquetes.
Un ejemplo concreto: dado un conjunto de aplicaciones Java ya instaladas, todas dependen de un tiempo de ejecución compatible con Java que actualmente es openjdk-7-jre . Luego le pide al administrador de paquetes que resuelva la instalación de una nueva herramienta Java que declara un conflicto con openjdk-7-jre pero que funciona con oracle-7-jre (ambos paquetes generalmente proporcionan un tiempo de ejecución java-7 ). El solucionador propondrá la eliminación de openjdk-7-jre y la instalación de oracle-java-7-jrecomo la solución a su estado deseado de tener el nuevo paquete instalado sin romper los paquetes existentes.
En este específico caso, xterm es un paquete que ofrece una dependencia virtual llamado x-terminal-emulador ( xterm , lxterminal , y aterm todos proporcionan un -terminal-emulador x ), por lo que es probable que en la eliminación de lxterminal (como parte de eliminando lxde), el solucionador encontró un paquete instalado existente ( transcodificar como un posible ejemplo) que requería algún tipo de emulador x-terminal , por lo que el solucionador decidió instalar xterm (que requiere libutempter0 y xbitmaps, explicando los otros paquetes a instalar) para satisfacer la dependencia rota. Sin ver la base de datos del paquete, hipotetizaría que este es el escenario más probable.
Para descubrir los paquetes que actualmente dependen de xterm (o una alternativa), use el comando apt-cache rdepends (usando el interruptor --installed para limitar solo los paquetes instalados):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
Dependencias que comienzan con el carácter de alternancia '|' significa que el paquete depende de xterm o de algo que proporciona (ese algo es x-terminal-emulator en este caso). El paquete clusterssh depende de xterm explícitamente y no permite una alternativa. Esta es la lista corta de los paquetes que están causando que se requiera xterm.
¿Qué hay de deborphan?
La funcionalidad de seguimiento de huérfanos se incorporó a apt-get a través de la funcionalidad 'autoremove' en 2010 (error de Debian 582791 ), lo que hace que deborphan sea en su mayoría redundante y esencialmente obsoleto. A diferencia de deborphan y otras soluciones como esta, apt-get rastrea directamente qué paquetes se instalaron explícitamente y qué paquetes se instalaron como efecto secundario o dependencia de un paquete instalado explícitamente. Por ejemplo, si un administrador instala foo, libtal se instala como un efecto secundario y apt-get autoremove voluntad , de hecho, eliminar libtal si no se especifica autoremove (o --auto-remove) al retirar foo.
El enfoque adoptado por deborphan es una colección de conjeturas. Por ejemplo, la suposición de que una biblioteca instalada que no tiene un dependiente debe ser huérfana: si libfoo está instalado, pero ni foo ni xfoo lo están, deborphan puede decidir que debe ser huérfano. Un modo de falla aquí es que las bibliotecas pueden instalarse específicamente para las herramientas que proporcionan (libxml2 para xmllint antes de volver a empaquetarlas en libxml2-utils) o simplemente estar disponibles para fines de desarrollo. Dichos paquetes no son huérfanos. Además, deborphan se enfoca en las bibliotecas, por lo que pierde una serie de huérfanos que no pertenecen a la biblioteca que pueden rastrear (paquetes obsoletos frente a paquetes huérfanos) .
munin
por alguna razón, pero pude volver a poner eso fácilmente después.'libx11-.*'
para evitar que el caparazón se pegara.apt-get remove
que queríainstall
xterm
y otros dos. Yo también he experimentado esto y no pude resolverlo.rootfs ... 94% /
. Después de apt-get remove --auto-remove --purge libx11 -. *:rootfs ... 51% /
Excelente respuesta, ¡muchas gracias!rootfs ... 41% /
...La primera línea se instala
deborphan
y eliminará los paquetes huérfanos.La segunda línea elimina los paquetes principales del sistema X11 LXDE, Samba (uso compartido de archivos de Windows), fuentes, Gnome y otras cosas relacionadas con el entorno de escritorio de Raspberry Pi.
La tercera línea elimina los paquetes huérfanos detectados por deborphan.
La cuarta línea elimina los paquetes innecesarios.
La quinta línea borra la caché del paquete.
fuente
1 /. Para quitar todos los escritorios que acabo de hacer (ve a preparar una taza de café. Da un paseo, esto llevará un tiempo) ...
apt-get remove --auto-remove --purge libx11-.*
2 /. Luego instalé deborphan para deshacerme de los archivos huérfanos ...
sudo apt-get install deborphan
Si quieres ver lo que ha quedado huérfano, haz esto ...
deborphan -sz
3 /. Luego eliminé todos los archivos huérfanos ...
sudo apt-get remove --purge $(deborphan)
Finalmente haga esto para eliminar los paquetes innecesarios que no están huérfanos ...
sudo apt-get autoremove
Resultado final: sin cabeza y limpio como un silbato
fuente
apt-get remove --dry-run
no hace absolutamente nada , pero imprime mensajes en la pantalla.Echa un vistazo aquí, pero desplázate hacia abajo hasta la parte sobre
tasksel
.Ejecutar
tasksel --list-tasks
en el pi a través de wifi ssh me da (después de unos 30 segundos):Entonces,
tasksel remove desktop
debes hacer lo que quieras [ver comentarios] . La página de manual es un poco breve y misteriosa, tal vez porque taskel está principalmente destinado a los encargados de debian. Si esto funciona, háganos saber;)fuente
tasksel
, aunque tengo bastante experiencia en Ubuntu. Desafortunadamente intenté esto, me tomó un tiempo ejecutar elremove desktop
comando, pero todos esos paquetes "gráficos" todavía están allí de acuerdoaptitude
.tasksel
sin opciones). Estoy bastante seguro de que ahora la 'u' significa que los metapaquetes no están instalados, y si instala el 'escritorio', obtendrá más que solo la versión lxde wiki.debian.org/tasksel Así que no hay dados. Noté que el metapaquete "xorg" de tampocoapt-cache search metapackage
está realmente instalado. Culpa a los raspbians, supongo.Alternativamente, puede probar esta imagen mínima de Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/
fuente
Según la información de la tarea, es posible descubrir que hay un escritorio de tareas de metapaquete que hace referencia a todos los demás paquetes relacionados con la GUI. Por lo que sólo
Esto eliminará muchos otros paquetes (GUI / Escritorio relacionado).
Antecedentes: el nombre del paquete
task-desktop
se puede encontrar ejecutando los siguientes comandos de taskel:fuente
Otra opción es usar aptitude, que siempre debe preferir, si va a hacer algo más que instalar o eliminar algunos paquetes.
Comience aptitude como root escribiendo
sudo aptitude
. En la vista de paquetes estándar de aptitude, la última entrada de la lista esTasks
en la que puede seleccionar las diversas opciones enumeradas por taskel. Navegar a través de los artículos conj
,k
yenter
. Marque un elemento para ser purgado ingresando_
(guión bajo) en el elemento resaltado. Esto solo prepara acciones. Para ejecutar las acciones presioneg
.Lea sobre aptitud en el manual de Debian .
fuente
Escribe este código:
fuente
purge
en lugar deremove
?