1
0
mirror of https://github.com/goharbor/harbor.git synced 2026-10-23 10:08:57 +03:00

fix: build valkey from source to support arm64 (#23282)

fix: support arm64 valkey build while preserving amd64 package path

- Keep amd64 behavior unchanged with tdnf install of valkey
- Isolate source-build fallback to arm64 only
- Verify source tarball with SHA256
- Move valkey version/checksum definition to root Makefile and pass as build args

Signed-off-by: ranimandepudi <ranichowdary.mandepudi@arm.com>
This commit is contained in:
Mandepudi Rani Chowdary
2026-06-02 03:17:10 -05:00
committed by GitHub
parent 10cc96b9b3
commit eb944bb199
3 changed files with 54 additions and 4 deletions

View File

@@ -133,6 +133,10 @@ PREPARE_VERSION_NAME=versions
REGISTRYVERSION=v2.8.3-patch-redis
TRIVYVERSION=v0.69.3
TRIVYADAPTERVERSION=v0.35.1
# VALKEYVERSION and VALKEYSHA256 are only used for the arm64 source build.
# On amd64 the Photon tdnf package version is used directly.
VALKEYVERSION=9.0.3
VALKEYSHA256=e220f4b0143292ee6ea6d705aa40d45a0c8a77759b3e94c201cb5c25dbdca42f
NODEBUILDIMAGE=node:16.18.0
# version of registry for pulling the source code
@@ -432,6 +436,7 @@ build:
make -f $(MAKEFILEPATH_PHOTON)/Makefile $(BUILDTARGET) -e DEVFLAG=$(DEVFLAG) -e GOBUILDIMAGE=$(GOBUILDIMAGE) -e NODEBUILDIMAGE=$(NODEBUILDIMAGE) \
-e REGISTRYVERSION=$(REGISTRYVERSION) -e REGISTRY_SRC_TAG=$(REGISTRY_SRC_TAG) -e DISTRIBUTION_SRC=$(DISTRIBUTION_SRC)\
-e TRIVYVERSION=$(TRIVYVERSION) -e TRIVYADAPTERVERSION=$(TRIVYADAPTERVERSION) \
-e VALKEYVERSION=$(VALKEYVERSION) -e VALKEYSHA256=$(VALKEYSHA256) \
-e VERSIONTAG=$(VERSIONTAG) \
-e DOCKERNETWORK=$(DOCKERNETWORK) \
-e BUILDREG=$(BUILDREG) -e BUILDTRIVYADP=$(BUILDTRIVYADP) \
@@ -457,7 +462,11 @@ build_base_docker:
@for name in $(BUILDBASETARGET); do \
echo $$name ; \
sleep 30 ; \
$(DOCKERBUILD) --pull --no-cache -f $(MAKEFILEPATH_PHOTON)/$$name/Dockerfile.base -t $(BASEIMAGENAMESPACE)/harbor-$$name-base:$(BASEIMAGETAG) --label base-build-date=$(date +"%Y%m%d") . ; \
valkey_args="" ; \
if [ "$$name" = "valkey" ]; then \
valkey_args="--build-arg VALKEY_VERSION=$(VALKEYVERSION) --build-arg VALKEY_SHA256=$(VALKEYSHA256)" ; \
fi ; \
$(DOCKERBUILD) --pull --no-cache -f $(MAKEFILEPATH_PHOTON)/$$name/Dockerfile.base $$valkey_args -t $(BASEIMAGENAMESPACE)/harbor-$$name-base:$(BASEIMAGETAG) --label base-build-date=$(date +"%Y%m%d") . ; \
if [ "$(PUSHBASEIMAGE)" != "false" ] ; then \
$(PUSHSCRIPTPATH)/$(PUSHSCRIPTNAME) $(BASEIMAGENAMESPACE)/harbor-$$name-base:$(BASEIMAGETAG) $(REGISTRYUSER) $(REGISTRYPASSWORD) || exit 1; \
fi ; \

View File

@@ -202,7 +202,7 @@ _build_registryctl:
@echo "Done."
_build_valkey:
@$(call _build_base,$(VALKEY),$(DOCKERFILEPATH_VALKEY))
@$(call _build_base,$(VALKEY),$(DOCKERFILEPATH_VALKEY),--build-arg VALKEY_VERSION=$(VALKEYVERSION) --build-arg VALKEY_SHA256=$(VALKEYSHA256))
@echo "building valkey container for photon..."
@$(DOCKERBUILD_WITH_PULL_PARA) --build-arg harbor_base_image_version=$(BASEIMAGETAG) --build-arg harbor_base_namespace=$(BASEIMAGENAMESPACE) -f $(DOCKERFILEPATH_VALKEY)/$(DOCKERFILENAME_VALKEY) -t $(DOCKERIMAGENAME_VALKEY):$(VERSIONTAG) .
@echo "Done."
@@ -236,7 +236,7 @@ define _build_base
else \
echo "No docker credentials provided, please be aware of privileges to access docker hub!" ; \
fi ;\
$(DOCKERBUILD) -f $(2)/Dockerfile.base --build-arg pip_index_url=$(PIP_INDEX_URL) -t $(BASEIMAGENAMESPACE)/harbor-$(1)-base:$(BASEIMAGETAG) --label base-build-date=$(TIMESTAMP) . ;\
$(DOCKERBUILD) -f $(2)/Dockerfile.base --build-arg pip_index_url=$(PIP_INDEX_URL) $(3) -t $(BASEIMAGENAMESPACE)/harbor-$(1)-base:$(BASEIMAGETAG) --label base-build-date=$(TIMESTAMP) . ;\
if [ "$(PUSHBASEIMAGE)" = "true" ] ; then \
$(PUSHSCRIPTPATH)/$(PUSHSCRIPTNAME) $(BASEIMAGENAMESPACE)/harbor-$(1)-base:$(BASEIMAGETAG) $(REGISTRYUSER) $(REGISTRYPASSWORD) docker.io $(PULL_BASE_FROM_DOCKERHUB) || exit 1; \
fi ; \

View File

@@ -1,6 +1,47 @@
FROM goharbor/photon:5.0
# TARGETARCH is auto-populated by BuildKit via --platform; default ensures
# graceful fallback to amd64 if built without explicit platform flag.
ARG TARGETARCH=amd64
# VALKEY_VERSION and VALKEY_SHA256 are only used by the arm64 source-build path.
# On amd64 the Photon tdnf package is installed directly (version managed by Photon).
ARG VALKEY_VERSION
ARG VALKEY_SHA256
# ---- amd64: use tdnf package (unchanged from original) ----
FROM goharbor/photon:5.0 AS amd64-base
RUN tdnf install -y shadow >> /dev/null \
&& groupadd -g 999 valkey \
&& useradd -u 999 -g 999 -c "Valkey Database Server" -d /var/lib/redis -s /sbin/nologin -m valkey
RUN tdnf install -y valkey && tdnf clean all
# ---- arm64: build from source (Photon OS has no valkey package for aarch64) ----
FROM goharbor/photon:5.0 AS arm64-builder
ARG VALKEY_VERSION
ARG VALKEY_SHA256
RUN tdnf install -y gcc make coreutils gawk glibc-devel linux-api-headers \
binutils tar gzip ca-certificates curl openssl-devel >> /dev/null \
&& tdnf clean all
WORKDIR /tmp
RUN curl -fsSL -o valkey.tar.gz \
"https://github.com/valkey-io/valkey/archive/refs/tags/${VALKEY_VERSION}.tar.gz" \
&& echo "${VALKEY_SHA256} valkey.tar.gz" | sha256sum -c - \
&& tar -xzf valkey.tar.gz \
&& cd "valkey-${VALKEY_VERSION}" \
&& make -j"$(nproc)" BUILD_TLS=yes \
&& make PREFIX=/usr/local install
RUN strip /usr/local/bin/valkey-* || true
FROM goharbor/photon:5.0 AS arm64-base
RUN tdnf install -y shadow openssl >> /dev/null \
&& groupadd -g 999 valkey \
&& useradd -u 999 -g 999 -c "Valkey Database Server" -d /var/lib/redis -s /sbin/nologin -m valkey \
&& tdnf clean all
COPY --from=arm64-builder /usr/local/bin/valkey-server /usr/local/bin/valkey-server
COPY --from=arm64-builder /usr/local/bin/valkey-cli /usr/local/bin/valkey-cli
COPY --from=arm64-builder /usr/local/bin/valkey-check-aof /usr/local/bin/valkey-check-aof
COPY --from=arm64-builder /usr/local/bin/valkey-check-rdb /usr/local/bin/valkey-check-rdb
COPY --from=arm64-builder /usr/local/bin/valkey-benchmark /usr/local/bin/valkey-benchmark
RUN ln -sf /usr/local/bin/valkey-server /usr/local/bin/redis-server \
&& ln -sf /usr/local/bin/valkey-cli /usr/local/bin/redis-cli
# ---- Select final image based on target architecture ----
FROM ${TARGETARCH}-base