Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 23 additions & 11 deletions dev-support/hbase_docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,24 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl --location --fail --silent --show-error --output /tmp/maven.tar.gz "${MAVEN_URL}" && \
echo "${MAVEN_SHA512} */tmp/maven.tar.gz" | sha512sum -c -

FROM base_image AS openjdk8_download_image
ENV OPENJDK8_URL 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u352-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u352b08.tar.gz'
ENV OPENJDK8_SHA256 '1633bd7590cb1cd72f5a1378ae8294451028b274d798e2a4ac672059a2f00fee'
# JDK pins mirror dev-support/docker/Dockerfile; keep them in sync.
FROM base_image AS jdk_download_image
ARG JDK_VERSION=17
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl --location --fail --silent --show-error --output /tmp/adoptopenjdk8.tar.gz "${OPENJDK8_URL}" && \
echo "${OPENJDK8_SHA256} */tmp/adoptopenjdk8.tar.gz" | sha256sum -c -
RUN case "${JDK_VERSION}" in \
8) \
JDK_URL='https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u412-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz'; \
JDK_SHA256='b9884a96f78543276a6399c3eb8c2fd8a80e6b432ea50e87d3d12d495d1d2808' ;; \
17) \
JDK_URL='https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz'; \
JDK_SHA256='aa7fb6bb342319d227a838af5c363bfa1b4a670c209372f9e6585bd79da6220c' ;; \
21) \
JDK_URL='https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_x64_linux_hotspot_21.0.12.1_1.tar.gz'; \
JDK_SHA256='ce79869e1307ed8ee1e2baa86a412b1eb5b75d10a01006d788a6f968bcfaee94' ;; \
*) echo "Unsupported JDK_VERSION: ${JDK_VERSION} (supported: 8, 17, 21)" >&2; exit 1 ;; \
esac && \
curl --location --fail --silent --show-error --output /tmp/jdk.tar.gz "${JDK_URL}" && \
echo "${JDK_SHA256} */tmp/jdk.tar.gz" | sha256sum -c -

FROM base_image
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
Expand All @@ -60,15 +72,15 @@ RUN tar xzf /tmp/maven.tar.gz -C /opt && \
rm /tmp/maven.tar.gz

# hadolint ignore=DL3010
COPY --from=openjdk8_download_image /tmp/adoptopenjdk8.tar.gz /tmp/adoptopenjdk8.tar.gz
COPY --from=jdk_download_image /tmp/jdk.tar.gz /tmp/jdk.tar.gz
ARG JDK_VERSION=17
RUN mkdir -p /usr/lib/jvm && \
tar xzf /tmp/adoptopenjdk8.tar.gz -C /usr/lib/jvm && \
ln -s "/usr/lib/jvm/$(basename "$(tar -tf /tmp/adoptopenjdk8.tar.gz | head -n1)")" /usr/lib/jvm/java-8-adoptopenjdk && \
ln -s /usr/lib/jvm/java-8-adoptopenjdk /usr/lib/jvm/java-8 && \
rm /tmp/adoptopenjdk8.tar.gz
tar xzf /tmp/jdk.tar.gz -C /usr/lib/jvm && \
ln -s "/usr/lib/jvm/$(basename "$(tar -tf /tmp/jdk.tar.gz | head -n1)")" "/usr/lib/jvm/java-${JDK_VERSION}" && \
rm /tmp/jdk.tar.gz

ENV MAVEN_HOME '/opt/maven'
ENV JAVA_HOME '/usr/lib/jvm/java-8'
ENV JAVA_HOME="/usr/lib/jvm/java-${JDK_VERSION}"
ENV PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
ENV PATH "${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}"

Expand Down
2 changes: 1 addition & 1 deletion dev-support/hbase_docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ After build:
- HBase source code at `/root/hbase/`
- Built HBase binaries at `/root/hbase-bin/`
- Maven 3.8.6 at `/opt/maven/`
- Java 8 (Temurin JDK)
- Temurin JDK 8, 17 or 21 (selected with `--jdk`; default set per branch)
- All Maven dependencies cached

