apt / unattended-upgrade blocca l'arresto


13

Una volta unattended-upgradesinstallato, 9 arresti / riavvii su 10 si bloccano mentre "avvia l'arresto automatico degli aggiornamenti". Questo blocco blocca il processo di spegnimento per 5-10 minuti.

Se disabilito gli aggiornamenti non presidiati tramite /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, i problemi si verificano.

Se interrompo il servizio prima dell'arresto / riavvio ( sudo service unattended-upgrades stop) il problema si verifica ancora.

Se rimuovo il pacchetto ( sudo apt remove unattended-upgrades) il problema non si verifica più.

Ciò si verifica su una versione appena installata di Ubuntu Server 16.04.1(entrambi unattended-upgradesinstallati tramite la GUI di installazione o l'installazione manuale di aggiornamenti automatici)

Entrambi Kern.log & syslognon mostrano il processo di spegnimento (credo perché i filesystem sono già stati smontati)

Qualcun altro ha visto o risolto questo problema? Impazzendo cercando di risolverlo.


Impossibile riprodurre in una VM di prova 16.04.1. L'arresto non è ritardato qui.
user535733

Potrebbe essere basato su hardware? Non sono del tutto sicuro di cosa accadrà unattended-upgradesdurante l'arresto.
Garullon245136,

Mi chiedo perché stai sempre correndo al momento dello spegnimento: non sei un demone; è semplicemente uno script che viene eseguito brevemente una volta al giorno e poi termina.
user535733

Sembra che il processo di spegnimento tenti di eseguirti durante la fase in cui tutti i filesystem sono stati smontati. Questo non sembra essere controllato da /etc/rc6.d/ o /etc/rc0.d/ links come Ho rimosso tutti i collegamenti e il processo continua ancora durante l'arresto.
Garullon245136,

1
Cerca in /etc/apt/apt/conf.d/50unattended-upgrades l'opzione 'run uu at shutdown' (intorno alla riga 25). Assicurati che sia "falso" o commentato.
user535733

Risposte:


14

Guardarsi intorno per avvicinarsi alla causa principale

Il problema sembra essere lo script in esecuzione allo spegnimento.

Ho identificato il file corrispondente con:

find /etc/systemd -name *unattended*

che mi dà il relativo script systemd:

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

che poi mi ha detto la sceneggiatura eseguita allo spegnimento:

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

Indagare più a fondo per trovare la causa principale

all'interno di questo script c'è una sezione nella riga 120 relativa alla sezione in /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown

Riga 120 di / usr / share / aggiornamenti automatici / arresto automatico degli aggiornamenti:

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

Il problema: si aspetta la parola chiave "False" mentre in apt conf dovremmo aggiungere "false" (confronto esatto delle stringhe)!

Soluzione

Sono stato in grado di correggere / aggirare l'arresto di stallo in 3 modi diversi:

Soluzione alternativa A

  • scrivi "False" invece di "false" in /etc/apt/apt.conf.d/50unattended-upgrades

Questa impostazione è sicura fino a quando non viene fornita una correzione reale perché il file che cambiamo qui non viene sovrascritto da un aggiornamento di aggiornamenti automatici. Problema: quando la causa principale viene risolta, si verificherà di nuovo un arresto di stallo, quindi suggerisco di combinarlo con la soluzione alternativa B.

OPPURE: soluzione alternativa B

  • ridurre il tempo di attesa in /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service da default a 15 secondi:

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

[Servizio]
Tipo = oneshot
ExecStart = / usr / share / unattended-upgrades / incustodito-upgrade-arresto
TimeoutStartSec = 15

Questa impostazione NON è sicura per l'aggiornamento perché il file che cambiamo qui potrebbe essere sovrascritto da un aggiornamento di aggiornamenti automatici. Inoltre, è molto lontano dal riparare qualcosa, ma assicurerà che il tuo sistema non attenda alcuni minuti quando si spegne. Tieni presente che dopo un aggiornamento di aggiornamenti non presidiati potresti doverlo impostare di nuovo!

OPPURE: correzione C (deve essere segnalata a monte)

  • fix / usr / share / unattended-upgrade / unattended-upgrade-shutdown si aspetta "falso" invece di "falso"

patching / usr / share / unattended-upgrade / 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 @@
     # eseguirlo
     p = Nessuno
     apt_pkg.init_config ()
- se apt_pkg.config.find_b ("Aggiornamento automatico :: InstallOnShutdown", False):
+ se apt_pkg.config.find_b ("Aggiornamento automatico :: InstallOnShutdown", falso):
         env = copy.copy (os.environ)
         env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
         logging.debug ("avvio di aggiornamenti automatici in modalità di arresto")

Conclusione

solo l'ultimo è una vera soluzione. entrambe le altre opzioni sono solo soluzioni alternative fino a quando non verrà implementata la vera correzione.

Questo deve essere fatto a monte e poiché ciò influisce sia su Debian (testato su Debian Stretch) sia su Ubuntu (testato su Ubuntu 16.04.1) per entrambe le distribuzioni.

Ho aperto una segnalazione di bug qui: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611


2
apt_pkg.config.find_b () restituisce un valore booleano e non una stringa. "find_b (key [, default = False]) → bool Restituisce il valore booleano memorizzato nella chiave o il valore fornito dall'oggetto bool default se l'opzione richiesta non è impostata." apt.alioth.debian.org/python-apt-doc/library/… Quindi non è un bug in unattended-upgrade-shutdown poiché il controllo di False è corretto.
Brian Murray,

Come chi segue quanto sopra Launchpad collegamento bug report vedrà, questo problema non è stato in realtà causato da un confronto di stringhe in mancanza, ma invece è stato a causa di un systemd bug sequenziamento che ha riferito ora stato risolto .
sampablokuper,

1

Come soluzione alternativa, utilizzo questo script per risolverlo:

#!/usr/bin/env bash

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

exit

Spero che sarà presto a monte.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.