Озирнувшись, щоб наблизитися до першопричини
Здається, проблема полягає в тому, що сценарій працює при відключенні.
Я ідентифікував відповідний файл із:
find /etc/systemd -name *unattended*
який дає мені відповідний системний сценарій:
/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
який потім сказав мені сценарій, виконаний при відключенні:
/usr/share/unattended-upgrades/unattended-upgrade-shutdown
Дослідження глибше, щоб знайти першопричину
у цьому сценарії є розділ у рядку 120, пов’язаний із розділом у /etc/apt/apt.conf.d/50unattended-upgrades -> Unttended-Upgrade :: InstallOnShutdown
Рядок 120 / usr / share / без нагляду-оновлень / без нагляду-оновлення-відключення:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
Проблема: він очікує, що ключове слово "False" в той час як в apt conf слід додати "false" (точне порівняння рядків)!
Рішення
Мені вдалося виправити / подолати зупинку відключення 3 різними способами:
Обхід A
- напишіть "False" замість "false" у /etc/apt/apt.conf.d/50unattended-upgrades
Цей параметр є безпечним оновленням, поки не буде надано справжнє виправлення, оскільки файл, який ми тут змінюємо, не буде перезаписаний оновленням без нагляду оновлень. Проблема: Коли першопричина буде виправлена, це призведе до повторного відключення, тому я пропоную поєднати це з обхідною задачею B.
АБО: Обхід B
- зменшити час очікування в /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service за замовчуванням до 15 секунд:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[Сервіс]
Тип = onehot
ExecStart = / usr / share / unattended-upgrade / unattended-upgrade-shutdown
TimeoutStartSec = 15
Цей параметр НЕ безпечний для оновлення, оскільки файл, який ми тут змінюємо, може бути перезаписаний оновленням без нагляду оновлень. Крім того, це дійсно далеко від того, щоб щось виправити, але це забезпечить, що ваша система не буде чекати декількох хвилин при відключенні. Майте на увазі, що після оновлення без нагляду оновлень вам, можливо, доведеться встановити це знову!
АБО: Виправлення C (потрібно повідомити вище)
- fix / usr / share / unattended-upgrade / unattended-upgrade-shutdown, щоб очікувати "false" замість "False"
виправлення / usr / share / без нагляду-оновлення / unattended-upgrade-shutdown:
--- / tmp / без нагляду-оновлення-відключення 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 @@
# запустити його
p = Немає
apt_pkg.init_config ()
- якщо apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", False):
+ якщо apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", false):
env = copy.copy (os.environ)
env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
logging.debug ("запуск без нагляду оновлень у режимі відключення")
Висновок
tbh лише останній - справжнє виправлення. обидва інші варіанти - лише обхідні шляхи, поки не буде реалізовано справжнє виправлення.
Це потрібно зробити вгору за течією, оскільки це впливає і на Debian (перевірено на Debian Stretch), і на Ubuntu (тестується на Ubuntu 16.04.1) для обох дистрибутивів.
Я відкрив тут звіт про помилки: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611