Como excluir pacotes antigos instalados pelo pacman no Arch Linux?

51

Instalei recentemente o Arch Linux e descobri que estou consumindo muito armazenamento relativamente rápido. Por qualquer motivo, eu já usei 17 GB em apenas duas semanas. Como não tenho muito software instalado, sou levado a acreditar que todos os pacotes antigos são mantidos em algum lugar.

Para suportar isso, notei que, se eu instalei um pacote, remova esse pacote e o reinstale, o pacman apenas descompacta e reinstala o software sem precisar fazer o download novamente.

Depois de instalar meu sistema básico, antes do software extra, usei cerca de 2 GB, talvez. Desde então, instalei apenas o Matlab, o Skype, o Wine e alguns outros pequenos programas. É claro que eu também instalei bibliotecas ausentes e coisas do gênero, mas não vale quase 15 GB.

Estou completamente errado aqui ou o Arch nunca exclui pacotes antigos ao baixar / atualizar para novas versões?

Em caso afirmativo, como excluo esses pacotes não utilizados?

Além disso, quando removo os pacotes instalados, uso pacman -R ...

sherrellbc
fonte
11
Provavelmente, é uma boa ideia configurar o paccache como um trabalho regular cronou regular systemd.
Sparhawk

Respostas:

59

Não, o pacman não remove pacotes antigos do seu cache ( /var/cache/pacman/pkg) para que, com o tempo, ele possa ser preenchido.

Você pode adotar duas abordagens para limpar o cache: a força bruta, uma com pacman -Sc:

-c, --clean
Remova os pacotes que não estão mais instalados no cache e os bancos de dados de sincronização não utilizados no momento para liberar espaço em disco. Quando o pacman baixa pacotes, ele os salva em um diretório de cache. Além disso, os bancos de dados são salvos para todos os bancos de dados de sincronização dos quais você baixa e não são excluídos, mesmo que sejam removidos do arquivo de configuração pacman.conf (5). Use uma opção --clean para remover apenas os pacotes que não estão mais instalados; use dois para remover todos os arquivos do cache. Nos dois casos, você terá a opção sim ou não para remover pacotes e / ou bancos de dados baixados não utilizados.

Ou, para uma abordagem mais sutil, você pode usar um dos utilitários fornecidos com o pacman-contrib paccache:

paccache é um utilitário de limpeza de cache pacman flexível, que possui inúmeras opções para ajudar a controlar quanto e o que é excluído de qualquer diretório que contenha tarballs de pacotes pacman.

Por padrão, paccacheremove todas as últimas três versões de um pacote instalado, mas você pode alterar esse número com a -k, --keepopção Há também uma -d, --dryrunopção para visualizar suas alterações. Veja paccache --helppara todos os comutadores.

Existem vários utilitários no pacote pacman-contrib para auxiliar no gerenciamento de pacotes; vale a pena examinar todos eles e obter uma compreensão de como eles funcionam e podem facilitar a execução do Arch. Você pode ver a lista completa com:

pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'
jasonwryan
fonte
jasonwryan disse isso :) Também tenha muito cuidado com o --cleaninterruptor duplo : isso proíbe a reversão fácil para o pacote de trabalho, caso ocorra algum problema com a versão mais recente (por exemplo, o novo pacote depende de uma versão mais antiga da lib ou do Python; o mesmo com o hardware e as versões mais recentes). núcleo). Acho que configurar o cache do pacman em outro lugar que não seja /uma solução muito melhor (apenas defina o caminho no /etc/pacman.conf ).
Tuk0z
2
Se você não possui, paccachepode obtê-lo instalando o pacman-contribpacote.
Pfrenssen
+1, mas sugiro $ pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin\/./ {print $NF}'evitar uma linha em branco nos resultados? ;-)
Cbhihe 27/09/18
Welp, rm -rf /var/cache/pacman/pkgfoi a coisa errada a fazer
Pós Auto
13

Seu cache de pacotes está em /var/cache/pacman/pkg/.

NOTA: os pacman pacotes foram atualizados em 2018 e requerem instalação adicional pacman-contribpara usar scripts / ferramentas como paccachedescrito abaixo.

Faz:

paccache -d

Para fazer um -dryrune ver o que uma execução desse utilitário pode remover na próxima etapa:

paccache -r

Para remover pacotes em cache. 17gbs soa íngreme. Verifique se você não possui alguns logs de fuga. Faz:

du -h /var/log

Ou apenas:

du -h /var

Para uma idéia mais geral do que está acontecendo.

mikeserv
fonte
7

pacman -Sccfaz o que você está pedindo, mas não é recomendado. Do Wiki

Também é possível esvaziar completamente a pasta de cache com pacman -Scc , mas fazê-lo é considerado uma prática inadequada , pois, além do acima, também impede a reinstalação de um pacote diretamente da pasta de cache em caso de necessidade, forçando assim para fazer o download novamente. Você nunca deve usá-lo, a menos que haja uma necessidade desesperada de mais espaço em disco.

Além disso, quando desinstalo pacotes, prefiro usá- pacman -Rnsclos, pois ele também remove dependências de pacotes e pacotes que dependem deste. Como sempre, leia atentamente quais pacotes estão sendo removidos, pois você pode facilmente deixar nosso sistema em um estado inutilizável.

aprad046
fonte
Isso é legal - então é equivalente a rm /var/cache/pacman/pkg/*isso? Ou - pelo menos por padrão, eu acho. Eu mudei meu cache de pacotes para /tmpa maioria das máquinas há muito tempo e deixei squidlidar com um único cache central no roteador. Não é tão fácil como pacman -Sccse.
mikeserv
@mikeserv Um cache central do pacote Pacman no seu roteador? Como você o configurou, eu gosto do som, já que tenho um desktop e um laptop Arch.
Severen
6

Eu sugiro fortemente o uso de em paccachevez de pacman -Sc. Existe até um sinalizador muito eficaz para remover seletivamente as versões dos pacotes desinstalados -u. As bandeiras de que paccacheeu recomendo são (como parte do paccache v5.0.2):

  • -d, --dryrun: execute uma execução a seco, localizando apenas pacotes candidatos
  • -r, --remove: remover pacotes candidatos
  • -u, --uninstalled: direciona apenas pacotes desinstalados
  • -k, --keep <num>: mantenha "num" de cada pacote no cache (padrão: 3)

Exemplo: verifique as versões de cache restantes dos pacotes desinstalados

paccache -dvuk0
strpeter
fonte
11
Como isso se soma às respostas existentes, além de imprimir as opções?
jasonwryan
Se você removeu muitos pacotes grandes não utilizados, deseja removê-los do cache do pacman. Isso é possível com a bandeira -ude paccache. Exemplos de pacotes grandes são, por exemplo, Gnome, KDE ou Texlive para lhe dar uma idéia.
Strpeter 26/10/19
11
Sim, eu estou familiarizado com a bandeira. Meu argumento é que apenas adicionar mais sinalizadores à resposta não muda o fato de que apenas replica o que já está aqui.
jasonwryan
a -kbandeira era nova para mim e não muito bem explicada na caixa de diálogo de ajuda, portanto, seu uso aqui foi útil.
hLk 17/09