apt-get 出现问题并挂起。DPKG 随后被中断错误

apt-get 出现问题并挂起。DPKG 随后被中断错误

当我尝试在 amazon ec2 上的 ubuntu(10.10) 服务器上使用 JRE 的 update-alternatives”安装包时,apt-get 不再响应。

我已经在这个电话上等了 20 分钟,电话里出现了这样一行文字:

   update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode.

如果我尝试停止它并重新启动系统,下次我以任何方式使用 apt-get 或 aptitude 时,它​​都会给我

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

该命令没有解决问题,导致 apt-get 损坏。

答案1

修复 dpkg:http://lydonchandra.com/content/failure-installing-jre-java-runtime-env-ec2-ubuntu-10


我也遇到了同样的问题,ami-00067852 ap-southeast-1a zone。到底发生了什么?

答案2

有一种方法可以让你 dpkg 再次运行。唉,我仍然不知道如何在我的 debian 上安装 jre,因为每次尝试安装 jre 时都会发生完全相同的事情。

简而言之,您需要在终止 dpkg 和 java 进程(我的机器上的 java 进程消耗了 100% 的 CPU)后清除未完全安装的软件包。然后您的 dpkg 应该可以再次运行。

以下是详细说明。这些说明可以作为遇到同样问题的其他人的指南。

  1. 打开另一个控制台/ssh 会话,并终止 java 和 dpkg 进程(用来ps -A |grep -E "(java|dpkg)"找到它们)
  2. 运行dpkg -l |grep -v -E "^ii"- 这将列出所有未处于完美安装状态的软件包;安装不完整,或者卸载后残留配置文件(或其他变体)。您可以通过第一列中的值来区分它们。(rc = 已移除 & conf-files;iU = 安装 & 已解压)。请参阅列表标题(dpkg -l | head了解详细含义)。
  3. 运行dpkg -P package_name [package_name2] [package_name3 ...]以清除那些不完整的软件包。就我个人而言,我删除了所有列出的软件包(因为它们都与损坏的 jre 安装有关),然后 dpkg 正在运行。
  4. 或者,重新启动系统以摆脱该已停止的 Java 进程(在我终止它之后,它仍然挂在进程列表中)

更新:经过进一步研究后发现,这个错误仅与在 Amazon EC2 上运行基于 debian 的发行版 AMI 的 32 位 t1.micro 实例有关。

对我有用的解决方案(归功于 DanielDaniel- 谢谢,@Yuval),是:

  1. 停止(或暂停)正在运行的实例(在此之前您需要确保它不会因暂停而终止)
  2. 将实例类型更改为 m1.small(使用 EC2 控制台或使用 CLI)
  3. 启动实例
  4. 安装所需的 Java 包
  5. (再次)停止一个实例
  6. 将实例类型改回 t1.micro
  7. 再次启动实例

这大概只花费您运行 m1.small 实例 1 小时的费用。应该很快就能启动并运行。

更新 2:经过所有这些麻烦之后,Java 似乎根本无法在 t1.micro 实例上运行。运行任何基于 Java 的东西都会对系统产生与运行 jre/jdk 安装相同的影响。因此,为了在 t1.micro 上使用 Java,要么使用其他非基于 Debian 的发行版(但是,我也不能 100% 确定它是否能正常工作),要么将实例升级到 m1.small 或更高版本。

更新 3:截至 2011 年 8 月 11 日,问题尚未解决。请参阅https://bugs.launchpad.net/ubuntu/+source/linux-ec2/+bug/634487以获取进一步的更新。现在由亚马逊来审查提议的补丁……基本上,他们会在审查时修复它……

答案3

您是否dpkg --configure -a按照吩咐跑步了?如果是,结果如何?

更新:

然后运行:strace -s100 -f -o /tmp/debug.out dpkg --configure -a等待几分钟,然后将文件上传到某个地方。或者在此处附加最后 200 行。

更新2:

文件名为/tmp/debug.out是需要的。控制台上的输出没有变化。

答案4

我使用的是 32 位 ami-ccf405a5,它导致 jre 出现问题。然后我使用了 64 位 ami (ami-cef405a7),它解决了我的问题。

相关内容