### Build Context Control
Expand Down
47 changes: 46 additions & 1 deletion dev-support/hbase_docker/build-hbase.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,16 @@ set -e
# ./build-hbase.sh --tarball hbase-2.6.7.tar.gz # Build from tarball
# ./build-hbase.sh --source /path/to/hbase # Build from local dir
# ./build-hbase.sh --source . # Build from current repo
# ./build-hbase.sh --tag branch-2.6 --jdk 8 # Choose the JDK (8, 17 or 21)
# ./build-hbase.sh --help # Show help

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
LOG_FILE="${LOG_FILE:-/tmp/hbase-docker-build.log}"
DEFAULT_IMAGE_NAME="hbase_local"
# JDK used when --jdk is not given. Set per branch: 17 on master, 8 on branch-2.
DEFAULT_JDK="17"
SUPPORTED_JDKS="8 17 21"
JDK_VERSION="$DEFAULT_JDK"

# On Apple Silicon (arm64), use m1/Dockerfile which is tuned for Rosetta emulation.
# Both cases build linux/amd64 images; m1/Dockerfile just handles arm64 host quirks.
Expand Down Expand Up @@ -96,7 +101,7 @@ check_prerequisites() {
# Help
#=============================================================================
show_help() {
cat <<'EOF'
cat <<EOF
╔════════════════════════════════════════╗
║ HBase Docker Build Script ║
╚════════════════════════════════════════╝
Expand Down Expand Up @@ -128,7 +133,12 @@ EXAMPLES:
# Custom image name
./build-hbase.sh --tag branch-2.4 my_hbase_image

# Build with a specific JDK
./build-hbase.sh --tag branch-2.6 --jdk 8
./build-hbase.sh --source . --jdk 21

OPTIONS:
--jdk VERSION JDK to build with: 8, 17 or 21 (default: $DEFAULT_JDK for this branch)
--help, -h Show this help

ENVIRONMENT:
Expand All @@ -150,6 +160,7 @@ build_from_tag() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Branch/Tag: $branch_or_tag"
echo "Image name: $image_name"
echo "JDK: $JDK_VERSION"
echo "Log file: $LOG_FILE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
Expand All @@ -163,6 +174,7 @@ build_from_tag() {
docker build --platform "$PLATFORM" \
-f "$DOCKERFILE" \
--build-arg INPUT_MODE=tag \
--build-arg JDK_VERSION="$JDK_VERSION" \
--build-arg BRANCH_OR_TAG="$branch_or_tag" \
-t "$image_name" \
"$SCRIPT_DIR" 2>&1 | tee "$LOG_FILE"
Expand All @@ -179,6 +191,7 @@ build_from_tarball() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Tarball: $tarball_path"
echo "Image name: $image_name"
echo "JDK: $JDK_VERSION"
echo "Log file: $LOG_FILE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
Expand All @@ -203,6 +216,7 @@ build_from_tarball() {
docker build --platform "$PLATFORM" \
-f "$DOCKERFILE" \
--build-arg INPUT_MODE=tarball \
--build-arg JDK_VERSION="$JDK_VERSION" \
-t "$image_name" \
"$SCRIPT_DIR" 2>&1 | tee "$LOG_FILE"

Expand Down Expand Up @@ -230,6 +244,7 @@ build_from_source() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Source: $source_path"
echo "Image name: $image_name"
echo "JDK: $JDK_VERSION"
echo "Log file: $LOG_FILE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
Expand Down Expand Up @@ -268,6 +283,7 @@ DOCKERIGNORE

docker build --platform "$PLATFORM" \
--build-arg INPUT_MODE=source-dir \
--build-arg JDK_VERSION="$JDK_VERSION" \
-f "$temp_dockerfile/Dockerfile" \
-t "$image_name" \
"$source_path" 2>&1 | tee "$LOG_FILE"
Expand Down Expand Up @@ -336,6 +352,35 @@ main() {
local value=""
local image_name="$DEFAULT_IMAGE_NAME"

# Extract --jdk (position-independent); the rest stays positional
local args=()
while [ $# -gt 0 ]; do
case "$1" in
--jdk)
if [ $# -lt 2 ] || [ -z "$2" ]; then
echo "❌ ERROR: --jdk requires a value (supported: $SUPPORTED_JDKS)"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we remove cross checkmark from echo?

exit 1
fi
JDK_VERSION="$2"
shift 2
;;
--jdk=*)
JDK_VERSION="${1#--jdk=}"
shift
;;
*)
args+=("$1")
shift
;;
esac
done
set -- "${args[@]+"${args[@]}"}"

if [[ " $SUPPORTED_JDKS " != *" $JDK_VERSION "* ]]; then
echo "❌ ERROR: Unsupported JDK version: $JDK_VERSION (supported: $SUPPORTED_JDKS)"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

exit 1
fi

# Parse arguments
case "${1:-}" in
--help|-h)
Expand Down
34 changes: 23 additions & 11 deletions dev-support/hbase_docker/m1/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,24 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl --location --fail --silent --show-error --output /tmp/maven.tar.gz "${MAVEN_URL}" && \
echo "${MAVEN_SHA512} */tmp/maven.tar.gz" | sha512sum -c -

FROM base_image AS openjdk8_download_image
ENV OPENJDK8_URL 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u352-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u352b08.tar.gz'
ENV OPENJDK8_SHA256 '1633bd7590cb1cd72f5a1378ae8294451028b274d798e2a4ac672059a2f00fee'
# JDK pins mirror dev-support/docker/Dockerfile; keep them in sync.
FROM base_image AS jdk_download_image
ARG JDK_VERSION=17
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl --location --fail --silent --show-error --output /tmp/adoptopenjdk8.tar.gz "${OPENJDK8_URL}" && \
echo "${OPENJDK8_SHA256} */tmp/adoptopenjdk8.tar.gz" | sha256sum -c -
RUN case "${JDK_VERSION}" in \
8) \
JDK_URL='https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u412-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz'; \
JDK_SHA256='b9884a96f78543276a6399c3eb8c2fd8a80e6b432ea50e87d3d12d495d1d2808' ;; \
17) \
JDK_URL='https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz'; \
JDK_SHA256='aa7fb6bb342319d227a838af5c363bfa1b4a670c209372f9e6585bd79da6220c' ;; \
21) \
JDK_URL='https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_x64_linux_hotspot_21.0.12.1_1.tar.gz'; \
JDK_SHA256='ce79869e1307ed8ee1e2baa86a412b1eb5b75d10a01006d788a6f968bcfaee94' ;; \
*) echo "Unsupported JDK_VERSION: ${JDK_VERSION} (supported: 8, 17, 21)" >&2; exit 1 ;; \
esac && \
curl --location --fail --silent --show-error --output /tmp/jdk.tar.gz "${JDK_URL}" && \
echo "${JDK_SHA256} */tmp/jdk.tar.gz" | sha256sum -c -

