Regarder autour de soi pour se rapprocher de la cause profonde
Le problème semble être le script exécuté à l'arrêt.
J'ai identifié le fichier correspondant avec:
find /etc/systemd -name *unattended*
ce qui m'a donné le script systemd connexe:
/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
qui m'a ensuite indiqué le script exécuté à l'arrêt:
/usr/share/unattended-upgrades/unattended-upgrade-shutdown
Enquêter plus profondément pour trouver la cause profonde
dans ce script, il y a une section à la ligne 120 liée à la section dans /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown
Ligne 120 de / usr / share / unattended-upgrades / unattended-upgrade-shutdown:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
Le problème: il attend le mot-clé "False" alors que dans la conf apt, nous devons ajouter "false" (comparaison exacte des chaînes)!
Solution
J'ai pu résoudre / contourner l'arrêt au point mort de 3 manières différentes:
Solution de contournement A
- écrire "False" au lieu de "false" dans /etc/apt/apt.conf.d/50unattended-upgrades
Ce paramètre est sûr pour la mise à niveau jusqu'à ce qu'un véritable correctif soit fourni car le fichier que nous modifions ici n'est pas remplacé par une mise à jour des mises à niveau sans assistance. Problème: Lorsque la cause première est corrigée, cela entraînera à nouveau un arrêt de décrochage, je suggère donc de combiner cela avec la solution de contournement B.
OU: solution de contournement B
- réduisez le temps d'attente dans /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service de la valeur par défaut à 15 secondes:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[Un service]
Type = oneshot
ExecStart = / usr / share / unattended-upgrades / unattended-upgrade-shutdown
TimeoutStartSec = 15
Ce paramètre n'est PAS sécurisé pour la mise à niveau car le fichier que nous modifions ici peut être remplacé par une mise à jour des mises à niveau sans assistance. En plus de cela, il est vraiment loin de réparer quelque chose, mais cela garantira que votre système n'attendra pas plusieurs minutes lors de l'arrêt. Gardez à l'esprit qu'après une mise à niveau des mises à niveau sans assistance, vous devrez peut-être le redéfinir!
OU: Correction C (à signaler en amont)
- fix / usr / share / unattended-upgrades / unattended-upgrades-shutdown pour attendre "false" au lieu de "False"
patcher / usr / share / unattended-upgrades / 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 @@
# exécuter
p = Aucun
apt_pkg.init_config ()
- si apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", False):
+ si apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", false):
env = copy.copy (os.environ)
env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
logging.debug ("démarrage des mises à niveau sans assistance en mode d'arrêt")
Conclusion
tbh seul le dernier est un vrai correctif. les deux autres options ne sont que des solutions de contournement jusqu'à ce que le vrai correctif soit implémenté.
Cela doit être fait en amont et comme cela affecte à la fois Debian (testé sur Debian Stretch) et Ubuntu (testé sur Ubuntu 16.04.1) pour les deux distributions.
J'ai ouvert un rapport de bogue ici: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611