apt / nienadzorowane aktualizacje blokują się

14

Po unattended-upgradeszainstalowaniu 9 na 10 wyłączeń / restartów zawiesza się podczas „rozpoczynania zamykania instalacji nienadzorowanej”. To zawieszenie opóźnia proces wyłączania na 5-10 minut.

Jeśli wyłączę nienadzorowane aktualizacje za pośrednictwem /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, pojawią się problemy.

Jeśli zakończę usługę przed zamknięciem / ponownym uruchomieniem ( sudo service unattended-upgrades stop), problem nadal występuje.

Jeśli usunę pakiet ( sudo apt remove unattended-upgrades), problem już nie występuje.

Dzieje się tak w świeżo zainstalowanej wersji Ubuntu Server 16.04.1(obie unattended-upgradesinstalowane za pomocą instalacyjnego interfejsu GUI lub ręcznej instalacji nienadzorowanych aktualizacji)

Oba Kern.log & syslognie pokazują procesu zamykania (uważam, ponieważ systemy plików już odmontowały)

Czy ktoś jeszcze widział lub naprawił ten problem? Oszalałam, próbując go rozwiązać.

garullon245136
źródło
Nie można odtworzyć w testowej maszynie wirtualnej 16.04.1. Wyłączenie nie jest tutaj opóźnione.
user535733
Czy może być oparty na sprzęcie? Nie jestem całkowicie pewien, co dzieje się unattended-upgradespodczas zamykania systemu.
garullon245136
Zastanawiam się, dlaczego uu zawsze działa w momencie zamknięcia: uu nie jest demonem; to tylko skrypt, który uruchamia się krótko raz dziennie, a następnie kończy.
user535733
Wygląda na to, że proces zamykania próbuje uruchomić uu na etapie, w którym wszystkie systemy plików są demontowane. Nie wydaje się, aby kontrolowane przez łącza /etc/rc6.d/ lub /etc/rc0.d/ Usunąłem wszystkie linki, a proces nadal działa podczas zamykania.
garullon245136
2
Poszukaj w /etc/apt/apt/conf.d/50unattended-upgrades opcji „uruchom uu przy zamykaniu” (około linii 25). Upewnij się, że jest to „fałsz” lub komentarz.
user535733,

Odpowiedzi:

14

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

steadfasterX
źródło
2
apt_pkg.config.find_b () zwraca wartość logiczną, a nie ciąg znaków. „find_b (key [, default = False]) → bool Zwraca wartość logiczną zapisaną w kluczu lub wartość podaną przez wartość domyślną obiektu bool, jeśli żądana opcja nie jest ustawiona.” apt.alioth.debian.org/python-apt-doc/library/… Więc nie jest to błąd w wyłączeniu aktualizacji bez nadzoru, ponieważ sprawdzanie Fałsz jest prawidłowe.
Brian Murray
Jak zobaczy każdy, kto podąży za powyższym linkiem do raportu o błędach Launchpada, ten problem nie był w rzeczywistości spowodowany błędnym porównywaniem ciągów, ale zamiast tego był skutkiem błędu systemowego sekwencjonowania, który podobno został teraz naprawiony .
sampablokuper,
1

Jako obejście tego problemu używam tego skryptu, aby go naprawić:

#!/usr/bin/env bash

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

exit

Mam nadzieję, że wkrótce zostanie upstream.

karakal
źródło