Como abortar com segurança o apt-get install?

31

Eu tenho um processo de apt-get install que parece estar irremediavelmente encunhado na etapa processing triggers for python-support .

Minha inclinação é para kill , mas no passado, simplesmente kill -ing um apt-get install processo me causou muita tristeza. (Arquivos de bloqueio sorteados do IIRC são deixados para trás, etc.)

Existe uma maneira mais segura de interromper esse processo?

    
por kjo 11.02.2013 / 20:33

5 respostas

31

Processos de matança

Em geral, por matar um processo, não há maneira mais segura de matar um processo do que com uma morte regular (SIGTERM). Caso seja um processo interativo, ele normalmente permite que você o pare ainda mais seguro enviando um sinal SIGINT, geralmente enviado pressionando Ctrl + C . Este sinal está sendo capturado pelo próprio processo can para ouvi-lo - e geralmente para de forma elegante. ( obrigado Eliah )

banco de dados DPKG

Em relação ao gerenciamento de pacotes, é uma espécie de caso especial. O banco de dados DPKG que os comandos APT usam debaixo d'água sempre pode detectar se uma operação não foi concluída. Cada pacote tem um estado real que está marcado, bem como um estado atual , por exemplo descompactado, configurado, etc. Ao matar o frontend do APT, o banco de dados estará em um estado quebrado, mas conhecido . Os arquivos de bloqueio só serão liberados quando tudo estiver de volta em um estado limpo - você deve consertar isso até que ele permita novas operações.

A maneira de corrigir é apenas disparar um processo para obter todos os pacotes no estado configurado. Praticamente falando, se você interrompeu uma operação apt-get , você pode terminá-la mais tarde usando

sudo dpkg --configure -a

Ele sabe como se recuperar do estado quebrado para um estado totalmente configurado e, nesse sentido, apenas continue de onde foi interrompido. Os arquivos de bloqueio são deixados lá até que você termine isso, e isso é por uma razão - para impedir que novas operações com o banco de dados DPKG fiquem sujas.

Sobre o SIGKILL (9)

Enviar um SIGKILL (representação decimal 9) é muito inseguro. Este sinal não é capturado pelo processo, mas todo o processo será limpo pelo sistema operacional (kernel), quer o processo goste ou não. O estado dos arquivos no sistema de arquivos pode ser deixado em um estado corrompido. Nunca envie esses sinais a menos que não esteja ouvindo outros sinais mais graciosos.

    
por gertvdijk 11.02.2013 / 20:37
11

Quando encontro uma falha com o apt-get, eu faço o seguinte (como root, ou seja, sudo antes de todos os comandos):

  1. Mate o processo chamado apt-get:

    killall -9 apt-get
  2. Reconfigure o dpkg:

    dpkg --configure -a
  3. Atualize o apt-get:

    apt-get update
  4. Atualizar pacotes, incluindo aqueles instalados incorretamente:

    apt-get upgrade

Isso eu aprendi em algum lugar, mas infelizmente não consigo me lembrar exatamente onde.

    
por carnendil 11.02.2013 / 21:35
1
sudo dpkg -r <package name>

No meu caso, tive problemas com o Java 8 no Ubuntu 12.04, então ...

sudo dpkg -r oracle-java8-installer
    
por Funmungus 29.11.2013 / 18:05
0

Aqui está como eu faço isso, Ctrl+C Mas lembre-se que é seguro desde que o apt-get esteja em fase de download ou atualizando o cache. Fora isso, não consigo pensar em uma maneira que seja mais segura. Apenas deixe terminar e desfaça as alterações desinstalando ou rebaixando de alguma forma. Os arquivos baixados podem ser limpos com sudo apt-get autoclean

    
por Stefano Mtangoo 11.02.2013 / 21:14
0

O Linux e outros sistemas do tipo Unix são muito poderosos na linha de comando, mas muito implacáveis ​​quando o processo é iniciado. Enviando um processo, o sinal de kill irá certamente matar o processo que está sendo executado, mas tenha em mente que você está deixando um banco de dados em um estado instável. O último registro pode não ser fechado corretamente, portanto você corre o risco de reparar um banco de dados. Não apenas com o apt, mas com qualquer aplicativo.

Sempre tente finalizar o aplicativo de maneira normal e apenas eliminar os processos que estão sendo executados.

    
por Steve Sauls 11.02.2013 / 21:34

Tags