通过 apt-cacher-ng 安装 oracle-java7-installer

通过 apt-cacher-ng 安装 oracle-java7-installer

我已将 oracle-java7-installer ppa 添加到我的 apt-cacher-ng 服务器和客户端。但我无法安装它。

关于如何做到这一点,您有什么想法吗?我认为它在尝试从 Oracle 下载安装时失败了。当我尝试安装它时,会发生以下情况:

admin@vgjs001:~$ sudo apt-get install oracle-java7-installer
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gsfonts gsfonts-x11 java-common libfontenc1 libxfont1 x11-common xfonts-encodings xfonts-utils
Suggested packages:
  default-jre equivs binfmt-support visualvm ttf-baekmuk ttf-unfonts ttf-unfonts-core ttf-kochi-gothic
  ttf-sazanami-gothic ttf-kochi-mincho ttf-sazanami-mincho ttf-arphic-uming firefox firefox-2 iceweasel
  mozilla-firefox iceape-browser mozilla-browser epiphany-gecko epiphany-webkit epiphany-browser galeon midbrowser
  moblin-web-browser xulrunner xulrunner-1.9 konqueror chromium-browser midori google-chrome
The following NEW packages will be installed:
  gsfonts gsfonts-x11 java-common libfontenc1 libxfont1 oracle-java7-installer x11-common xfonts-encodings
  xfonts-utils
0 upgraded, 9 newly installed, 0 to remove and 10 not upgraded.
Need to get 4 269 kB/4 347 kB of archives.
After this operation, 7 548 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 "hyperlink-1" "repo-1" gsfonts all 1:8.11+urwcyr1.0.7~pre44-4.2ubuntu1 [3 374 kB]
Get:2 "hyperlink-2" "repo-2"  libfontenc1 amd64 1:1.1.0-1 [15,4 kB]                         
Get:3 "hyperlink-3" "repo-3"  libxfont1 amd64 1:1.4.4-1 [133 kB]                            
Get:4 "hyperlink-4" "repo-4"  x11-common all 1:7.6+12ubuntu1 [57,7 kB]                      
Get:5 "hyperlink-5" "repo-5"  xfonts-encodings all 1:1.0.4-1ubuntu1 [583 kB]                
Get:6 "hyperlink-6" "repo-6"  xfonts-utils amd64 1:7.6+1 [96,4 kB]                          
Get:7 "hyperlink-7" "repo-7"  gsfonts-x11 all 0.22 [9 108 B]                                
Fetched 3 232 kB in 33s (95,1 kB/s)                                                                                   
Preconfiguring packages ...
Selecting previously unselected package java-common.
download failed
Oracle JDK 7 is NOT installed.
dpkg: error processing oracle-java7-installer (--configure):
 subprocess installed post-installation script returned error exit status 1
Setting up gsfonts (1:8.11+urwcyr1.0.7~pre44-4.2ubuntu1) ...
Setting up libfontenc1 (1:1.1.0-1) ...
Setting up libxfont1 (1:1.4.4-1) ...
Setting up x11-common (1:7.6+12ubuntu1) ...
Setting up xfonts-encodings (1:1.0.4-1ubuntu1) ...
Setting up xfonts-utils (1:7.6+1) ...
Setting up gsfonts-x11 (0.22) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Errors were encountered while processing:
 oracle-java7-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)

答案1

我正在努力解决这个问题,以下是我对 Ubuntu 14.04 Trusty Tahr 的发现。

安装程序使用apt-config来确定使用哪个代理。具体来说,如果Acquire::http::Proxy::download.oracle.com返回,DIRECT则确定是否使用 的默认代理直接下载。

具体来说,安装运行

# use apt proxy
APT_PROXIES=$(apt-config shell \
http_proxy Acquire::http::Proxy \
https_proxy Acquire::https::Proxy \
ftp_proxy Acquire::ftp::Proxy \
dl_direct Acquire::http::Proxy::download.oracle.com \
)

后来

if [ "$dl_direct" = "DIRECT" ]; then
    unset http_proxy
    unset https_proxy
    unset ftp_proxy
fi

如果您使用以下 apt 配置,则安装程序将直接下载:

Acquire::http::Proxy "http://my.proxy.com:3142";
Acquire::http::Proxy {
        download.oracle.com DIRECT;
};

