拙劣的升级--dpkg 挂在“已启动盲文设备支持”上

nep*_*eph 7 upgrade apt dpkg hard-drive recovery-mode

严重搞砸了从 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.
Run Code Online (Sandbox Code Playgroud)

这个盲文悬挂一直困扰着我一段时间,但我终于陷入了僵局。带有错误的第一部分似乎是一个与硬盘驱动器有关的模糊错误,经过一些日志挖掘后,我似乎可以指向此 HD 上的 Windows 分区,这很好。这似乎是一个死胡同,我在网上找不到任何其他内容。

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

小智 9

我刚刚遇到了类似的情况,升级失败,随后在恢复模式下搞砸了,其中某个包的子集(即 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,直到系统似乎在rebootable状态。

至于为什么这样做(至少对我而言),我的调试过程如下:

  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. 向上几行,注意进程写入文件/var/lib/dpkg/info/apport.postinst(或类似的东西,IIRC)。
  8. less上面的文件,并看到它正在尝试重新启动引导服务。假设因为我们处于恢复模式并且 init 系统还没有运行完成,那会很尴尬。
  9. 运行pstree,看到dpkg --reconfigure -a确实 fork 到一个bash东西,然后 fork 到perl,最后systemctl,它确实重新启动了引导服务,可能会感到困惑。
  10. 请注意,postinst脚本中没有set -e,所以也许我们可以终止其中的挂起命令,这样 shell 脚本完成并dpkg继续。
  11. 打开另一个屏幕提示,运行killall systemctl,切换回来,并看到dpkg确实继续前进。伟大的。不过,它再次卡在同一个地方,在不同的包装上。
  12. killall systemctl再次运行直到dpkg退出。
  13. apt-get dist-upgrade再次运行,看到它说一切都是最新的。
  14. 交叉我的手指,然后重新启动。

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

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