Reland "cros-test: install JDK 9 for CTS"

This is a reland of commit 01df4e823e877d11b2e4c3293329ca76079d01a4

Changes compared to last patch:

* Now we symlink all commands provided by JDK under /usr/local/bin.
  `sudo java` requires that (b/306145215).

* Import latest CA certificates from the system to fix HTTPS connection.

* Installation logic is extracted into a separate shell script.

Replacing JDK 11 with 9 shrinks container size by ~90MB.

Original change's description:
> cros-test: install JDK 9 for CTS
>
> BUG=b:255224127
> TEST=docker build . ; run `which java` in the container
>
> Change-Id: I8237fd123807a0bcb90aa77832cd22214cfc43aa
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/4924184
> Tested-by: Shao-Chuan Lee <shaochuan@chromium.org>
> Reviewed-by: Derek Beckett <dbeckett@chromium.org>
> Commit-Queue: Shao-Chuan Lee <shaochuan@chromium.org>

BUG=b:255224127
TEST=docker build .
TEST=java -version; sudo java -version
TEST=java HttpsURLConnection to google.com works
TEST=cheets_STS_R.all_incremental

Change-Id: Icaf082c9610492e035a85459bbdb2c851c828c75
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/4975560
Reviewed-by: Derek Beckett <dbeckett@chromium.org>
Commit-Queue: Shao-Chuan Lee <shaochuan@chromium.org>
Tested-by: Shao-Chuan Lee <shaochuan@chromium.org>
(cherry picked from commit 4aada516f1eb3d60cfaa725ed0863537c7caeed6)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/5028553
Auto-Submit: Shao-Chuan Lee <shaochuan@chromium.org>
Commit-Queue: Derek Beckett <dbeckett@chromium.org>
diff --git a/src/chromiumos/test/dockerfiles/cros-test/Dockerfile b/src/chromiumos/test/dockerfiles/cros-test/Dockerfile
index e9c6d45..9c57ef6 100644
--- a/src/chromiumos/test/dockerfiles/cros-test/Dockerfile
+++ b/src/chromiumos/test/dockerfiles/cros-test/Dockerfile
@@ -4,7 +4,7 @@
 
 FROM python:3.8-slim-buster AS build
 
-# attr, unzip, openjdk are for CTS specifically.
+# attr, unzip are for CTS specifically.
 # squashfs-tools is for Uprev specifically.
 RUN apt-get update \
     && apt-get install -y \
@@ -19,7 +19,6 @@
       ssh \
       sudo \
       unzip \
-      openjdk-11-jdk \
       wget \
       xxd
 
@@ -85,6 +84,10 @@
 RUN wget -P /usr/local/dldir https://chromium.googlesource.com/chromiumos/platform/btsocket/+archive/refs/heads/main.tar.gz
 RUN tar -xvf /usr/local/dldir/main.tar.gz -C /usr/local/dldir && cd /usr/local/dldir && python3 setup.py build && python3 setup.py install
 
+# Install JDK 9 required for CTS.
+COPY install_jdk9.sh .
+RUN chmod 755 install_jdk9.sh && ./install_jdk9.sh && rm -f install_jdk9.sh
+
 # Cros-test binary is static across boards.
 COPY --chown=chromeos-test:chromeos-test cros-test /usr/bin/
 
diff --git a/src/chromiumos/test/dockerfiles/cros-test/install_jdk9.sh b/src/chromiumos/test/dockerfiles/cros-test/install_jdk9.sh
new file mode 100644
index 0000000..88898a0
--- /dev/null
+++ b/src/chromiumos/test/dockerfiles/cros-test/install_jdk9.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Copyright 2023 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+set -eux
+
+JDK_DIR=/usr/local/jdk
+JDK_TAR=openjdk-9.0.4_linux-x64_bin.tar.gz
+JDK_BIN=jdk-9.0.4/bin
+
+mkdir -p "${JDK_DIR}"
+cd "${JDK_DIR}"
+
+# Download and extract the tarball. Remove tarball once done to save space.
+gsutil cp "gs://chromiumos-test-assets-public/cts/${JDK_TAR}" .
+tar -xvf "${JDK_TAR}"
+rm -f "${JDK_TAR}"
+
+# Symlink everything under JDK_BIN to /usr/local/bin.
+# We cannot just include it in PATH because `sudo java` won't work (b/306145215)
+cd "${JDK_BIN}"
+for cmd in *; do
+    ln -s "${JDK_DIR}/${JDK_BIN}/${cmd}" "/usr/local/bin/${cmd}"
+done
+
+# JDK 9 ships with an obsolete cacerts store from years ago. Import latest
+# ca-certificates from the system to allow HTTPS to work.
+# (Note: this is normally done by the ca-certificates-java package, but it
+#  cannot be used with a manual JDK installation.)
+yes | for cert in /etc/ssl/certs/*.pem; do
+    keytool -importcert -trustcacerts -cacerts -storepass changeit \
+        -file "${cert}" -alias "$(basename "${cert}")"
+done