虽然这种方法可行,但是有点烦人,因为下载需要很长时间,而且这有点违背了代理的目的。

我发现安装程序会检查一个debconf变量来检查是否使用本地文件。检查的属性是,oracle-java8-installer/local并且它是一个string

具体来说,安装程序运行:

db_get oracle-java8-installer/local
if [ -d "$RET" -a -f "$RET"/$FILENAME ]; then

    echo "Installing from local file $RET/$FILENAME"
    cp -f -p "$RET"/$FILENAME ${FILENAME}_TEMP
    mv -f ${FILENAME}_TEMP $FILENAME
else # no local file

因此,如果您已下载 JDK 并位于目录中,/jdk/dir则需要在运行安装程序之前运行以下命令:

sudo debconf-set-selections <<< 'debconf oracle-java8-installer/local string /jdk/dir/'

/注意目录的尾部——这是必需的。

答案2

我遇到了同样的问题,但设法找到了解决方法。主要问题是 apt-cacher-ng不是转发任何自定义 HTTP 标头,如 Oracle 安装程序 (wget) 用来接受 Oracle 许可证一样。

我对我的文件做了以下更改acng.conf。我PfilePattern按照 GomoX 的建议启用并扩展了该条款:

PfilePattern = .*(\.d?deb|\.rpm|\.drpm|\.dsc|\.tar(\.gz|\.bz2|\.lzma|\.xz)(\.gpg|\?AuthParam=.*)?|\.diff(\.gz|\.bz2|\.lzma|\.xz)|\.jigdo|\.template|changelog|copyright|\.udeb|\.debdelta|\.diff/.*\.gz|(Devel)?ReleaseAnnouncement(\?.*)?|[a-f0-9]+-(susedata|updateinfo|primary|deltainfo).xml.gz|fonts/(final/)?[a-z]+32.exe(\?download.*)?|/dists/.*/installer-[^/]+/[0-9][^/]+/images/.*)$

并补充道(这是重点部分):

RequestAppendix: Cookie: oraclelicense=a

这将导致 acng 在每个请求中发送一个 HTTP cookie,但至少会让 oracle 二进制文件通过并成功完成安装。使用一些本地 Docker 镜像进行了测试,它们几乎立即下载并安装 Java!

仅供参考:我已经为 acng 创建了一个错误报告(#314773,不幸的是未公开),因此希望它能在即将发布的版本中得到修复......

编辑1:进一步的测试表明它可以在 Debian Jessie 上运行,但目前还不能在 Ubuntu Utopic 上运行(14:10) ...

编辑2:它现在也可以在 Ubuntu Utopic 中运行(问题是我使用了没有ca-certificates安装该包的 Docker 镜像)。

答案3

apt-cacher-ng 的 URL 正则表达式非常严格,只允许下载某些类型的包。Oracle 的 Java 包与它不匹配。解决方案是修改定义正则表达式的配置。

特别是包的 URL 类似于yada-yada.tar.gz?AuthParam=abcdacbd_123123123123,所以我们必须进行相应的调整。

基本上:

  1. /etc/apt-cacher-ng/acng.conf,取消注释以PfilePattern
  2. 修改它以替换\.tar\.gz\.tar\.gz(\?AuthParam=.*)?

作为参考,我的配置文件中的整行是:

PfilePattern = .*(\.deb|\.rpm|\.dsc|\.tar\.gz\.gpg|\.tar\.gz(\?AuthParam=.*)?|\.diff\.gz|\.diff\.bz2|\.jigdo|\.template|changelog|版权|\.udeb|\.diff/.*\.gz|vmlinuz|initrd\.gz|(Devel)?ReleaseAnnouncement(\\?.*)?)$

答案4

首先,您需要删除 openjdk,然后从终端运行以下命令:

sudo apt-get purge openjdk*

如果您从任何其他 PPA 安装了 Java 7,并且在使用 Java 时遇到问题,那么您必须在安装此处提到的 PPA 之前执行以下步骤:

sudo rm /var/lib/dpkg/info/oracle-java7-installer*
sudo apt-get purge oracle-java7-installer*
sudo rm /etc/apt/sources.list.d/*java*
sudo apt-get update

在 ubuntu 13.04/12.10/12.04 中安装 oracle java 7 打开终端并运行以下命令:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

您可以在仪表板中搜索 java 来检查 java 版本。

相关内容