as atualizações apt / autônoma param o desligamento

13

Quando unattended-upgradesinstalado, 9 em cada 10 desligamentos / reinicializações são interrompidos enquanto "inicia o desligamento de atualizações autônomas". Esse travamento interrompe o processo de desligamento por 5 a 10 minutos.

Se eu desabilitar atualizações autônomas por meio de /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, o problema ocorre.

Se eu encerrar o serviço antes de desligar / reiniciar ( sudo service unattended-upgrades stop), o problema ainda ocorrerá.

Se eu remover o pacote ( sudo apt remove unattended-upgrades), o problema não ocorre mais.

Isso ocorre em uma versão recém-instalada Ubuntu Server 16.04.1( unattended-upgradesinstalada via GUI de instalação ou instalação manual de atualizações autônomas)

Ambos Kern.log & syslognão mostram o processo de desligamento (acredito que porque os sistemas de arquivos já tenham desmontado)

Alguém mais viu ou corrigiu esse problema? Enlouquecendo tentando solucionar o problema.

garullon245136
fonte
Não foi possível reproduzir em uma VM de teste 16.04.1. O desligamento não está atrasado aqui.
User535733
Poderia ser baseado em hardware? Não tenho certeza do que acontece unattended-upgradesdurante o desligamento.
#
Estou me perguntando por que o uu está sempre em execução no momento do desligamento: o uu não é um daemon; é apenas um script que é executado brevemente uma vez por dia e depois termina.
User535733
Parece que o processo de desligamento tenta executar o uu durante o estágio em que todos os sistemas de arquivos estão sendo desmontados. Isso não parece ser controlado pelos links /etc/rc6.d/ ou /etc/rc0.d/ como Eu removi todos os links e o processo ainda é executado durante o desligamento.
garullon245136
1
Procure em /etc/apt/apt/conf.d/50unattended-upgrades a opção 'run uu at shutdown' (em torno da linha 25). Verifique se é 'falso' ou comentado.
user535733

Respostas:

14

Olhando em volta para se aproximar da causa raiz

O problema parece ser o script em execução no desligamento.

Eu identifiquei o arquivo correspondente com:

find /etc/systemd -name *unattended*

que me mostra o script systemd relacionado:

/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service

que me disse o script executado no desligamento:

/usr/share/unattended-upgrades/unattended-upgrade-shutdown

Investigando mais profundamente para encontrar a causa raiz

dentro desse script, há uma seção na linha 120 relacionada à seção em /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown

Linha 120 de / usr / share / upgrades autônomos / unattended-upgrade-shutdown:

if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):

O problema: espera que a palavra-chave "False", enquanto no apt conf, devemos adicionar "false" (comparação exata de cadeias)!

Solução

Consegui consertar / solucionar o desligamento paralisado de três maneiras diferentes:

Solução A

  • escreva "False" em vez de "false" em /etc/apt/apt.conf.d/50unattended-upgrades

Essa configuração é segura para atualização até que uma correção real seja fornecida porque o arquivo que alteramos aqui não é substituído por uma atualização de atualizações autônomas. Problema: Quando a causa raiz é corrigida, isso resulta em um desligamento estagnado novamente, então sugiro combiná-lo com a Solução B.

OU: solução alternativa B

  • reduza o tempo de espera em /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service do padrão para 15 segundos:

vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service

[Serviço]
Tipo = oneshot
ExecStart = / usr / share / upgrades autônomos / unattended-upgrade-shutdown
TimeoutStartSec = 15

Essa configuração NÃO é segura para atualização, pois o arquivo que alteramos aqui pode ser substituído por uma atualização de atualizações autônomas. Além disso, está muito longe de consertar algo, mas garantirá que seu sistema não espere alguns minutos ao desligar. Lembre-se de que, após uma atualização de atualizações autônomas, você pode precisar defini-las novamente!

OU: Correção C (deve ser relatado upstream)

  • corrija / usr / share / upgrades autônomos / shutdown autônomos para esperar "falso" em vez de "falso"

patching / usr / share / upgrades autônomos / unattended-upgrade-shutdown:

--- / tmp / unattended-upgrade-shutdown 2017-02-03 14: 53: 03.238103238 +0100
+++ / tmp / unattended-upgrade-shutdown_fix 2017-02-03 14: 53: 17.685589001 +0100
@@ -117,7 +117,7 @@
     # executá-lo
     p = nenhum
     apt_pkg.init_config ()
- se apt_pkg.config.find_b ("Atualização autônoma :: InstallOnShutdown", False):
+ se apt_pkg.config.find_b ("Atualização autônoma :: InstallOnShutdown", false):
         env = copy.copy (os.environ)
         env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
         logging.debug ("iniciando atualizações autônomas no modo de desligamento")

Conclusão

Apenas o último é uma correção real. as duas outras opções são apenas soluções alternativas até que a correção real seja implementada.

Isso precisa ser feito upstream e isso afeta o Debian (testado no Debian Stretch) e o Ubuntu (testado no Ubuntu 16.04.1) para ambas as distribuições.

Abri um relatório de erro aqui: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611

steadfasterX
fonte
2
apt_pkg.config.find_b () retorna um booleano e não uma string. "find_b (chave [, padrão = Falso]) → bool Retorna o valor booleano armazenado na chave ou o valor fornecido pelo objeto bool padrão se a opção solicitada não estiver definida." apt.alioth.debian.org/python-apt-doc/library/… Portanto, não é um bug no desligamento automático da atualização, pois a verificação de False está correta.
21717 Brian Murray
Como qualquer pessoa que siga o link do relatório de erros do Launchpad acima verá, esse problema não foi causado por uma comparação de cadeias com falha, mas ocorreu devido a um erro de seqüenciamento do systemd que supostamente foi corrigido .
precisa saber é o seguinte
1

Como solução alternativa, uso este script para corrigi-lo:

#!/usr/bin/env bash

sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown

exit

Esperemos que em breve seja lançado a montante.

caracal
fonte