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

44

Eu tenho um apt-get installprocesso que parece irremediavelmente entalado na processing triggers for python-supportetapa.

Minha inclinação é por killisso, mas, no passado, simplesmente - killum apt-get installprocesso me causou muita dor. (Arquivos de bloqueio sortidos do IIRC são deixados para trás etc.)

Existe uma maneira mais segura de interromper esse processo?

kjo
fonte

Respostas:

44

Processos de abate

De um modo geral, para matar um processo, não há maneira mais segura de matar um processo do que com um assassinato regular (SIGTERM). Caso seja um processo interativo, geralmente você pode pará-lo ainda mais com segurança enviando um sinal SIGINT, geralmente enviado pressionando Ctrl+ C. Este sinal está sendo capturado pelo próprio processo, pode ouvi-lo - e geralmente para normalmente. ( 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 do APT usam debaixo d'água sempre pode detectar se uma operação não foi concluída. Todo pacote tem um estado real marcado e atual , por exemplo, descompactado, configurado etc. Ao eliminar o frontend do APT, o banco de dados estará em um estado quebrado, mas conhecido . Os arquivos de bloqueio serão liberados somente quando tudo voltar ao estado limpo - você deve consertar isso até que permita novas operações.

A maneira de corrigir é apenas disparar um processo para obter todos os pacotes no estado configurado. Na prática, se você interrompeu uma apt-getoperação, pode finalizá-la mais tarde usando

sudo dpkg --configure -a

Ele sabe como recuperar do estado quebrado para um estado totalmente configurado e, nesse sentido, apenas continuar 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 novas operações com o banco de dados DPKG em um estado impuro.

Sobre a SIGKILL (9)

Enviar um SIGKILL (representação decimal 9) é muito inseguro. Esse sinal não é captado 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 mais ouvindo outros sinais mais graciosos.

gertvdijk
fonte
2
Quando um aplicativo oferece uma maneira de finalizá-lo, isso geralmente é ainda mais seguro que o SIGTERM. Por exemplo, a maioria (se não todos) editores de texto, processadores de texto, programas gráficos, navegadores da Web e outros aplicativos gráficos ou baseados em texto em que é provável que um usuário crie conteúdo que não deve ser perdido, não o salva automaticamente antes de sair quando receberem o SIGTERM. Além disso, observe que o SIGINT às vezes pode ser mais seguro que o SIGTERM (mas geralmente não deve ser enviado, a menos que o mesmo resultado que Ctrl + C seja explicitamente desejado).
Eliah Kagan
16

Quando encontro uma falha no apt-get, faço o seguinte (como root, ou seja, sudoantes 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:

    atualização apt-get
  4. Pacotes de atualização, incluindo aqueles instalados incorretamente:

    atualização apt-get

Aprendi isso em algum lugar, mas infelizmente não me lembro exatamente onde.

Carnendil
fonte
6
Por favor, nunca envie um sinal 9 (SIGKILL), a menos que você tenha uma boa razão para fazê-lo. Veja minha resposta atualizada.
gertvdijk
3
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
Funmungus
fonte
1

O Linux e outros sistemas do tipo Unix são muito poderosos na linha de comando, mas muito implacáveis ​​quando o processo é iniciado. O envio de um processo ao sinal de interrupção certamente interromperá o processo em execução, mas lembre-se de que você está deixando um banco de dados em um estado instável. O último registro pode não ser fechado corretamente, então 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 normalmente e interrompa apenas os processos que estão fugindo dos aplicativos.

Steve Sauls
fonte
0

Aqui está como eu faço isso: Ctrl+ CMas lembre-se de que é seguro enquanto o apt-get estiver na fase de download ou na atualização do cache. Fora isso, não consigo pensar em uma maneira mais segura. Apenas deixe terminar e desfazer as alterações, desinstalando ou fazendo o downgrade de alguma forma. Os arquivos baixados podem ser limpos comsudo apt-get autoclean

Stefano Mtangoo
fonte