如何删除/安装未完全安装的软件包?

Bij*_*jak 90 package-management aptitude dpkg

bsnes几天我去安装,不知什么原因,安装失败。现在,我无法更新、安装新软件包或执行任何 apt-get 命令,因为它们都试图处理这个损坏的软件包并失败。尝试安装一个新的软件包也注定了它的命运。

我得到的错误是:

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

我一直在谷歌和这里的 Ask Ubuntu 上搜索,但还没有找到可行的解决方案。

通常建议的修复是运行以下命令:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)

然而这不起作用。apt-get 命令都失败,并出现与上述相同的错误,而 dpkg 命令也无济于事。他们经常建议通过 Synaptic 或命令行清除它的另一件事,这也失败了。

Ski*_*rou 89

对于高级用户,使用风险自负。

根据以下错误消息:

subprocess installed post-installation script returned error exit status 127
Run Code Online (Sandbox Code Playgroud)

您可能想要编辑/var/lib/dpkg/info/[package_name].postinst和评论所有内容(或者更好的是,尝试理解它并确定问题),然后再试apt-get一次。

请注意,尽管在此特定问题中,该消息与“安装后”有关,但它可能会提到例如“预删除”或“删除后”(在这种情况下,要编辑的文件的扩展名应该是.prerm.postrm) .

  • 谢谢堆。我不得不修复`/var/lib/dpkg/info/[package_name].prerm`,但你的帖子给了我正确的方向。不过对于高级用户来说,这绝对是**有风险的**! (3认同)
  • 其实这是最好的方法。重新安装 `dpkg` 并不总是有帮助。 (2认同)
  • 最好的答案。谢谢!更正 `.prerm` 和 `.postrm` 文件可以解决问题。 (2认同)
  • 终于有用的东西了。删除该包的 .prerm 文件也是一种选择。它也适用于 `.prerm` 文件等,最终几乎相当于 `rpm -e --noscripts` :) (2认同)

Reg*_*ser 52

除了您已经发布的那些命令之外,几乎没有其他有用的命令。

与往常一样,您可以使用dpkg来安装、删除和清除软件包。

  • dpkg 和 apt-get --force-yes 命令都返回与我之前遇到的相同的错误。自动清理不会返回错误,但似乎也没有对两个损坏的包执行任何操作。 (2认同)

小智 32

您可以删除此/var/lib/dpkg/info/路径中的包文件并更新源。

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

然后,重新安装您的软件包 sudo apt-get install [package_name]

文件

  • 实际上你最好使用`sudo rm /var/lib/dpkg/info/[pakege_name].*`。否则,您还将删除以相同名称开头的软件包。无论如何,谢谢你,这是唯一对我有用的解决方案 (5认同)

Bij*_*jak 30

因此,经过更多的谷歌搜索并再次仔细阅读错误消息后,似乎dpkg需要重新安装。

sudo apt-get install --reinstall dpkg
Run Code Online (Sandbox Code Playgroud)

提示这是问题所在(如果有人搜索并看到此问题)是update-alternatives: not found错误消息中的问题。重新安装 dpkg 后,其他软件包就会自动正常安装。

  • 为什么到目前为止唯一正确(并被接受)的答案在列表中的票数不到最高答案的 1/3?+1 (4认同)
  • 根据问题的标题,这可能是来这里的任何人的_最不可能的解决方案。但是有很多原因可以解决这个问题,因此_将会_提出很多“这对我有用”的解决方案。 (4认同)

小智 16

如果一切都失败了。我所做的是首先将目录更改为:

cd /var/lib/dpkg/info
Run Code Online (Sandbox Code Playgroud)

然后我删除了所有内容.postinst

sudo rm *.postinst
Run Code Online (Sandbox Code Playgroud)

然后更新存储库

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

然后当我这样做时一切都恢复正常:

sudo apt-get --force-yes install openjdk-7-jre-headless
Run Code Online (Sandbox Code Playgroud)

  • 这**删除所有安装后脚本**,而不仅仅是受影响软件包的脚本。在我看来有点过于热心了。-1 (10认同)

sai*_*895 5

如果所有其他方法都失败了,您可以通过dpkg. 运行sudo dpkg -P bsnes应该清除bsnes

  • `dpkg:错误处理包libcuda1-340(--purge):包处于非常糟糕的不一致状态;您应该在尝试删除之前重新安装它` (2认同)