使用 Firefox 排除 Oracle Java 7 故障

使用 Firefox 排除 Oracle Java 7 故障

我运行带有最新 Firefox 的 Ubuntu 13.04,并且从oracle-java7-installerPPA包中安装了 Oracle Java 7 ppa:webupd8team/java

Java 在 Firefox 中不起作用。

当我从命令行启动 Firefox,并打开一个带有 Java 的网页时,Java 小程序不起作用,并且在终端中 Firefox 打印:

$ firefox

(process:28565): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
java.io.IOException: Cannot run program "/usr/lib/jvm/java-7-oracle/jre/bin/java": error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    at sun.plugin2.jvm.JVMLauncher.start(Unknown Source)
    at sun.plugin2.main.server.JVMInstance.startImpl(Unknown Source)
(and some 20-30 lines more)

(我猜这里可以忽略 GLib 行。)

另外,当我关闭包含 Java 小程序的选项卡时,Firefox 会冻结,我必须将其关闭。

但是,权限看起来没有问题:

$ ls -l /usr/lib/jvm/java-7-oracle/jre/bin/java
-rwxr-xr-x 1 root root 5746 Jul 22 17:35 /usr/lib/jvm/java-7-oracle/jre/bin/java

那么,这里可能出了什么问题?下一步该检查什么?

答案1

我在运行 Ubuntu Precise 时遇到了完全相同的问题。我在服务器上运行 Proxmox,他们的 java 查看器需要 Oracle java,并且无法与 icedtea 配合使用。我从http://www.webupd8.org,但无法使其与 Firefox 配合使用。我发现 Java 在 Opera 浏览器中确实可以工作。

当我看到您的消息并看到权限问题时,我想啊哈!apparmor。果然,kern.log 显示:

/var/log/kern.log

Aug  1 09:54:50 laptop kernel: [42653.495082] type=1400 audit(1375368890.811:81): apparmor="DENIED" operation="exec" parent=22495 profile="/usr/lib/firefox/firefox{,*[^s][^h]}" name="/usr/lib/jvm/java-7-oracle/jre/bin/java" pid=22507 comm="plugin-containe" requested_mask="x" denied_mask="x" fsuid=1000 ouid=0
Aug  1 09:56:38 laptop kernel: [42761.283499] type=1400 audit(1375368998.599:82): apparmor="DENIED" operation="exec" parent=22812 profile="/usr/lib/firefox/firefox{,*[^s][^h]}" name="/usr/lib/jvm/java-7-oracle/jre/bin/java" pid=22824 comm="plugin-containe" requested_mask="x" denied_mask="x" fsuid=1000 ouid=0
Aug  1 10:11:51 laptop kernel: [43674.436828] type=1400 audit(1375369911.752:83): apparmor="DENIED" operation="exec" parent=23255 profile="/usr/lib/firefox/firefox{,*[^s][^h]}" name="/usr/lib/jvm/java-7-oracle/jre/bin/java" pid=23267 comm="plugin-containe" requested_mask="x" denied_mask="x" fsuid=1000 ouid=0

我将 apparmor 设置为投诉模式

sudo aa-complain /usr/bin/firefox
sudo service apparmor reload

它开始发挥作用

然后当我将 apparmor 重置为强制模式时

sudo aa-enforce /usr/bin/firefox
sudo service apparmor reload

它意外地继续工作。我怀疑 apparmor 重新加载清除了一个缓存文件,而我在寻找原因的过程中进行了多次重启,但都没有清除缓存文件。

补充:玩了一段时间后,我发现以抱怨模式启动的进程即使在配置文件切换到强制模式后仍然处于抱怨模式。

在 /etc/apparmor.d/abstractions/ubuntu-browsers.d/java 中更新 Firefox(或其他浏览器)的 apparmor 配置文件

# Under Java plugin, add two lines:
  /usr/lib/jvm/java-*-oracle/jre/bin/java{,_vm} cx -> browser_java,
  /usr/lib/jvm/java-*-oracle/jre/lib/*/libnp*.so cx -> browser_java,
# before the lines:
  /usr/lib/jvm/java-*-sun-1.*/jre/bin/java{,_vm} cx -> browser_java,
  /usr/lib/jvm/java-*-sun-1.*/jre/lib/*/libnp*.so cx -> browser_java,

# In the browser_java profile, add two lines:
  /usr/lib/jvm/java-*-oracle/jre/bin/java{,_vm} ix,
  /usr/lib/jvm/java-*-oracle/jre/lib/i386/client/classes.jsa m,
# before the lines:
  /usr/lib/jvm/java-*-sun-1.*/jre/bin/java{,_vm} ix,
  /usr/lib/jvm/java-*-sun-1.*/jre/lib/i386/client/classes.jsa m,

然后重新启动 apparmor:

sudo service apparmor restart

在测试时,我发现每次更改配置文件后都需要重新加载或重新启动 apparmor,然后重新启动浏览器。有好几次我误以为更改有效,但几个小时后它就失败了。在运行 Java 浏览器测试时,我仍然收到一些 apparmor 消息,但似乎没有一个能阻止它工作。

相关内容