FROM base_image
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
Expand All @@ -60,15 +72,15 @@ RUN tar xzf /tmp/maven.tar.gz -C /opt && \
rm /tmp/maven.tar.gz

# hadolint ignore=DL3010
COPY --from=openjdk8_download_image /tmp/adoptopenjdk8.tar.gz /tmp/adoptopenjdk8.tar.gz
COPY --from=jdk_download_image /tmp/jdk.tar.gz /tmp/jdk.tar.gz
ARG JDK_VERSION=17
RUN mkdir -p /usr/lib/jvm && \
tar xzf /tmp/adoptopenjdk8.tar.gz -C /usr/lib/jvm && \
ln -s "/usr/lib/jvm/$(basename "$(tar -tf /tmp/adoptopenjdk8.tar.gz | head -n1)")" /usr/lib/jvm/java-8-adoptopenjdk && \
ln -s /usr/lib/jvm/java-8-adoptopenjdk /usr/lib/jvm/java-8 && \
rm /tmp/adoptopenjdk8.tar.gz
tar xzf /tmp/jdk.tar.gz -C /usr/lib/jvm && \
ln -s "/usr/lib/jvm/$(basename "$(tar -tf /tmp/jdk.tar.gz | head -n1)")" "/usr/lib/jvm/java-${JDK_VERSION}" && \
rm /tmp/jdk.tar.gz

ENV MAVEN_HOME '/opt/maven'
ENV JAVA_HOME '/usr/lib/jvm/java-8'
ENV JAVA_HOME="/usr/lib/jvm/java-${JDK_VERSION}"
ENV PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
ENV PATH "${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}"

Expand Down
Loading