Desinstale o último n de ports / packages

2

Durante a compilação de algumas portas, percebi que isso depende de mais de 1000 portas e instalarei para sempre até que eu morra ou meu disco esteja cheio (meu disco rígido é realmente pequeno).

Eu interrompi make install clean .

Como faço para uninstall e clean as dependências que já foram criadas e instaladas? (há pelo menos mais de 100 deles)

pkg_cutleaves não funcionará neste caso, já que a porta principal ainda não foi registrada.

Por favor ajude.

FreeBSD 9.0-RELEASE amd64

EDIT: Outra maneira de fazer esta pergunta: Como posso ver todas as dependências de uma porta não registrada e todas as subdependências dessas dependências, independentes das portas instaladas anteriormente ou de suas [sub] dependências?

    
por Alex G 21.10.2012 / 01:14

4 respostas

1

A solução é bem fácil se você souber a data / hora de quando você iniciou make install :

  • Obter lista de todos os pacotes instalados e classificar por data de modificação: ls -ltr /var/db/pkg
  • Copiar resultados para seu editor de texto favorito
  • Remova linhas com os pacotes que você precisa para manter
  • Remover todas as colunas, exceto apenas o nome do arquivo
  • Adicione pkg_delete antes de cada nome de arquivo
  • Copie o resultado para o console do ssh várias vezes *** até que os pacotes selecionados sejam excluídos.

*** Rodar uma vez não é suficiente, porque nessa lista de pacotes você gerou - existem pacotes dependentes uns dos outros.

    
por 22.10.2012 / 04:13
4

Na próxima vez, execute make all-depends-list antes de começar a criar a porta.
Se você não gosta do que vê na lista, não vá mais longe.
Esta e outras gemas podem ser encontradas em /usr/ports/Mk/bsd.port.mk . Não leitura amigável embora.

Você está levemente ferrado em termos de limpar a bagunça.
Você realmente tem duas opções que eu posso pensar:

  • Opção 1 - Execute o comando acima, descubra o que você não precisa e desinstale-o.
    Esta é provavelmente a opção menos dolorosa.

  • Opção 2 - execute pkg_info -aR e procure pacotes sem dependências.
    Determine quais você não precisa e desinstale-os.
    (Esta é uma boa prática de limpeza a cada ano ou mais IMHO, mas é irritante.)

Em termos de limpeza dos detritos de construção, um simples make clean no diretório da porta infratora deve acionar a limpeza das dependências. Você também pode fazer um make clean em /usr/ports , mas provavelmente é mais rápido explodir a árvore e extraí-la novamente com portsnap se você quiser seguir esse caminho ...

Como outra opção (mais suja) que é muito específica para esta situação: Se você sabe que não instalou nenhuma outra porta desde o "erro" e a última vez que instalou as portas há algum tempo você pode usar as datas de criação os diretórios em /var/db/pkg - Simplesmente remova os pacotes cujas entradas db foram criadas no momento da instalação interrompida.

Tal como acontece com as outras opções acima, você ainda precisa olhar para os pacotes que está removendo para ter certeza de não eliminar nada importante, mas essa deve ser uma lista substancialmente mais curta do que as outras duas opções. se funciona para sua situação.

    
por 21.10.2012 / 02:16
0

make install clean conclui o install em todas as dependências antes de começar a clean . Se sua árvore de ports estava limpa quando você começou, então as dependências que você acabou de instalar são aquelas com subdiretórios work e .install_done* nesses subdiretórios.

find /usr/ports -mindepth 3 -maxdepth 3 -type d -name work -print |
while read wrkdir; do
  ls -1a "$wrkdir" | grep -q '^\.install_done' && dirname "$wrkdir"
done
    
por 21.10.2012 / 03:27
0

Dê uma chance a portmaster -s . Ele oferecerá a você a remoção das portas das quais nada depende do seu sistema. (Se você não tiver instalado, instale-o primeiro a partir das portas-mgmt / portmaster.)

    
por 21.10.2012 / 09:10

Tags