我遇到过各种包管理问题,导致 APT 命令失败,输出以此行结尾:
E: Sub-process /usr/bin/dpkg returned an error code (1)
偶尔可能会出现其他错误代码,例如100
这意味着 dpkg 不存在,但却1
是最常见的错误代码。
不幸的是,这个错误代码几乎没有告诉我导致错误的原因或我应该如何解决它。我看到的几乎每个包管理问题,无论其原因或解决方案如何,都会产生相同的错误!
那么,我在哪里可以找到输出的有用部分,我可以在线搜索或在 Ask Ubuntu 上询问有关问题?
答案1
Apt 记录其操作依次,就像人类一样。
只需逐行读取输出。
这是一个不太恰当的例子。逐行阅读,你会发现它讲述了一个故事:
I am going to build a tower out of five blocks...
Clearing a working surface in the kitchen.
Kitchen: Put 7 dirty dishes from the counter into the dishwasher
Kitchen: Wiped the counter clean
Opening the box of blocks.
Warning: There are only three blocks in the box.
Build: Placed the first block.
Build: Placed the second block.
Build: Placed the third block.
Build: ERROR: Cannot keep building - ran out of blocks.
Closing the box of blocks.
ERROR (summary): Failed to complete the five-block tower.
Apt 和 dpkg 日志记录功能确切地同样的方式——你逐行阅读故事。你看到包管理器开始它的冒险:准备、运行子任务、遇到非致命问题(警告)、克服逆境等。
大多数输出都是例行的,但您需要它来标记 apt 的进度。上下文是您了解正在发生的事情的方式。它确实是一个故事。
错误(1)很常见。这是概括错误代码,表示问题发生在子任务上(“一些问题建设“)。在故事中向后跳转到该特定子任务发生的位置,您将看到具体的细节(“用完了方块“)。
答案2
sudo apt update
在或sudo apt upgrade
或的完整输出中,sudo apt install -f
您应该找到一些关于dpkg
实际出错的消息。
这些行将以 开头,dpkg:
因为这是返回错误的程序的名称。这些行之前或之后的输出行通常是最有帮助的。
以下是您可能会看到的许多错误的几个示例:
Setting up install-info (6.4.90.dfsg.1-1build1) ...
/usr/sbin/update-info-dir: 3: /etc/environment: $: not found
dpkg: error processing package install-info (--configure):
subprocess installed post-installation script returned error exit status 127
这意味着安装后脚本无法运行。 Shell 使用退出状态 127 来表示“未找到命令”,因此未找到安装后脚本调用的命令。 该行之前的几行dpkg
提示了原因:文件有问题/etc/environment
(该文件应该设置环境变量,如PATH
)。
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
No apport report written because the error message indicates its a followup error from a previous failure.
dpkg: error processing package runit (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of git-daemon-run:
git-daemon-run depends on runit; however:
Package runit is not configured yet.
上述错误是由runit
软件包中的一个错误引起的,该错误要求找到已安装的 Upstart,尽管 systemd 已取代 Upstart 成为 Ubuntu 的默认初始化系统。因此,该消息failed to connect to Upstart
是最好的提示,但我们需要上下文来找出这是如何导致软件包管理问题的。
Unpacking libjline-java (from .../libjline-java_1.0-1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
trying to overwrite '/usr/share/java/jline.jar', which is also in package scala 2.9.2-400
这意味着存在包冲突,可能是由于混合了存储库版本或第三方存储库而导致的。
总结
在任何情况下,如果您看到错误Sub-process /usr/bin/dpkg returned an error code (1)
,您需要查看上面以 开头的行dpkg:
以及它们之前和之后的行,以寻找出错的有用线索。尝试搜索这些具体的错误。
如果你在这里或其他支持网站上提问,请确保你包含你运行的命令和完全的输出,而不仅仅是摘要错误消息。