apt / unbeaufsichtigt-Upgrades blockiert das Herunterfahren

13

Wenn unattended-upgradesinstalliert ist, hängen 9 von 10 Herunterfahren / Neustarten, während "unbeaufsichtigte Upgrades heruntergefahren werden". Dieser Hang blockiert den Abschaltvorgang für 5-10 Minuten.

Wenn ich unbeaufsichtigte Upgrades über deaktiviere, treten /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgradesdie Probleme auf.

Wenn ich den Dienst vor dem Herunterfahren / Neustarten beende ( sudo service unattended-upgrades stop), tritt das Problem weiterhin auf.

Wenn ich das Paket ( sudo apt remove unattended-upgrades) entferne, tritt das Problem nicht mehr auf.

Dies tritt bei einer frisch installierten Version von auf Ubuntu Server 16.04.1(sowohl bei der unattended-upgradesInstallation über die grafische Benutzeroberfläche als auch bei der manuellen Installation von unbeaufsichtigten Upgrades).

Beide Kern.log & syslogzeigen den Shutdown-Prozess nicht an (ich glaube, weil die Dateisysteme bereits nicht gemountet wurden)

Hat jemand dieses Problem gesehen oder behoben? Ich werde verrückt, wenn ich versuche, Fehler zu beheben.

garullon245136
quelle
In einer 16.04.1-Test-VM kann nicht reproduziert werden. Das Herunterfahren wird hier nicht verzögert.
user535733
Könnte es hardwarebasiert sein? Ich bin nicht ganz sicher, was unattended-upgradesbeim Herunterfahren passiert .
Garullon245136
Ich frage mich, warum uu zum Zeitpunkt des Herunterfahrens immer ausgeführt wird: uu ist kein Daemon; Es ist lediglich ein Skript, das einmal täglich kurz ausgeführt und dann beendet wird.
user535733
Es scheint, als würde der Shutdown-Prozess versuchen, uu während der Phase auszuführen, in der alle Dateisysteme entfernt werden. Dies scheint nicht durch die Links /etc/rc6.d/ oder /etc/rc0.d/ gesteuert zu werden Ich habe alle Links entfernt und der Prozess läuft noch während des Herunterfahrens.
Garullon245136
1
Suchen Sie in /etc/apt/apt/conf.d/50unattended-upgrades nach der Option 'run uu at shutdown' (Zeile 25). Stellen Sie sicher, dass es "falsch" oder auskommentiert ist.
user535733

Antworten:

14

Schauen Sie sich um, um näher an der eigentlichen Ursache zu sein

Das Problem scheint das Skript zu sein, das beim Herunterfahren ausgeführt wird.

Ich habe die entsprechende Datei identifiziert mit:

find /etc/systemd -name *unattended*

was mir das zugehörige systemd script gibt:

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

was mir dann sagte, dass das Skript beim Herunterfahren ausgeführt wurde:

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

Tiefer untersuchen, um die Ursache zu finden

In diesem Skript befindet sich in Zeile 120 ein Abschnitt, der sich auf den Abschnitt in /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown bezieht

Zeile 120 von / usr / share / unbeaufsichtigte-Upgrades / unbeaufsichtigtes-Upgrade-Herunterfahren:

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

Das Problem: Es erwartet das Schlüsselwort "False", während in der apt conf "false" hinzugefügt werden sollte (genauer Zeichenfolgenvergleich)!

Lösung

Ich konnte das Stalling Shutdown auf 3 verschiedene Arten beheben / umgehen:

Problemumgehung A

  • schreibe "False" statt "false" in /etc/apt/apt.conf.d/50unattended-upgrades

Diese Einstellung ist upgrade-sicher, bis ein tatsächlicher Fix bereitgestellt wird, da die hier geänderte Datei nicht durch ein Update unbeaufsichtigter Upgrades überschrieben wird. Problem: Wenn die Grundursache behoben ist, führt dies zu einem erneuten Stillstand. Daher schlage ich vor, dies mit Problemumgehung B zu kombinieren.

ODER: Problemumgehung B

  • Verringern Sie die Wartezeit in /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service von Standard auf 15 Sekunden:

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

[Bedienung]
Typ = ein Schuss
ExecStart = / usr / share / unbeaufsichtigte-Upgrades / unbeaufsichtigtes-Upgrade-Herunterfahren
TimeoutStartSec = 15

Diese Einstellung ist NICHT aktualisierungssicher, da die hier geänderte Datei möglicherweise durch eine Aktualisierung von unbeaufsichtigten Aktualisierungen überschrieben wird. Abgesehen davon ist es wirklich weit davon entfernt, etwas zu reparieren, aber es stellt sicher, dass Ihr System beim Herunterfahren nicht mehrere Minuten wartet. Denken Sie daran, dass Sie dies nach einem Upgrade von unbeaufsichtigten Upgrades möglicherweise erneut festlegen müssen!

ODER: Fix C (muss vorab gemeldet werden)

  • Fix / usr / share / unbeaufsichtigte-Upgrades / unbeaufsichtigte-Upgrades-Shutdown, um "false" anstelle von "False" zu erwarten

Patchen von / usr / share / unbeaufsichtigt-Upgrades / unbeaufsichtigt-Upgrade-Herunterfahren:

--- / 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 @@
     # starte es
     p = keine
     apt_pkg.init_config ()
- if apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", False):
+ if apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", false):
         env = copy.copy (os.environ)
         env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
         logging.debug ("unbeaufsichtigte Upgrades im Shutdown-Modus starten")

Fazit

tbh nur der letzte ist eine echte Lösung. Die beiden anderen Optionen sind nur Problemumgehungen, bis der eigentliche Fix implementiert wird.

Dies muss im Upstream erfolgen, da dies sowohl Debian (getestet auf Debian Stretch) als auch Ubuntu (getestet auf Ubuntu 16.04.1) für beide Distributionen betrifft.

Ich habe hier einen Fehlerbericht geöffnet: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611

steadfasterX
quelle
2
apt_pkg.config.find_b () gibt einen Booleschen Wert zurück, keinen String. "find_b (key [, default = False]) → bool Gibt den booleschen Wert zurück, der bei key gespeichert ist, oder den Wert, der durch den Standardwert des bool-Objekts angegeben wird, wenn die angeforderte Option nicht festgelegt ist." apt.alioth.debian.org/python-apt-doc/library/… Es handelt sich also nicht um einen Fehler beim unbeaufsichtigten Herunterfahren von Upgrades, da die Überprüfung auf False korrekt ist.
Brian Murray
Wie jeder, der dem obigen Link zum Launchpad-Fehlerbericht folgt, sehen wird, wurde dieses Problem nicht durch einen fehlgeschlagenen Zeichenfolgenvergleich verursacht, sondern durch einen System- Sequenzierungsfehler, der Berichten zufolge jetzt behoben wurde .
Sampablokuper
1

Um dieses Problem zu umgehen, benutze ich dieses Skript, um es zu beheben:

#!/usr/bin/env bash

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

exit

Hoffentlich wird es bald hochgestreamt.

caracal
quelle