apt-get upgrade 在 debianutils 上失败

apt-get upgrade 在 debianutils 上失败

使用 apt-get dist-upgrade 升级服务器上的软件时出现以下错误:

Extracting templates from packages: 100%
Preconfiguring packages ...
(Reading database ... 28575 files and directories currently installed.)
Preparing to replace debianutils 2.8.4 (using .../debianutils_2.30_i386.deb) ...
Unpacking replacement debianutils ...
dpkg: error processing /var/cache/apt/archives/debianutils_2.30_i386.deb (--unpack):
 trying to overwrite `/usr/sbin/add-shell', which is also in package passwd
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/debianutils_2.30_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

几分钟前,我在使用另一个软件包时遇到了类似的错误,因此我使用 apt-get remove 删除了该软件包,然后使用 apt-get upgrade 似乎解决了第一个小问题……直到遇到下一个问题。我无法使用 apt-get remove 删除 debianutils,因为这是一个核心软件包,如果删除,会破坏系统。

有什么指示可以指明下一步该去哪里吗?

答案1

问题是 debianutils 和 passwd 都包含相同的文件 (/usr/sbin/add-shell)。我有点不明白您是如何安装 2.8.4 的,因为它不在任何已发布的 Debian 版本中,并且是在 2004 年创建的。您是否尝试从 sarge 框升级?您应该先升级到 etch,然后再升级到 lenny。不支持在多个版本之间升级。

这可能会导致糟糕的结果,但你可以通过运行以下命令来修复此问题:

# dpkg -i --force-overwrite /var/cache/apt/archives/debianutils_2.30_i386.deb

但你可能会遇到更多问题。我认为你应该先重新考虑一下为什么要升级这么老的版本。

答案2

尝试一下 aptitude,它是新的 apt-get,但具有更好的问题解决方案。

答案3

请阅读 Stephen 对此答案的评论,关于此答案不适合新手并在尝试之前进行备份。

啊哈,我找到我要找的东西了:

dpkg -r --force all passwd
apt-get -f install

据我所知,这将删除 passwd 包,该包通常会破坏系统,因此不应掉以轻心。

然而,在这种特殊情况下,这是必要的,因为 passwd 包与另一个包冲突,可能是由于从 sarge 升级到 lenny(不应该这样做),而不是从 sarge 升级到 etch 然后升级到 lenny。在尝试初始 dist-upgrade 并失败后,sources.list 从 stable 更改为 etch,以尝试将系统 dist-upgrade 到 etch,因此进一步编辑 sources.list,将 etch 更改为 lenny,然后再次 dist-upgrade 可以解决问题。但并没有。损害已经造成。

最后的手段是尝试一些通常不应该做的事情。

我做到了。

有效。

诚然,我当时不知道,现在也不知道,到底发生了什么。我只能假设旧的冲突 passwd 包被删除了(没有删除依赖项?),导致系统不稳定,然后安装了新的 passwd 包,将不稳定的系统恢复正常。

我在一个网站上找到了解决方案,它逐字逐句地显示了我遇到的错误。有大量用户帖子感谢作者修复了这个问题,并解释说这个修复对他们有用,没有留下任何评论说这个修复没有用(好吧,这并不意味着它从未失败过)。由于我被一个损坏的、无法升级的系统困住了,所以这是最后的手段。

感谢那些指出这是一个“非常糟糕”的想法的人。然而,在这种情况下,对于这个确切的错误,我可以报告它确实解决了问题。

相关内容