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