apt / unattended-upgrades останавливает остановку


13

При unattended-upgradesустановке 9 из 10 отключений / перезагрузок зависают при «запуске автоматического отключения обновлений». Это зависание останавливает процесс выключения на 5-10 минут.

Если я отключаю необслуживаемые обновления через /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, возникают проблемы.

Если я прерываю службу до завершения работы / перезагрузки ( sudo service unattended-upgrades stop), проблема все равно возникает.

Если я удаляю пакет ( sudo apt remove unattended-upgrades), проблема больше не возникает.

Это происходит в только что установленной версии Ubuntu Server 16.04.1(обе unattended-upgradesустанавливаются с помощью графического интерфейса установки или установки автоматических обновлений вручную)

Оба Kern.log & syslogне показывают процесс завершения работы (я полагаю, потому что файловые системы уже размонтированы)

Кто-нибудь еще видел или исправил эту проблему? Схожу с ума, пытаясь устранить неисправность.


Невозможно воспроизвести в тестовой виртуальной машине 16.04.1. Отключение здесь не задерживается.
— user535733

Может ли это быть аппаратное обеспечение? Я не совсем уверен, что происходит unattended-upgradesво время выключения.
— garullon245136

Мне интересно, почему uu всегда работает во время выключения: uu не демон; это просто скрипт, который запускается на короткое время один раз в день, а затем завершается.
— user535733

Кажется, что процесс выключения пытается запустить uu на этапе, когда все файловые системы отключаются. Это не контролируется ссылками /etc/rc6.d/ или /etc/rc0.d/, как Я удалил все ссылки, и процесс все еще работает во время завершения работы.
— garullon245136

1
Найдите в /etc/apt/apt/conf.d/50unattended-upgrades опцию «запускать при выключении» (около строки 25). Убедитесь, что это «ложь» или закомментировано.
— user535733

Ответы:


14

Оглядываясь вокруг, чтобы приблизиться к основной причине

Проблема, кажется, в скрипте, работающем при выключении.

Я идентифицировал соответствующий файл с:

find /etc/systemd -name *unattended*

который дает мне связанный скрипт systemd:

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

который затем сказал мне скрипт, выполняемый при выключении:

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

Расследование глубже, чтобы найти причину

в этом сценарии есть раздел в строке 120, относящийся к разделу в /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown

Строка 120 / usr / share / unattended-upgrades / unattended-upgrade-shutdown:

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

[Обслуживание]
Тип = OneShot
ExecStart = / USR / доли / необслуживаемое-обновление / без присмотра-обновления-выключение
TimeoutStartSec = 15

Этот параметр НЕ является безопасным для обновления, поскольку изменяемый нами файл может быть перезаписан обновлением unattended-upgrades. Кроме того, это очень далеко от исправления чего-либо, но это гарантирует, что ваша система не будет ждать несколько минут при завершении работы. Имейте в виду, что после обновления необслуживаемых обновлений вам, возможно, придется установить это снова!

ИЛИ: исправление С (должно быть сообщено вверх по течению)

  • исправьте / usr / share / unattended-upgrades / unattended-upgrades-shutdown для ожидания «ложь» вместо «ложь»

исправления / 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 @@
     # запустить его
     р = нет
     apt_pkg.init_config ()
- if 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 («запуск автоматических обновлений в режиме выключения»)

Вывод

Только последнее - настоящее решение. оба других варианта - просто обходные пути, пока не будет реализовано реальное исправление.

Это должно быть сделано в апстриме, и это влияет как на Debian (протестирован на Debian Stretch), так и на Ubuntu (протестирован на Ubuntu 16.04.1) для обоих дистрибутивов.

Я открыл отчет об ошибке здесь: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611


2
apt_pkg.config.find_b () возвращает логическое значение, а не строку. "find_b (key [, default = False]) → bool Возвращает логическое значение, сохраненное в ключе, или значение, заданное объектом bool по умолчанию, если запрошенная опция не установлена." apt.alioth.debian.org/python-apt-doc/library/… Таким образом, это не ошибка автоматического выключения-обновления, так как проверка на False верна.
— Брайан Мюррей

Как увидит любой, кто следует по вышеуказанной ссылке на отчет об ошибке Launchpad, эта проблема на самом деле не была вызвана ошибочным сравнением строк, а вместо этого была связана с ошибкой системного секвенирования, которая, как сообщается, теперь исправлена .
— Сампаблокупер

1

В качестве обходного пути я использую этот сценарий, чтобы исправить это:

#!/usr/bin/env bash

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

exit

Надеюсь, это скоро будет передано.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.