缓解 unattended-upgrade 不终止的问题

2020-07-11T21:08:00

unattended-upgrade 是 Debian 和基于 Debian 的发行版的自动软件升级工具,用于后台静默安装安全更新,而默认设置下不安装功能更新。

博主的电脑关机时不时卡在 unattended-upgr ,而每次使用 Magic Sysrq 强制关机也不是长久之计,于是先分析 unattended-upgrade 在干什么:

strace 附加到 unattended-upgr 上,发现它并没有和我的预测一样阻塞在某个 IO 操作上,而是不断试图访问并不存在的 apt 源文件,在不断尝试后也没有停止运行,而是继续运行,直到阻止关机。

权宜解决办法( workaround )

解决不了问题?那就解决制造问题的程序。sudo dpkg-reconfigure unattended-upgrade直接关闭自动更新,从此这个问题不再出现。

分析

根据 Debian Wiki , 用unattended-upgrade -d 可以手动运行此程序以进行调试。
apt update 后(解决没有软件包数据库文件的问题)

ignoring ver libc6-dev=2.31-0experimental2 with priority < 0
ignoring ver libaudit1=1:3.0~alpha9-1 with priority < 0
ignoring ver g++=4:10-1 with priority < 0
ignoring ver cpp=4:10-1 with priority < 0
ignoring ver libaudit-common=1:3.0~alpha9-1 with priority < 0
ignoring ver libgnutls30=3.6.14-3 with priority < 0
ignoring ver libc-dev-bin=2.31-0experimental2 with priority < 0
ignoring ver gcc=4:10-1 with priority < 0
ignoring ver libc6=2.31-0experimental2 with priority < 0
adjusting candidate version: libpolkit-gobject-1-0=0.105-26
ignoring ver perl-base=5.32.0-2 with priority < 0
ignoring ver dbus=1.13.18-1 with priority < 0
adjusting candidate version: dbus=1.12.20-1
ignoring ver mariadb-common=1:10.4.13-1~exp1 with priority < 0
ignoring ver libselinux1=3.1~rc1-1 with priority < 0
ignoring ver libdbus-1-3=1.13.18-1 with priority < 0
adjusting candidate version: libdbus-1-3=1.12.20-1
ignoring ver libmariadb3=1:10.4.13-1~exp1 with priority < 0
ignoring ver libsepol1=3.1~rc1-1 with priority < 0
package akonadi-contacts-data upgradable but fails to be marked for upgrade (E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.)
sanity check failed for: set()
falling back to adjusting acct's dependencies recursively

原来是存在依赖问题,而这个依赖问题很可能是长期不更新导致的,因为博主的电脑有段时间确实在吃灰……虽然 apt 使用更智能的方式处理包依赖关系,但是也架不住长期不更新。

注:

  • 各 Linux 发行版的更新功能基本上远好于 Windows 10 —— 没有“智能”的自动重启,更新完全掌控在用户手上;不需要重启(除了内核更新,当然,用了 livepatch 除外);可以知道在处理哪一个软件包而不是被一个百分比和“这需要一点时间”(其实是几个小时,尤其是当你没有备用电脑的时候)敷衍
  • 即便如此,非常不建议在桌面环境下进行全系统更新。更新时,你会发现桌面的应用图标消失,甚至应用窗口直接蒸发。如果终端窗口蒸发了,更新会直接终止——最好在 tty 上更新,实在不行也要用 tmux 之类的终端复用器——即使终端被关了,里面的进程仍旧正常运行,而不会被 SIGHUP 中止。
  • 对滚动更新的发行版(例如 Arch Linux,Debian 的 stable,testing,unstable,experimental 版本):避免长期不更新。
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »