如何使用 make-jpkg 和 fakeroot 在 Debian Wheezy 上无错误地安装 Oracle Java?

c33*_*33s 5 debian java packaging debian-wheezy

如何使用 make-jpkg 和 fakeroot 在 Debian Wheezy 上安装 Oracle Java?

在 debian wheezy 上安装 oracle java 的手册非常清晰易懂:

http://wiki.debian.org/JavaPackage https://blogs.oracle.com/marigan/entry/installation_of_the_jdk_on http://www.debian-administration.org/articles/142

  • 从oracle下载jdk-7u21-linux-x64.tar.gz
  • 安装 java 包
  • 使用 jdk-7u21-linux-x64.tar.gz 运行 make-jpkg

以 root 身份运行:

make-jpkg jdk-7u21-linux-x64.tar.gz fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

结果出现以下错误:

您是真正的 root —— 不幸的是,一些 Java 发行版具有直接操作 /etc 的安装脚本,并且可能会导致您的系统出现一些不一致。相反,您应该成为非 root 用户并运行:

fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

这不会对您的系统文件造成任何损害,并且仍然允许 Java 发行版成功解压。

正在流产。

作为普通用户运行:

make-jpkg jdk-7u21-linux-x64.tar.gz fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

导致警告/错误墙。

一些错误:

dpkg-shlibdeps: warning: Can't extract name and version from library name `libverify.so'
error: couldn't find library libxslt.so.1 needed by /tmp/make-jpkg.MxvYKHyE3L/install/usr/lib/jvm/j2sdk1.7-oracle/jre/lib/amd64/libjfxwebkit.so (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-gencontrol: warning: Depends field of package oracle-j2sdk1.7: unknown substitution variable ${shlibs:Depends}
dpkg-shlibdeps: error: cannot continue due to the errors listed above
Run Code Online (Sandbox Code Playgroud)

完整输出:没有 fakeroot http://pastie.org/private/r2llqa2pubqzh8krhbymw

与 fakeroot http://pastie.org/private/kigrgcsam9pvdazbex1fa

安装工作正常:

dpkg -i oracle-j2sdk1.7_1.7.0+update21_amd64.deb
Run Code Online (Sandbox Code Playgroud)

java版本:

java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)

可以安全地忽略该错误吗?

小智 1

首先,您可以忽略 dpkg-shlibdeps 发出的警告。这些错误应该提示您需要安装哪些包才能满足 JDK 的所有库依赖项。

发生这种情况的原因是您正在从二进制发行版(即预编译的 JDK)构建 deb 包。通常,Debian 软件包是从源代码构建的,而不是从二进制文件构建的。为此,构建包的人会将源依赖的所有库添加到某个文件 ( debian/control)。如果没有安装这些库,则无法编译源代码,因此不会生成包。

在您的例子中,整个 JDK 已经由 Oracle 编译,并且make-jpkg仅模仿从源代码构建包的过程。因此,您不需要预先安装所有必需的库。

要消除错误,您可以使用apt-file找出哪些软件包包含丢失的文件(libgtk-x11-2.0.so.0libgdk-x11-2.0.so.0libatk-1.0.so.0、 ...)并将它们全部安装。

或者您可以只使用 OpenJDK,它是为 Debian Wheezy 预先打包的,并且可以通过apt-get install openjdk-7-jdk.