Eu tenho uma ação do github com uma etapa para liberar espaço e possui um comando apt purge seguido por centenas de pacotes. Mas se um pacote não estiver disponível, todo o processo falhará
Se você apt limpar ou remover uma lista enorme de vários pacotes de uma vez, como forçar a limpeza dos pacotes instalados existentes?
Exemplo:
sudo apt purge pack1 pack2 pack3 -y
se pack1 e pack2 existirem, mas pack3 não existir, o processo falhará
E: Unable to locate package 'pack3'
e pack1 e pack2 não são eliminados.
Como forçar a remoção de pack1 e pack2 mesmo que um dos restantes não exista?
Ao ponto
Agulhas para dizer que:
Limpar centenas de pacotes instalados de uma só vez é uma má ideia, independentemente do motivo.
Usar a opção do APT
-y
para responder automaticamente sim é uma ideia ainda pior.Você provavelmente sabe disso, mas eu tive que anotar ... Vamos à sua pergunta:
AFAIK APT não pode fazer isso ... O APT faz mais do que as ações básicas de apenas tentar instalar, remover, purgar ... etc. ... Ele resolve dependências, evita e avisa sobre conflitos, substitui alguns pacotes removidos .. ... Assim, ele tem que analisar/verificar todos os pacotes passados em seu banco de dados de pacotes disponíveis em cache antes de começar a cometer qualquer ação especificada pelo usuário neles.
Portanto, sua melhor aposta nessa situação é passar esses pacotes um de cada vez para o APT usando
xargs
como:ou usando um loop de shell como:
ou soluções semelhantes.
Por outro lado, se usar o APT não é obrigatório para você, então
dpkg
deve fazer o trabalho sem sair desses pacotes "Unable to locate packages
" e pode ser usado assim:Ao redor do ponto
Demonstração:
Observe as três etapas antes de cometer a
purge
ação:Estes são auto-explicativos e, embora o pacote
golang
não esteja instalado:Mas, o APT pode localizá-lo em sua lista de pacotes em cache e, portanto, pode tomar uma decisão a respeito:
e:
Isso é normal e o APT continuará removendo o(s) pacote(s) instalado(s)
Mas no caso de um pacote que o APT não consegue localizar em suas listas de pacotes em cache:
O APT não pode tomar a decisão e sai após imprimir um erro:
Notícia importante:
Como visto na demonstração acima, o APT verifica suas listas de pacotes em cache obtidas por meio da
update
ação e, portanto, uma lista de pacotes atualizada(s) é vital para corrigir a funcionalidade do APT e fazerpurge
/remove
ou mesmoinstall
ações com uma lista de pacotes desatualizada(s) pode resultar em um resultado inesperado removendo pacotes indesejados ... Veja, por exemplo, apt-get install Firefox removido inesperadamente ... Portanto, certifique-se de que a lista de pacotes esteja atualizada executando:primeiro.
O
apt purge
comando falhará se algum dos pacotes especificados não existir. Isso ocorre porqueapt purge
remove todos os arquivos associados a um pacote, incluindo arquivos de configuração. Se um pacote não existir, não haverá arquivos a serem removidos, portanto, oapt purge
comando falhará.Para forçar a limpeza de pacotes instalados existentes, mesmo que um dos pacotes não exista, você pode usar a
--force-remove
opção. Por exemplo, o seguinte comando limpará os pacotespack1
,pack2
epack3
, mesmo quepack3
não existam:A
--force-remove
opção informaapt purge
para ignorar quaisquer erros que ocorram ao tentar remover um pacote que não existe. Isso significa que oapt purge
comando ainda será bem-sucedido, mesmo que um dos pacotes especificados não exista.Aqui está um detalhamento do comando:
sudo
- Isso diz ao comando para ser executado como root.apt purge
- Este é o comando para limpar um pacote.--force-remove
- Esta opção informaapt purge
para ignorar quaisquer erros que ocorram ao tentar remover um pacote que não existe.pack1
pack2
pack3
- Estes são os pacotes que você deseja limpar.Se você está enfrentando o problema em que todo o processo falha devido a um pacote ausente ao tentar limpar ou remover vários pacotes de uma vez, existe uma maneira de garantir a remoção dos pacotes instalados existentes sem ser prejudicado pela ausência de um único pacote.
Para conseguir isso, você pode usar um comando bash chamado "apt-get --ignore-missing". Este comando permite continuar com o processo de remoção mesmo que alguns pacotes não sejam encontrados.
Aqui está um exemplo de como você pode modificar sua etapa de ação do GitHub para incluir este comando:
Ao usar o sinalizador "--ignore-missing", o apt-get desconsiderará todos os pacotes que não puder encontrar e prosseguirá com a eliminação dos pacotes restantes. Isso garante que pack1 e pack2, se presentes, ainda serão eliminados, mesmo que pack3 não seja encontrado.
Dessa forma, você pode limpar com confiança os pacotes instalados existentes sem que o processo falhe devido à ausência de um único pacote.
Espero que esta solução ajude você a alcançar o resultado desejado em sua ação GitHub!