升级失败——dpkg 挂在“开始盲文设备支持”

升级失败——dpkg 挂在“开始盲文设备支持”

从 14.10->15.04->15.10 升级时搞砸了。我一直在恢复模式下乱搞,自信我设法删除并重新安装了所有损坏的软件包/依赖项,但现在我遇到了这个奇怪的问题。Aptitude 无法运行,它说我需要用 dpkg 做一些事情。dpkg 可以做事情,但总是被挂断

Error getting authority: Error initializing authority: Could not connect: No such file or directory (g-io-error-quark, 1)
Error getting authority: Error initializing authority: Could not connect: No such file or directory (g-io-error-quark, 1)
[  OK  ] Started Braille Device Support.

这个盲文死机问题困扰了我一段时间,但我终于找到了解决办法。第一部分,错误,似乎是与硬盘驱动器损坏有关的模糊错误,经过一些日志挖掘后,似乎它可能指向这个硬盘上的 Windows 分区,这没问题。这似乎是一条死路,我在网上找不到任何其他信息。

我真心不想备份、重新格式化和重新安装。有人能提供线索吗?

答案1

我刚刚遇到了类似的情况,升级失败,随后在恢复模式下乱七八糟,其中某些软件包子集(即 apport)一直显示dpkg --configure -a相同的Started Braille Device Support.消息。帮助我解决这个问题的方法是:

  1. 如果您当前正在查看挂起的apt-get命令,请按Ctrl+C停止。如果这不起作用(就像我的情况一样),请按Ctrl+ Z,然后运行kill -9 %1几次以彻底终止它。然后运行rm /var/lib/dpkg/lock​​,因为您终止了通常会执行此操作的进程。
  2. 运行screen(为了获得多个提示)。
  3. Ctrl+A然后c打开不同的提示。
  4. 运行dpkg --configure -a并等待进程挂起。
  5. Ctrl+A然后a切换回另一个提示。
  6. 跑步killall systemctl
  7. Ctrl+A然后a切换回dpkg --configure -a命令。
  8. 请注意,最后一个包应该已经完成​​配置,并且dpkg已经转到下一个包并以相同的方式挂起,或者完成。
  9. 如果dpkg再次挂起,转到步骤 5。
  10. 一旦dpkg --configure -a最终完成,继续在恢复模式下进行操作,可能一直运行apt-get upgrade直到系统看起来处于可重启状态。

至于为什么这有效(至少对我来说),我的调试过程如下:

  1. apt-get upgrade挂了。运行上面的Ctrl+Zkill -9 %1操作即可返回提示。
  2. 运行dpkg --configure -a,并观察它是否挂起并显示与 相同的Started Braille Device Support.消息apt-get upgrade。但是,Ctrl+C这次起作用并返回提示。
  3. 搜索“ubuntu 已启动盲文设备支持”。从这里查找Debian 可访问性页面这 与 ... 有关brltty.
  4. 运行apt-get remove brltty,也许问题就会消失。
  5. 重新运行dpkg --configure -a并注意到它仍然挂起,但这次没有关于 的消息Started Braille Device Support。好的。
  6. 运行strace dpkg --configure -a,并观察进程是否卡在wait4(...)对子进程的调用上。
  7. 向上几行 strace,注意该过程写入文件/var/lib/dpkg/info/apport.postinst(或类似的东西,IIRC)。
  8. less上面的文件,并看到它正在尝试重新启动引导服务。假设我们处于恢复模式,并且 init 系统尚未运行完成,那么情况会很尴尬。
  9. 运行pstree,看到dpkg --reconfigure -a确实分叉为 一个bash东西,然后 又分叉为perl,最后systemctl,它确实重新启动了启动服务,您可能会感到困惑。
  10. 请注意,postinst脚本中没有该内容set -e,因此我们可以终止其中的挂起命令,以便 shell 脚本完成并dpkg继续。
  11. 打开另一个屏幕提示符,运行killall systemctl,切换回来,然后看到它dpkg确实继续前进了。太好了。但它又卡在了同一个地方,在另一个包上。
  12. 再次运行killall systemctl直到dpkg退出。
  13. 再次运行apt-get dist-upgrade,查看是否所有东西都已更新。
  14. 祈祷并重新启动。

奇迹般地,系统恢复了,到目前为止没有出现任何问题。

因此,这并不是一个完全的减少(为什么 systemctl 会在恢复模式下挂起?),也不是普遍适用的,但是这个黑客攻击和发现它的过程可能会帮助像我一样通过网络搜索到达此页面的人。

答案2

当您无法使用命令“screen”时,对以前的答案进行改进:

dpkg --configure -a & (sleep 2m; killall systemctl)

将睡眠时间更改为最短时间间隔,在此时间间隔之后,您很确定 dpkg 会卡住。(实际上,在我的情况下,我使用了 10 秒)。对我有用!

答案3

当我尝试将 15.10 升级到 16.04 时遇到了这个问题,我按照以下步骤进行了修复。

  1. 当突出显示第一个条目时按下以在命令行中启动并E进行编辑。

  2. 将光标移至行尾linux。删除quiet splash vt.handoff=7并添加single

  3. Ctrl+X启动。

  4. 运行screen(为了获得多个提示)。

  5. Ctrl+A然后C打开不同的提示。

  6. 运行dpkg --configure -a并等待完成。

  7. 重启

答案4

我设法运行该进程,主要是通过按Ctrl+Z暂停当前进程并将其发送到后台,然后输入

killall systemctl

进入 shell 终止所有systemctl进程并

fg

在前台再次继续暂停的进程。

相关内容