Bug 1376306 - Bootstrap and upload java_home.tar.xz; bump Java to 1.8. r=sebastian,dustin
MozReview-Commit-ID: 3EOsrOp924f
--- a/build/moz.configure/java.configure
+++ b/build/moz.configure/java.configure
@@ -50,13 +50,13 @@ javac = check_java_tool('javac')
@depends(javac)
@checking('for javac version')
@imports('subprocess')
def javac_version(javac):
try:
output = subprocess.check_output([javac, '-version'],
stderr=subprocess.STDOUT).rstrip()
version = Version(output.split(' ')[-1])
- if version < '1.7':
- die('javac 1.7 or higher is required (found %s)' % version)
+ if version < '1.8':
+ die('javac 1.8 or higher is required (found %s)' % version)
return version
except subprocess.CalledProcessError as e:
die('Failed to get javac version: %s', e.output)
--- a/mobile/android/config/tooltool-manifests/android-gradle-dependencies/releng.manifest
+++ b/mobile/android/config/tooltool-manifests/android-gradle-dependencies/releng.manifest
@@ -1,26 +1,10 @@
[
{
- "version": "rustc 1.19.0 (0ade33941 2017-07-17) repack",
- "size": 151322128,
- "digest": "1d6d6e8bbf7535a4f1c8f1292562e30c868bfd3ac323992fc287be09f7fa3167c2f9e01dc98143967983e30488fe3ecaebff530ba4ec9113033d60af936c4f4d",
- "algorithm": "sha512",
- "filename": "rustc.tar.xz",
- "unpack": true
- },
- {
- "size": 30899096,
- "visibility": "public",
- "digest": "ac9f5f95d11580d3dbeff87e80a585fe4d324b270dabb91b1165686acab47d99fa6651074ab0be09420239a5d6af38bb2c539506962a7b44e0ed4d080bba2953",
- "algorithm": "sha512",
- "unpack": true,
- "filename": "java_home-1.7.0-openjdk-1.7.0.85.x86_64.tar.xz"
- },
- {
"algorithm": "sha512",
"visibility": "public",
"filename": "dotgradle-online.tar.xz",
"unpack": true,
"digest": "0979eb1dcd9349a9c3f51f24747bb6e19e803226d7150fcf6846889ae24a8df925d03edfac038a5330822703c51130d4f5757d9f4caff7bcb2b6f71858c024d3",
"size": 512
}
]
--- a/taskcluster/ci/android-stuff/kind.yml
+++ b/taskcluster/ci/android-stuff/kind.yml
@@ -47,16 +47,19 @@ jobs:
TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-gradle-dependencies/releng.manifest"
artifacts:
- name: public/build
path: /home/worker/artifacts/
type: directory
- name: private/android-sdk
path: /home/worker/private/android-sdk
type: directory
+ - name: private/java_home
+ path: /home/worker/private/java_home
+ type: directory
caches:
- name: tooltool-cache
mount-point: /home/worker/tooltool-cache
type: persistent
relengapi-proxy: true
command:
- "/bin/bash"
- "-c"
--- a/taskcluster/docker/android-gradle-build/Dockerfile
+++ b/taskcluster/docker/android-gradle-build/Dockerfile
@@ -41,31 +41,31 @@ RUN chmod +x /builds/tooltool.py
# END ../desktop-build/Dockerfile
# Reset user/workdir from parent image so we can install software.
WORKDIR /
USER root
# Update base.
-RUN yum upgrade -y
+RUN rpm --rebuilddb && yum upgrade -y
-# Install JDK and Sonatype Nexus. Cribbed directly from
+# Install Sonatype Nexus. Cribbed directly from
# https://github.com/sonatype/docker-nexus/blob/fffd2c61b2368292040910c055cf690c8e76a272/oss/Dockerfile.
# Install the screen package here to use with xvfb.
# Move installation to base centos6-build image once Bug 1272629 is fixed
-RUN yum install -y \
+# tzdata-java is symlinked from the JRE: see https://bugzilla.redhat.com/show_bug.cgi?id=1130800
+RUN rpm --rebuilddb && yum install -y \
createrepo \
curl \
- java-1.7.0-openjdk-devel \
- java-1.7.0-openjdk \
screen \
sudo \
tar \
+ tzdata-java \
unzip \
wget \
zip \
&& yum clean all
ENV NEXUS_VERSION 2.12.0-01
ENV NEXUS_SHA1SUM 1a9aaad8414baffe0a2fd46eed1f41b85f4049e6
--- a/taskcluster/docker/android-gradle-build/bin/after-checkout.sh
+++ b/taskcluster/docker/android-gradle-build/bin/after-checkout.sh
@@ -1,10 +1,16 @@
#!/bin/bash -vex
set -x -e
: WORKSPACE ${WORKSPACE:=/workspace}
set -v
+# Populate /home/worker/workspace/build/src/java_home.
+cp -R /workspace/java/usr/lib/jvm/java_home /home/worker/workspace/build/src
+
+export JAVA_HOME=/home/worker/workspace/build/src/java_home
+export PATH=$PATH:$JAVA_HOME/bin
+
# Populate /home/worker/.mozbuild/android-sdk-linux.
-python2.7 $WORKSPACE/build/src/python/mozboot/mozboot/android.py --artifact-mode --no-interactive
+python2.7 /home/worker/workspace/build/src/python/mozboot/mozboot/android.py --artifact-mode --no-interactive
--- a/taskcluster/docker/android-gradle-build/bin/after.sh
+++ b/taskcluster/docker/android-gradle-build/bin/after.sh
@@ -12,16 +12,23 @@ pushd ${WORKSPACE}
cp -R /home/worker/.mozbuild/android-sdk-linux android-sdk-linux
tar cJf android-sdk-linux.tar.xz android-sdk-linux
# We can't redistribute the Android SDK publicly.
mkdir -p /home/worker/private/android-sdk
mv android-sdk-linux.tar.xz /home/worker/private/android-sdk
+cp -R /home/worker/workspace/build/src/java_home java_home
+tar cJf java_home.tar.xz java_home
+
+# We can't redistribute Java publicly.
+mkdir -p /home/worker/private/java_home
+mv java_home.tar.xz /home/worker/private/java_home
+
cp -R /workspace/nexus/storage/jcenter jcentral
tar cJf jcentral.tar.xz jcentral
# The Gradle wrapper will have downloaded and verified the hash of exactly one
# Gradle distribution. It will be located in $GRADLE_USER_HOME, like
# ~/.gradle/wrapper/dists/gradle-2.7-all/$PROJECT_HASH/gradle-2.7-all.zip. We
# want to remove the version from the internal directory for use via tooltool in
# a mozconfig.
@@ -36,11 +43,12 @@ mv gradle-dist.tar.xz /home/worker/artif
popd
# Bug 1245170: at some point in the future, we'll be able to upload
# things directly to tooltool.
# pushd /home/worker/artifacts
# /build/tooltool.py add --visibility=public jcentral.tar.xz
# /build/tooltool.py add --visibility=public gradle-dist.tar.xz
# /build/tooltool.py add --visibility=internal android-sdk-linux.tar.xz
+# /build/tooltool.py add --visibility=internal java_home.tar.xz
# /build/tooltool.py upload -v --url=http://relengapi/tooltool/ \
# --message="No message - Gradle and jcentral archives uploaded from taskcluster."
# popd
--- a/taskcluster/docker/android-gradle-build/bin/before.sh
+++ b/taskcluster/docker/android-gradle-build/bin/before.sh
@@ -2,20 +2,26 @@
set -x -e
: WORKSPACE ${WORKSPACE:=/workspace}
: GRADLE_VERSION ${GRADLE_VERSION:=2.7}
set -v
+# Populate $WORKSPACE/java/urs/lib/jvm/java_home. $topsrcdir hasn't
+# been checked out yet, so we can't put this directly into
+# $topsrcdir/java_home.
+. $HOME/bin/repackage-jdk-centos.sh
+
+export JAVA_HOME=$WORKSPACE/java/usr/lib/jvm/java_home
+export PATH=$PATH:$JAVA_HOME/bin
+
# Frowned upon, but simplest.
RUN_AS_USER=root NEXUS_WORK=${WORKSPACE}/nexus /opt/sonatype/nexus/bin/nexus restart
# Wait "a while" for Nexus to actually start. Don't fail if this fails.
wget --quiet --retry-connrefused --waitretry=2 --tries=100 \
http://localhost:8081/nexus/service/local/status || true
rm -rf status
# Verify Nexus has actually started. Fail if this fails.
curl --fail --silent --location http://localhost:8081/nexus/service/local/status | grep '<state>STARTED</state>'
-
-export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
rename from taskcluster/scripts/misc/repackage-jdk-centos.sh
rename to taskcluster/docker/android-gradle-build/bin/repackage-jdk-centos.sh
--- a/taskcluster/scripts/misc/repackage-jdk-centos.sh
+++ b/taskcluster/docker/android-gradle-build/bin/repackage-jdk-centos.sh
@@ -1,22 +1,24 @@
#! /bin/bash
set -e -x
-mkdir -p artifacts
-pushd build
+: WORKSPACE ${WORKSPACE:=/workspace}
-rm -rf root && mkdir root && cd root
+set -v
+
+mkdir -p $WORKSPACE/java
+pushd $WORKSPACE/java
# change these variables when updating java version
-mirror_url_base="http://mirror.centos.org/centos/6.7/updates/x86_64/Packages"
-openjdk=java-1.7.0-openjdk-1.7.0.85-2.6.1.3.el6_7.x86_64.rpm
-openjdk_devel=java-1.7.0-openjdk-devel-1.7.0.85-2.6.1.3.el6_7.x86_64.rpm
-jvm_openjdk_dir=java-1.7.0-openjdk-1.7.0.85.x86_64
+mirror_url_base="http://mirror.centos.org/centos/6/os/x86_64/Packages"
+openjdk=java-1.8.0-openjdk-headless-1.8.0.121-1.b13.el6.x86_64.rpm
+openjdk_devel=java-1.8.0-openjdk-devel-1.8.0.121-1.b13.el6.x86_64.rpm
+jvm_openjdk_dir=java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64
# grab the rpm and unpack it
wget ${mirror_url_base}/${openjdk}
wget ${mirror_url_base}/${openjdk_devel}
rpm2cpio $openjdk | cpio -ivd
rpm2cpio $openjdk_devel | cpio -ivd
cd usr/lib/jvm
@@ -26,20 +28,26 @@ mv $jvm_openjdk_dir java_home
# absolute. We could use tar's --dereference option, but there's a subtle
# difference between making the symlink absolute and using --dereference.
# Making the symlink absolute lets the consuming system set the cacerts; using
# --dereference takes the producing system's cacerts and sets them in stone. We
# prefer the flexibility of the former.
rm java_home/jre/lib/security/cacerts
ln -s /etc/pki/java/cacerts java_home/jre/lib/security/cacerts
+# tzdb.dat is an absolute symlink, which might not work when we
+# repackage. Copy the underlying timezone database. Copying the
+# target file from the toolchain producing system avoids requiring the
+# consuming system to have java-tzdb installed, which would bake in a
+# subtle dependency that has been addressed in modern versions of
+# CentOS. See https://bugzilla.redhat.com/show_bug.cgi?id=1130800 for
+# discussion.
+rm java_home/jre/lib/tzdb.dat
+cp /usr/share/javazi-1.8/tzdb.dat java_home/jre/lib/tzdb.dat
+
# document version this is based on
echo "Built from ${mirror_url_Base}
${openjdk}
${openjdk_devel}
Run through rpm2cpio | cpio, and /usr/lib/jvm/${jvm_openjdk_dir} renamed to 'java_home'." > java_home/VERSION
-# tarball the unpacked rpm and put it in the taskcluster upload artifacts dir
-tar -Jvcf java_home-${jvm_openjdk_dir}.tar.xz java_home
popd
-
-mv build/root/usr/lib/jvm/java_home-${jvm_openjdk_dir}.tar.xz artifacts