TL; DR ou "Basta queimar meu pi"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(Repita apt-get autoremove --purge
até que nenhum órfão permaneça)
Mais explicações
Se um pacote foo depende de outro pacote libfoo e você remove o pacote libfoo , o dependente ( foo ) também é removido. Como o Foo tem uma linha dependente que especifica o libfoo , seria quebrado para deixar o foo se o libfoo fosse removido. O inverso não é verdadeiro: remover foo não exclui o libfoo automaticamente. Outro pacote xfoo também pode depender do libfoo, portanto, o apt não o removerá (embora o apt rastreie se ele foi instalado apenas como um efeito colateral da instalação do foo e ofereça-o para removê-lo automaticamente, se você pedir, desde que outros ainda dependam dele)
Os meta-pacotes dependem de um conjunto de outros pacotes da mesma maneira que foo dependia do libfoo ; portanto, quando você remove um meta-pacote, pouco mais é normalmente removido. Por exemplo, pode haver dois meta-pacotes que dependem do xterm (lxsession e xfsession talvez), mas desinstalar um ou ambos não desinstalará o xterm porque o xterm não está quebrado sem o lxsession ou o xfsession. Meta-pacotes geralmente estão no topo da árvore de dependência, não na parte inferior, e poucas coisas tendem a depender diretamente dos meta-pacotes. Os meta-pacotes fornecem principalmente uma maneira conveniente de instalar um conjunto razoável de pacotes de uma só vez, mas não são ferramentas de desinstalação.
Portanto, se você deseja escalonar tudo o que depende do X11, precisará direcionar o conjunto básico de bibliotecas libx11 das quais todos os aplicativos x11 devem depender:
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Isso irá (simular) remover tudo o que depende da libx11 -. * E também removerá todos os pacotes que foram instalados como uma dependência de um programa X11, mesmo que eles não dependam diretamente do próprio X11 (o CUPS e o Ghostscript geralmente são instalados como efeito colateral da instalação de um ambiente de área de trabalho). O segundo comando removerá os órfãos subseqüentes até que nenhum permaneça. Remova "--auto-remove" se você quiser executar esta etapa mais tarde ou não fazer nada, ou apenas adicione os pacotes manualmente depois de limpar a GUI.
Remova a opção --dry-run para realmente executar a operação depois de verificar se ela não removerá os pacotes que você não pretendia remover.)
Prefiro limpar e purgar os efeitos colaterais e adicioná-los novamente, conforme necessário. Além disso, fui em frente e testei isso no meu próprio pi, e ele foi reiniciado em um servidor muito espartano, mas funcional. :)
Por que um remover instala algo?
A estratégia acima resolve o problema indicado, mas ainda há a curiosidade de por que um remove operação resulta em pacotes que estão sendo instalados .
No coração de todo gerenciador de pacotes está um solucionador de satisfação de algum tipo. Quando você instrui um gerente de pacotes a instalar alguns pacotes, remover alguns pacotes ou atualizar alguns pacotes, o que você realmente está pedindo é que resolva o próximo estado desejado de instalação do software, considerando um conjunto de pacotes disponíveis. Essa solução pode incluir a instalação de pacotes adicionais (dependências), a remoção de pacotes existentes (conflitos, quebras), a atualização / atualização de pacotes específicos (nível de compatibilidade) ou uma combinação deles. Portanto, embora seja um pouco contra-intuitivo que o solucionador determine que alguns pacotes precisam ser instalados para que outros sejam removidos, faz todo o sentido. Esse é o grave problema de gerenciamento de dependências que os gerenciadores de pacotes resolvem.
Um exemplo concreto: dado um conjunto de aplicativos Java já instalados, todos eles dependem de um tempo de execução compatível com java que atualmente é openjdk-7-jre . Em seguida, você solicita ao gerenciador de pacotes que resolva a instalação de uma nova ferramenta Java que declare um conflito com o openjdk-7-jre, mas trabalhe com o oracle-7-jre (ambos os pacotes geralmente fornecem um java-7-runtime ). O solucionador proporá uma remoção do openjdk-7-jre e uma instalação do oracle-java-7-jrecomo a solução para o estado desejado de instalação do novo pacote sem interromper os pacotes existentes.
Neste específico caso, o xterm é uma embalagem que proporciona uma dependência virtual chamados terminal X-emulador ( xterm , lxterminal , e aterm todos fornecer um terminal X-emulador ), por isso é provável que na remoção lxterminal (como uma parte de removendo o lxde), o solucionador encontrou um pacote instalado existente ( transcode como um possível exemplo) que exigia algum tipo de emulador de terminal x ; portanto, o solucionador optou por instalar o xterm (que requer libutempter0 e xbitmaps, explicando os outros pacotes a serem instalados) para satisfazer a dependência quebrada. Sem ver o banco de dados do pacote, eu hipotetizaria que esse é o cenário mais provável.
Para descobrir os pacotes que atualmente dependem do xterm (ou de uma alternativa), use o comando apt-cache rdepends (usando a opção --installed para limitar apenas os pacotes instalados):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
Dependências que começam com o caractere de alternância '|' significa que o pacote depende do xterm ou de algo que ele fornece (que algo é emulador de terminal x nesse caso). O pacote clusterssh depende explicitamente do xterm e não permite uma alternativa. Esta é a lista curta dos pacotes que estão causando o xterm ser necessário.
E o deborphan?
A funcionalidade de rastreamento de órfãos foi incorporada ao apt-get através da funcionalidade 'autoremove' em 2010 (Debian bug 582791 ), tornando o deborphan principalmente redundante e essencialmente obsoleto. Diferentemente do deborphan e de outras soluções, o apt-get rastreia diretamente quais pacotes foram explicitamente instalados e quais foram instalados como efeito colateral ou dependência de um pacote explicitamente instalado. Por exemplo, se um administrador instala foo, libfoo é instalado como um efeito colateral e apt-get autoremove vontade , de fato, remover libfoo se autoremove (ou --auto-remove) é especificado quando remover foo.
A abordagem adotada pelo deborphan é uma coleção de suposições. Por exemplo, a suposição de que uma biblioteca instalada que não possui um dependente deve ser órfã: se o libfoo estiver instalado, mas nem foo nem xfoo , o deborphan pode decidir que deve ser órfão. Um modo de falha aqui é que as bibliotecas podem ser instaladas especificamente para as ferramentas que eles fornecem (libxml2 para xmllint antes de ser reembalado no libxml2-utils) ou simplesmente disponíveis para fins de desenvolvimento. Esses pacotes não são órfãos. Além disso, o deborphan se concentra nas bibliotecas, por isso perde um número de órfãos que não pertencem à biblioteca, que seguem trilhas (pacotes obsoletos vs. pacotes órfãos) .
munin
por algum motivo, mas eu pude recuperá-lo com bastante facilidade depois.'libx11-.*'
para impedir que a concha brilhasse.apt-get remove
que queriainstall
xterm
e mais dois. Eu também já experimentei isso e não consegui resolver.rootfs ... 94% /
. Após o apt-get remove --auto-remove --purge libx11 -. *:rootfs ... 51% /
Excelente resposta, muito obrigado!rootfs ... 41% /
...A primeira linha é instalada
deborphan
e removerá todos os pacotes órfãos.A segunda linha remove os pacotes principais do sistema X11 LXDE, Samba (compartilhamento de arquivos do Windows), fontes, Gnome e outros itens relacionados ao ambiente de área de trabalho do Raspberry Pi.
A terceira linha remove todos os pacotes órfãos detectados pelo deborphan.
A quarta linha remove todos os pacotes desnecessários.
A quinta linha limpa o cache do pacote.
fonte
1 /. Para remover todas as áreas de trabalho que acabei de fazer (vá fazer uma cafeteira. Dê um passeio, isso levará um tempo) ...
apt-get remove --auto-remove --purge libx11-.*
2 /. Então eu instalei o deborphan para se livrar dos arquivos órfãos ...
sudo apt-get install deborphan
Se você quiser ver o que ficou órfão, faça isso ...
deborphan -sz
3 /. Então eu removi todos os arquivos órfãos ...
sudo apt-get remove --purge $(deborphan)
Finalmente, faça isso para remover os pacotes desnecessários que não são órfãos ...
sudo apt-get autoremove
Resultado final: sem cabeça e limpo como um apito
fonte
apt-get remove --dry-run
não faz absolutamente nada , mas imprime mensagens na tela.Dê uma olhada aqui, mas role para baixo até a parte sobre
tasksel
.Rodar
tasksel --list-tasks
no pi via wifi ssh me dá (após cerca de 30 segundos):Então,
tasksel remove desktop
faça o que quiser [ver comentários] . A página de manual é um pouco breve e misteriosa, talvez porque o tasksel seja destinado principalmente aos mantenedores do debian. Se isso funcionar, deixe-nos saber;)fonte
tasksel
, embora eu tenha uma boa quantidade de experiência no Ubuntu. Infelizmente eu tentei isso, demorou um pouco para executar oremove desktop
comando, mas todos esses pacotes "gráficos" ainda estão lá de acordo comaptitude
.tasksel
sem opções). Agora, com certeza, o 'u' significa que os metapacotes não estão instalados e, se você instalar o 'desktop', obterá mais do que apenas a versão lxde wiki.debian.org/tasksel Portanto, não há dados. Percebo que o metapacote "xorg" deapt-cache search metapackage
também não está instalado. Responsabilize os raspbians eu acho.Como alternativa, você pode tentar esta imagem mínima do Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/
fonte
Com base nas informações do taskel, é possível descobrir que existe um meta-pacote task-desktop, que faz referência a todos os outros pacotes relacionados à GUI. Então apenas
Isso removerá muitos outros pacotes (relacionados à GUI / área de trabalho).
Segundo plano: o nome do pacote
task-desktop
pode ser encontrado executando os seguintes comandos tasksel:fonte
Outra opção é usar o aptitude que você sempre deve preferir, se você for fazer mais do que apenas instalar ou remover alguns pacotes.
Inicie o aptitude como root digitando
sudo aptitude
. Na visualização Pacotes padrão do aptitude, a última entrada da lista éTasks
onde você pode selecionar as várias opções listadas pelo tasksel. Navegue pelos itens comj
,k
eenter
. Marque um item a ser removido digitando_
(sublinhado) no item destacado. Isso apenas prepara ações. Para executar as ações, pressioneg
.Leia sobre o aptitude no manual do debian .
fonte
Digite este código:
fonte
purge
em vez deremove
?