apt / unattended-upgrades停止关闭

安装unattended-upgrades后,10次关机/重启中有9次会挂起,同时“启动无人值守升级关机”。 这个挂起使停机过程停顿5-10分钟。

如果我通过/etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades ,则会出现问题。

如果我在shutdown / reboot( sudo service unattended-upgrades stop )之前终止服务,问题仍然存在。

如果我删除包( sudo apt remove unattended-upgrades ),问题就不再发生了。

这发生在新安装的Ubuntu Server 16.04.1版本上(通过安装GUI安装无人值守升级或手动安装无人值守升级)

Kern.log & syslog都没有显示关闭进程(我相信因为文件系统已经卸载)

还有其他人看过或解决了这个问题吗? 疯狂试图解决它。

四处寻找更接近根本原因

问题似乎是在关机时运行的脚本。

我确定了相应的文件:

 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中的部分相关的部分 – >无人值守升级:: InstallOnShutdown

/ usr / share / unattended-upgrades / unattended-upgrade-shutdown的第120行:

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

问题:它期望关键字“False”,而在apt conf中我们应该添加“false”(精确的字符串比较)!

我能够以3种不同的方式修复/解决停止关闭:

解决方法A.

  • 在/etc/apt/apt.conf.d/50unattended-upgrades中写“False”而不是“false”

此设置升级安全,直到提供真正的修复,因为我们在此更改的文件不会被无人值守升级的更新覆盖。 问题:当根本原因得到修复时,这将导致再次停止关闭,因此我建议将其与Workaround B结合使用。

或:解决方法B.

  • 将/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service中的等待时间从默认值减少到15秒:

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

 [服务]
 TYPE =单稳
 ExecStart =在/ usr /共享/无人参与升级/无人值守升级关机
 TimeoutStartSec = 15

此设置不是升级安全的,因为我们在此更改的文件可能会被无人值守升级更新覆盖。 除此之外,它确实远离固定的东西,但它将确保您的系统在关闭时不会等待几分钟。 请记住,升级无人值守升级后,您可能需要再次设置此项!

或者:修复C(必须向上游报告)

  • 修复/ usr / share / unattended-upgrades / unattended-upgrades-shutdown以期望“false”而不是“False”

修补/ 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 @@
      # 运行
      p =无
      apt_pkg.init_config()
 - 如果apt_pkg.config.find_b(“无人值守升级:: InstallOnShutdown”,则为假):
 +如果apt_pkg.config.find_b(“无人值守升级:: 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

作为一种解决方法,我使用此脚本来修复它:

 #!/usr/bin/env bash sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown exit 

希望它很快就会被上流。

这已在systemd中修复

https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1654600

(原始报告: https : //bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611 )