Rozglądając się, aby zbliżyć się do pierwotnej przyczyny
Problemem wydaje się być skrypt działający podczas zamykania systemu.
Zidentyfikowałem odpowiedni plik za pomocą:
find /etc/systemd -name *unattended*
co daje mi powiązany skrypt systemowy:
/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
który następnie powiedział mi skrypt wykonywany przy zamykaniu:
/usr/share/unattended-upgrades/unattended-upgrade-shutdown
Badanie głębsze, aby znaleźć podstawową przyczynę
w tym skrypcie znajduje się sekcja w wierszu 120 związana z sekcją w /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown
Wiersz 120 polecenia / usr / share / unattended-upgrade / unattended-upgrade-shutdown:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
Problem: oczekuje słowa kluczowego „False”, podczas gdy w apt conf powinniśmy dodać „false” (dokładne porównanie ciągów)!
Rozwiązanie
Byłem w stanie naprawić / obejść wyłączenie przeciągania na 3 różne sposoby:
Obejście A
- napisz „False” zamiast „false” w /etc/apt/apt.conf.d/50unattended-upgrades
To ustawienie jest bezpieczne do uaktualnienia, dopóki nie zostanie dostarczona prawdziwa poprawka, ponieważ plik, który tu zmienimy, nie zostanie nadpisany przez aktualizację nienadzorowanych aktualizacji. Problem: Gdy podstawowa przyczyna zostanie naprawiona, spowoduje to ponowne wyłączenie utknięcia, więc sugeruję połączenie tego z obejściem B.
LUB: Obejście B
- skróć czas oczekiwania w /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service z domyślnie do 15 sekund:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[Usługa]
Wpisz = oneshot
ExecStart = / usr / share / unattended-upgrade / unattended-upgrade-shutdown
TimeoutStartSec = 15
To ustawienie NIE jest bezpieczne do uaktualnienia, ponieważ plik, który tu zmieniamy, może zostać zastąpiony przez aktualizację nienadzorowanych aktualizacji. Poza tym jest naprawdę daleki od naprawienia czegoś, ale zapewni, że twój system nie będzie czekał kilka minut po wyłączeniu. Pamiętaj, że po aktualizacji nienadzorowanej może być konieczne jej ponowne ustawienie!
LUB: Poprawka C (należy zgłosić wcześniej)
- napraw / usr / share / unattended-upgrade / unattended-upgrade-shutdown, aby oczekiwać „false” zamiast „false”
łatanie / 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 @@
# Uruchom
p = brak
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”
logowanie.debug („uruchamianie nienadzorowanej aktualizacji w trybie zamykania”)
Wniosek
tbh tylko ostatnia jest prawdziwym rozwiązaniem. obie pozostałe opcje są tylko obejściami, dopóki nie zostanie zaimplementowana prawdziwa poprawka.
Należy to zrobić wcześniej, ponieważ wpływa to zarówno na Debiana (testowany na Debian Stretch), jak i Ubuntu (testowany na Ubuntu 16.04.1) dla obu dystrybucji.
Otworzyłem raport o błędzie tutaj: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611