From 4f9425559c2c039575d9c38313884cd9825a8517 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 5 Aug 2025 16:26:32 +0000 Subject: [PATCH 1/2] Add ARM64 support to Makefiles, Docker base image, and Compose definitions Signed-off-by: Ubuntu --- Makefile | 30 +++++++++++++++++-- make/photon/Makefile | 5 +++- make/photon/db/Dockerfile.base | 13 ++++++-- .../docker_compose/docker-compose.yml.jinja | 11 +++++++ make/photon/prepare/utils/docker_compose.py | 12 +++++++- 5 files changed, 63 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index cc0d399945..0faf604c8e 100644 --- a/Makefile +++ b/Makefile @@ -72,12 +72,13 @@ TOOLSPATH=$(BUILDPATH)/tools CORE_PATH=$(BUILDPATH)/src/core PORTAL_PATH=$(BUILDPATH)/src/portal CHECKENVCMD=checkenv.sh +ARCH ?= $(shell uname -m) # parameters REGISTRYSERVER= REGISTRYPROJECTNAME=goharbor DEVFLAG=true -TRIVYFLAG=false +TRIVYFLAG=true EXPORTERFLAG=false HTTPPROXY= BUILDREG=true @@ -122,8 +123,31 @@ DISTRIBUTION_SRC=https://github.com/goharbor/distribution.git # dependency binaries REGISTRYURL=https://storage.googleapis.com/harbor-builds/bin/registry/release-${REGISTRYVERSION}/registry -TRIVY_DOWNLOAD_URL=https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION:v%=%)_Linux-64bit.tar.gz -TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz + +ifeq ($(ARCH), arm64) + + + # Arm64-specific version and source values + TRIVYVERSION=v0.58.2 + TRIVYADAPTERVERSION=v0.32.3 + REGISTRY_SRC_TAG=v2.8.3 + DISTRIBUTION_SRC=https://github.com/distribution/distribution.git + TRIVY_DOWNLOAD_URL=https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION)_Linux-ARM64.tar.gz + TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz + + +else + + # Default (x86_64 or others) versions + TRIVYVERSION=v0.61.0 + TRIVYADAPTERVERSION=v0.33.0-rc.2 + REGISTRY_SRC_TAG=release/2.8 + DISTRIBUTION_SRC=https://github.com/goharbor/distribution.git + TRIVY_DOWNLOAD_URL=https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION:v%=%)_Linux-64bit.tar.gz + TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz + +endif + define VERSIONS_FOR_PREPARE VERSION_TAG: $(VERSIONTAG) diff --git a/make/photon/Makefile b/make/photon/Makefile index 23684c6ff4..65d7243581 100644 --- a/make/photon/Makefile +++ b/make/photon/Makefile @@ -15,10 +15,13 @@ SEDCMD=$(shell which sed) WGET=$(shell which wget) CURL=$(shell which curl) TIMESTAMP=$(shell date +"%Y%m%d") +ARCH ?= $(shell uname -m) +PLATFORM = $(if $(filter $(ARCH),aarch64 arm64),linux/arm64,linux/amd64) + # docker parameters DOCKERCMD=$(shell which docker) -DOCKERBUILD=$(DOCKERCMD) build --no-cache --network=$(DOCKERNETWORK) +DOCKERBUILD=$(DOCKERCMD) build --no-cache --network=$(DOCKERNETWORK) --platform=$(PLATFORM) DOCKERBUILD_WITH_PULL_PARA=$(DOCKERBUILD) --pull=$(PULL_BASE_FROM_DOCKERHUB) DOCKERRMIMAGE=$(DOCKERCMD) rmi DOCKERIMAGES=$(DOCKERCMD) images diff --git a/make/photon/db/Dockerfile.base b/make/photon/db/Dockerfile.base index 6c816cc817..6ad0e3195f 100644 --- a/make/photon/db/Dockerfile.base +++ b/make/photon/db/Dockerfile.base @@ -6,9 +6,16 @@ RUN tdnf install -y shadow >> /dev/null \ && groupadd -r postgres --gid=999 \ && useradd -m -r -g postgres --uid=999 postgres -RUN tdnf install -y postgresql14-server >> /dev/null -RUN tdnf install -y gzip postgresql15-server findutils bc >> /dev/null \ - && mkdir -p /docker-entrypoint-initdb.d \ +# Detect architecture and install different packages accordingly +ARG TARGETARCH +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + tdnf install -y postgresql14-server gzip postgresql15-server findutils bc >> /dev/null; \ + else \ + tdnf install -y postgresql15-server gzip findutils bc >> /dev/null; \ + fi + + +RUN mkdir -p /docker-entrypoint-initdb.d \ && mkdir -p /run/postgresql \ && chown -R postgres:postgres /run/postgresql \ && chmod 2777 /run/postgresql \ diff --git a/make/photon/prepare/templates/docker_compose/docker-compose.yml.jinja b/make/photon/prepare/templates/docker_compose/docker-compose.yml.jinja index 0ccf1ace52..36b9aec44d 100644 --- a/make/photon/prepare/templates/docker_compose/docker-compose.yml.jinja +++ b/make/photon/prepare/templates/docker_compose/docker-compose.yml.jinja @@ -1,6 +1,7 @@ services: log: image: goharbor/harbor-log:{{version}} + platform: {{platform}} container_name: harbor-log restart: always cap_drop: @@ -24,6 +25,7 @@ services: - harbor registry: image: goharbor/registry-photon:{{reg_version}} + platform: {{platform}} container_name: registry restart: always cap_drop: @@ -68,6 +70,7 @@ services: tag: "registry" registryctl: image: goharbor/harbor-registryctl:{{version}} + platform: {{platform}} container_name: registryctl env_file: - ./common/config/registryctl/env @@ -112,6 +115,7 @@ services: {% if external_database == False %} postgresql: image: goharbor/harbor-db:{{version}} + platform: {{platform}} container_name: harbor-db restart: always cap_drop: @@ -138,6 +142,7 @@ services: {% endif %} core: image: goharbor/harbor-core:{{version}} + platform: {{platform}} container_name: harbor-core env_file: - ./common/config/core/env @@ -194,6 +199,7 @@ services: tag: "core" portal: image: goharbor/harbor-portal:{{version}} + platform: {{platform}} container_name: harbor-portal restart: always cap_drop: @@ -227,6 +233,7 @@ services: jobservice: image: goharbor/harbor-jobservice:{{version}} + platform: {{platform}} container_name: harbor-jobservice env_file: - ./common/config/jobservice/env @@ -265,6 +272,7 @@ services: {% if external_redis == False %} redis: image: goharbor/redis-photon:{{redis_version}} + platform: {{platform}} container_name: redis restart: always cap_drop: @@ -287,6 +295,7 @@ services: {% endif %} proxy: image: goharbor/nginx-photon:{{version}} + platform: {{platform}} container_name: nginx restart: always cap_drop: @@ -336,6 +345,7 @@ services: trivy-adapter: container_name: trivy-adapter image: goharbor/trivy-adapter-photon:{{trivy_adapter_version}} + platform: {{platform}} restart: always cap_drop: - ALL @@ -375,6 +385,7 @@ services: {% if metric.enabled %} exporter: image: goharbor/harbor-exporter:{{version}} + platform: {{platform}} container_name: harbor-exporter env_file: - ./common/config/exporter/env diff --git a/make/photon/prepare/utils/docker_compose.py b/make/photon/prepare/utils/docker_compose.py index c1c1111617..cbd50daa82 100644 --- a/make/photon/prepare/utils/docker_compose.py +++ b/make/photon/prepare/utils/docker_compose.py @@ -1,5 +1,5 @@ import os - +import platform from g import templates_dir from .configs import parse_versions from .jinja import render_jinja @@ -58,5 +58,15 @@ def prepare_docker_compose(configs, with_trivy): metric = configs.get('metric') if metric: rendering_variables['metric'] = metric + # for metrics + metric = configs.get('metric') + if metric: + rendering_variables['metric'] = metric + + arch = platform.machine() + if arch == "aarch64": + rendering_variables['platform'] = "linux/arm64" + else: + rendering_variables['platform'] = "linux/amd64" render_jinja(docker_compose_template_path, docker_compose_yml_path, mode=0o644, **rendering_variables) From cc0c20c8bc185661dcccac1521583e97b7a271ec Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 11 Aug 2025 20:28:11 +0000 Subject: [PATCH 2/2] ARM64 fixes: update Makefile, Dockerfile.base, and compose logic --- Makefile | 31 ++++++--------------- make/photon/db/Dockerfile.base | 15 +++------- make/photon/prepare/utils/docker_compose.py | 4 --- 3 files changed, 12 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index d4e4cd72c8..ef3990ca1b 100644 --- a/Makefile +++ b/Makefile @@ -73,12 +73,14 @@ CORE_PATH=$(BUILDPATH)/src/core PORTAL_PATH=$(BUILDPATH)/src/portal CHECKENVCMD=checkenv.sh ARCH ?= $(shell uname -m) - +ifeq ($(ARCH), aarch64) + ARCH := arm64 +endif # parameters REGISTRYSERVER= REGISTRYPROJECTNAME=goharbor DEVFLAG=true -TRIVYFLAG=true +TRIVYFLAG=false EXPORTERFLAG=false HTTPPROXY= BUILDREG=true @@ -123,32 +125,15 @@ DISTRIBUTION_SRC=https://github.com/goharbor/distribution.git # dependency binaries REGISTRYURL=https://storage.googleapis.com/harbor-builds/bin/registry/release-${REGISTRYVERSION}/registry - ifeq ($(ARCH), arm64) - - - # Arm64-specific version and source values - TRIVYVERSION=v0.58.2 - TRIVYADAPTERVERSION=v0.32.3 - REGISTRY_SRC_TAG=v2.8.3 - DISTRIBUTION_SRC=https://github.com/distribution/distribution.git - TRIVY_DOWNLOAD_URL=https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION)_Linux-ARM64.tar.gz - TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz - + TRIVY_DOWNLOAD_URL = https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION:v%=%)_Linux-ARM64.tar.gz else - - # Default (x86_64 or others) versions - TRIVYVERSION=v0.61.0 - TRIVYADAPTERVERSION=v0.33.0-rc.2 - REGISTRY_SRC_TAG=release/2.8 - DISTRIBUTION_SRC=https://github.com/goharbor/distribution.git - TRIVY_DOWNLOAD_URL=https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION:v%=%)_Linux-64bit.tar.gz - TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz + TRIVY_DOWNLOAD_URL = https://github.com/aquasecurity/trivy/releases/download/$(TRIVYVERSION)/trivy_$(TRIVYVERSION:v%=%)_Linux-64bit.tar.gz endif - +TRIVY_ADAPTER_DOWNLOAD_URL=https://github.com/goharbor/harbor-scanner-trivy/archive/refs/tags/$(TRIVYADAPTERVERSION).tar.gz define VERSIONS_FOR_PREPARE VERSION_TAG: $(VERSIONTAG) REGISTRY_VERSION: $(REGISTRYVERSION) @@ -637,4 +622,4 @@ clean: @echo " make cleandockercomposefile: remove specific version docker-compose" @echo " make cleanpackage: remove online and offline install package" -all: install +all: install \ No newline at end of file diff --git a/make/photon/db/Dockerfile.base b/make/photon/db/Dockerfile.base index 6ad0e3195f..65506bd572 100644 --- a/make/photon/db/Dockerfile.base +++ b/make/photon/db/Dockerfile.base @@ -6,16 +6,9 @@ RUN tdnf install -y shadow >> /dev/null \ && groupadd -r postgres --gid=999 \ && useradd -m -r -g postgres --uid=999 postgres -# Detect architecture and install different packages accordingly -ARG TARGETARCH -RUN if [ "$TARGETARCH" = "amd64" ]; then \ - tdnf install -y postgresql14-server gzip postgresql15-server findutils bc >> /dev/null; \ - else \ - tdnf install -y postgresql15-server gzip findutils bc >> /dev/null; \ - fi - - -RUN mkdir -p /docker-entrypoint-initdb.d \ +RUN tdnf install -y postgresql14-server >> /dev/null +RUN tdnf install -y gzip postgresql15-server findutils bc >> /dev/null \ + && mkdir -p /docker-entrypoint-initdb.d \ && mkdir -p /run/postgresql \ && chown -R postgres:postgres /run/postgresql \ && chmod 2777 /run/postgresql \ @@ -24,4 +17,4 @@ RUN mkdir -p /docker-entrypoint-initdb.d \ && sed -i "s|#unix_socket_directories = '/tmp'.*|unix_socket_directories = '/run/postgresql'|g" /usr/pgsql/15/share/postgresql/postgresql.conf.sample \ && tdnf clean all -RUN tdnf erase -y toybox && tdnf install -y util-linux net-tools +RUN tdnf erase -y toybox && tdnf install -y util-linux net-tools \ No newline at end of file diff --git a/make/photon/prepare/utils/docker_compose.py b/make/photon/prepare/utils/docker_compose.py index cbd50daa82..99b6d64cf3 100644 --- a/make/photon/prepare/utils/docker_compose.py +++ b/make/photon/prepare/utils/docker_compose.py @@ -56,10 +56,6 @@ def prepare_docker_compose(configs, with_trivy): # for metrics metric = configs.get('metric') - if metric: - rendering_variables['metric'] = metric - # for metrics - metric = configs.get('metric') if metric: rendering_variables['metric'] = metric