apt-get问题并挂起。 之后DPKG被打断

当我尝试在我的ubuntu(10.10)服务器上安装amazon ec2的更新替代品“的JRE时,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。

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


我也有同样的问题,ami-00067852 ap-southeast-1a zone。 究竟是怎么回事?

有一种方法可以让您的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" – 这将列出所有未处于完全安装状态的软件包; 要么是不完整的安装,要么是在卸载之后还有其他configuration文件(或其他一些变体)。 你可以通过第一栏的价值区分他们。 (rc =删除&conf-files; iU =安装&解压缩)。 请参阅列表标题( dpkg -l | head以了解详细含义)。
  3. 运行dpkg -P package_name [package_name2] [package_name3 ...]以清除那些不完整的软件包。 就个人而言,我已经删除了所有列出的软件包(因为它们都与破损的jre安装有关),并且之后dpkg正在运行。
  4. 可选地,重新启动你的系统来摆脱那个已经停止的java进程(在我杀死它之后它会一直挂在进程列表中)

更新:经过一些更多的研究后,发现这个bug与Amazon EC2上运行基于debian-based-distro AMI的32位t1.micro实例完全相关。

为我工作的解决scheme( 记入DanielDaniel – 谢谢,@Yuval)是:

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

这将花费你可能只花费1小时运行m1.small实例的成本。 应该立即启动并运行。

更新2 :在经历了所有的麻烦之后,看起来Java根本不会在t1.micro实例上工作。 运行任何基于Java的任何东西都会对运行jre / jdk的安装有相同的效果。 所以,为了在t1.micro上使用java,要么使用一些其他基于非debian的发行版(但是,我不是100%肯定它可以工作),或者将实例升级到m1.small或更好。

更新3 :截至2011年11月11日,问题尚未解决。 有关更多更新,请参见https://bugs.launchpad.net/ubuntu/+source/linux-ec2/+bug/634487 。 现在是由亚马逊审查提议的补丁…基本上,他们会修复它,当他们做…

你有没有跑过dpkg --configure -a ? 如果是,你会得到什么结果?

更新:

然后运行: strace -s100 -f -o /tmp/debug.out dpkg --configure -a等待几分钟,然后将file upload到某处。 或者附上这里说的最后200行。

UPDATE2:

名为/tmp/debug.out的文件是必需的。 控制台上的输出不会更改。

我有32位ami-ccf405a5导致我与jre问题。 我用了64位的ami(ami-cef405a7),解决了我的问题。