diff --git a/.github/workflows/build-image-and-push.yaml b/.github/workflows/build-image-and-push.yaml index 81d922e95..461676b63 100644 --- a/.github/workflows/build-image-and-push.yaml +++ b/.github/workflows/build-image-and-push.yaml @@ -65,16 +65,13 @@ jobs: - name: Build Docker Image and Push run: | - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=amd64 make docker-build - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=arm64 make docker-build + GOPROXY="https://proxy.golang.org,direct" make docker-buildx-push BUILT_IMAGE="higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/higress" - docker push $BUILT_IMAGE:$GITHUB_SHA-amd64 - docker push $BUILT_IMAGE:$GITHUB_SHA-arm64 + docker push $BUILT_IMAGE:$GITHUB_SHA readarray -t IMAGES <<< "${{ steps.docker-meta.outputs.tags }}" for image in ${IMAGES[@]}; do echo "Image: $image" - docker manifest create $image $BUILT_IMAGE:$GITHUB_SHA-amd64 $BUILT_IMAGE:$GITHUB_SHA-arm64 - docker manifest push $image + docker buildx imagetools create $BUILT_IMAGE:$GITHUB_SHA --tag $image done build-pilot-image: @@ -135,16 +132,12 @@ jobs: - name: Build Pilot-Discovery Image and Push run: | - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=amd64 make build-istio - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=arm64 make build-istio + GOPROXY="https://proxy.golang.org,direct" make build-istio BUILT_IMAGE="higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/pilot" - docker push $BUILT_IMAGE:$GITHUB_SHA-amd64 - docker push $BUILT_IMAGE:$GITHUB_SHA-arm64 readarray -t IMAGES <<< "${{ steps.docker-meta.outputs.tags }}" for image in ${IMAGES[@]}; do echo "Image: $image" - docker manifest create $image $BUILT_IMAGE:$GITHUB_SHA-amd64 $BUILT_IMAGE:$GITHUB_SHA-arm64 - docker manifest push $image + docker buildx imagetools create $BUILT_IMAGE:$GITHUB_SHA --tag $image done @@ -199,14 +192,10 @@ jobs: - name: Build Gateway Image and Push run: | - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=amd64 make build-gateway - GOPROXY="https://proxy.golang.org,direct" TARGET_ARCH=arm64 make build-gateway + GOPROXY="https://proxy.golang.org,direct" make build-gateway BUILT_IMAGE="higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/proxyv2" - docker push $BUILT_IMAGE:$GITHUB_SHA-amd64 - docker push $BUILT_IMAGE:$GITHUB_SHA-arm64 readarray -t IMAGES <<< "${{ steps.docker-meta.outputs.tags }}" for image in ${IMAGES[@]}; do echo "Image: $image" - docker manifest create $image $BUILT_IMAGE:$GITHUB_SHA-amd64 $BUILT_IMAGE:$GITHUB_SHA-arm64 - docker manifest push $image + docker buildx imagetools create $BUILT_IMAGE:$GITHUB_SHA --tag $image done diff --git a/Makefile.core.mk b/Makefile.core.mk index 2a35aec21..d795332bf 100644 --- a/Makefile.core.mk +++ b/Makefile.core.mk @@ -69,12 +69,13 @@ build: prebuild $(OUT) .PHONY: build-linux build-linux: prebuild $(OUT) -ifeq ($(BUILDX_PLATFORM), true) - GOPROXY=$(GOPROXY) GOOS=linux GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_amd64/ $(HIGRESS_BINARIES) - GOPROXY=$(GOPROXY) GOOS=linux GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_arm64/ $(HIGRESS_BINARIES) -else GOPROXY=$(GOPROXY) GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh $(OUT_LINUX)/ $(HIGRESS_BINARIES) -endif + +$(AMD64_OUT_LINUX)/higress: prebuild $(OUT) + GOPROXY=$(GOPROXY) GOOS=linux GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_amd64/ $(HIGRESS_BINARIES) + +$(ARM64_OUT_LINUX)/higress: prebuild $(OUT) + GOPROXY=$(GOPROXY) GOOS=linux GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_arm64/ $(HIGRESS_BINARIES) .PHONY: build-hgctl @@ -124,6 +125,8 @@ include docker/docker.mk docker-build: docker.higress ## Build and push docker images to registry defined by $HUB and $TAG +docker-buildx-push: docker.higress-buildx + docker-build-base: docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t ${HUB}/base:${BASE_VERSION} -f docker/Dockerfile.base . --push @@ -132,16 +135,24 @@ export PARENT_GIT_REVISION:=$(TAG) export ENVOY_TAR_PATH:=/home/package/envoy.tar.gz -external/package/envoy-$(TARGET_ARCH).tar.gz: +external/package/envoy-amd64.tar.gz: # cd external/proxy; BUILD_WITH_CONTAINER=1 make test_release - cd external/package; wget "https://github.com/alibaba/higress/releases/download/v1.0.0/envoy-$(TARGET_ARCH).tar.gz" + cd external/package; wget "https://github.com/alibaba/higress/releases/download/v1.0.0/envoy-amd64.tar.gz" -build-gateway: prebuild external/package/envoy-$(TARGET_ARCH).tar.gz - cp -f external/package/envoy-$(TARGET_ARCH).tar.gz external/package/envoy.tar.gz - cd external/istio; rm -rf out/linux_$(TARGET_ARCH); GOOS_LOCAL=linux TARGET_OS=linux TARGET_ARCH=$(TARGET_ARCH) BUILD_WITH_CONTAINER=1 DOCKER_BUILD_VARIANTS=default DOCKER_TARGETS="docker.proxyv2" make docker +external/package/envoy-arm64.tar.gz: +# cd external/proxy; BUILD_WITH_CONTAINER=1 make test_release + cd external/package; wget "https://github.com/alibaba/higress/releases/download/v1.0.0/envoy-arm64.tar.gz" -build-istio: prebuild - cd external/istio; rm -rf out/linux_$(TARGET_ARCH); GOOS_LOCAL=linux TARGET_OS=linux TARGET_ARCH=$(TARGET_ARCH) BUILD_WITH_CONTAINER=1 DOCKER_BUILD_VARIANTS=default DOCKER_TARGETS="docker.pilot" make docker + +build-pilot: + cd external/istio; rm -rf out/linux_amd64; GOOS_LOCAL=linux TARGET_OS=linux TARGET_ARCH=amd64 BUILD_WITH_CONTAINER=1 make build-linux + cd external/istio; rm -rf out/linux_arm64; GOOS_LOCAL=linux TARGET_OS=linux TARGET_ARCH=arm64 BUILD_WITH_CONTAINER=1 make build-linux + +build-gateway: prebuild external/package/envoy-amd64.tar.gz external/package/envoy-arm64.tar.gz build-pilot + cd external/istio; BUILD_WITH_CONTAINER=1 BUILDX_PLATFORM=true DOCKER_BUILD_VARIANTS=default DOCKER_TARGETS="docker.proxyv2" make docker + +build-istio: prebuild build-pilot + cd external/istio; BUILD_WITH_CONTAINER=1 BUILDX_PLATFORM=true DOCKER_BUILD_VARIANTS=default DOCKER_TARGETS="docker.pilot" make docker build-wasmplugins: ./tools/hack/build-wasm-plugins.sh @@ -161,10 +172,10 @@ ENVOY_LATEST_IMAGE_TAG ?= 1.1.0 ISTIO_LATEST_IMAGE_TAG ?= 1.1.1 install-dev: pre-install - helm install higress helm/core -n higress-system --create-namespace --set 'controller.tag=$(TAG)-$(TARGET_ARCH)' --set 'gateway.replicas=1' --set 'gateway.tag=$(ENVOY_LATEST_IMAGE_TAG)' --set 'global.local=true' + helm install higress helm/core -n higress-system --create-namespace --set 'controller.tag=$(TAG)' --set 'gateway.replicas=1' --set 'gateway.tag=$(ENVOY_LATEST_IMAGE_TAG)' --set 'global.local=true' install-dev-wasmplugin: build-wasmplugins pre-install - helm install higress helm/core -n higress-system --create-namespace --set 'controller.tag=$(TAG)-$(TARGET_ARCH)' --set 'gateway.replicas=1' --set 'gateway.tag=$(ENVOY_LATEST_IMAGE_TAG)' --set 'global.local=true' --set 'global.volumeWasmPlugins=true' + helm install higress helm/core -n higress-system --create-namespace --set 'controller.tag=$(TAG)' --set 'gateway.replicas=1' --set 'gateway.tag=$(ENVOY_LATEST_IMAGE_TAG)' --set 'global.local=true' --set 'global.volumeWasmPlugins=true' uninstall: helm uninstall higress -n higress-system @@ -238,7 +249,7 @@ delete-cluster: $(tools/kind) ## Delete kind cluster. # docker pull registry.cn-hangzhou.aliyuncs.com/hinsteny/nacos-standlone-rc3:1.0.0-RC3 .PHONY: kube-load-image kube-load-image: $(tools/kind) ## Install the Higress image to a kind cluster using the provided $IMAGE and $TAG. - tools/hack/kind-load-image.sh higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/higress $(TAG)-$(TARGET_ARCH) + tools/hack/kind-load-image.sh higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/higress $(TAG) tools/hack/docker-pull-image.sh registry.cn-hangzhou.aliyuncs.com/hinsteny/dubbo-provider-demo 0.0.1 tools/hack/docker-pull-image.sh registry.cn-hangzhou.aliyuncs.com/hinsteny/nacos-standlone-rc3 1.0.0-RC3 tools/hack/docker-pull-image.sh docker.io/hashicorp/consul 1.16.0 diff --git a/docker/Dockerfile.higress b/docker/Dockerfile.higress index 3f940e07f..cd52b74ee 100644 --- a/docker/Dockerfile.higress +++ b/docker/Dockerfile.higress @@ -6,11 +6,11 @@ ARG BASE_VERSION=latest ARG HUB -ARG TARGETARCH - # The following section is used as base image if BASE_DISTRIBUTION=debug # This base image is provided by istio, see: https://github.com/istio/istio/blob/master/docker/Dockerfile.base -FROM ${HUB}/base:${BASE_VERSION}-${TARGETARCH} +FROM ${HUB}/base:${BASE_VERSION} + +ARG TARGETARCH COPY ${TARGETARCH:-amd64}/higress /usr/local/bin/higress diff --git a/docker/docker.mk b/docker/docker.mk index 72a9ed4db..5db6af1aa 100644 --- a/docker/docker.mk +++ b/docker/docker.mk @@ -12,11 +12,17 @@ ## See the License for the specific language governing permissions and ## limitations under the License. -docker.higress: BUILD_ARGS=--build-arg BASE_VERSION=${BASE_VERSION} --build-arg HUB=${HUB} --build-arg TARGETARCH=$(TARGET_ARCH) +docker.higress: BUILD_ARGS=--build-arg BASE_VERSION=${BASE_VERSION} --build-arg HUB=${HUB} docker.higress: $(OUT_LINUX)/higress docker.higress: docker/Dockerfile.higress $(HIGRESS_DOCKER_RULE) +docker.higress-buildx: BUILD_ARGS=--build-arg BASE_VERSION=${BASE_VERSION} --build-arg HUB=${HUB} +docker.higress-buildx: $(AMD64_OUT_LINUX)/higress +docker.higress-buildx: $(ARM64_OUT_LINUX)/higress +docker.higress-buildx: docker/Dockerfile.higress + $(HIGRESS_DOCKER_BUILDX_RULE) + # DOCKER_BUILD_VARIANTS ?=debug distroless # Base images have two different forms: # * "debug", suffixed as -debug. This is a ubuntu based image with a bunch of debug tools @@ -29,11 +35,6 @@ DOCKER_ALL_VARIANTS ?= debug distroless INCLUDE_UNTAGGED_DEFAULT ?= false DEFAULT_DISTRIBUTION=debug -ifeq ($(BUILDX_PLATFORM), true) -ifeq (docker buildx ls | grep -q container-builder,) - docker buildx create --name container-builder --use; -endif -HIGRESS_DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(HIGRESS_DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./docker/docker-copy.sh $^ $(HIGRESS_DOCKER_BUILD_TOP)/$@ && cd $(HIGRESS_DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker buildx build --no-cache --platform linux/amd64,linux/arm64 $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile$(suffix $@) . --push ); ) -else -HIGRESS_DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(HIGRESS_DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./docker/docker-copy.sh $^ $(HIGRESS_DOCKER_BUILD_TOP)/$@ && cd $(HIGRESS_DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker build $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT))-$(TARGET_ARCH) -f Dockerfile$(suffix $@) . ); ) -endif +HIGRESS_DOCKER_BUILDX_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(HIGRESS_DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./docker/docker-copy.sh $^ $(HIGRESS_DOCKER_BUILD_TOP)/$@ && cd $(HIGRESS_DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker buildx create --use && docker buildx build --no-cache --platform linux/amd64,linux/arm64 $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/higress:$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile.higress . --push ); ) +HIGRESS_DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(HIGRESS_DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./docker/docker-copy.sh $^ $(HIGRESS_DOCKER_BUILD_TOP)/$@ && cd $(HIGRESS_DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker build $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/higress:$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile.higress . ); ) + diff --git a/istio/1.12/patches/istio/20230811-hack-multi-arch.patch b/istio/1.12/patches/istio/20230811-hack-multi-arch.patch deleted file mode 100644 index e56c08e42..000000000 --- a/istio/1.12/patches/istio/20230811-hack-multi-arch.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff -Naur istio/pilot/docker/Dockerfile.pilot istio-new/pilot/docker/Dockerfile.pilot ---- istio/pilot/docker/Dockerfile.pilot 2023-08-11 18:01:44.000000000 +0800 -+++ istio-new/pilot/docker/Dockerfile.pilot 2023-08-11 17:50:02.000000000 +0800 -@@ -6,8 +6,10 @@ - - ARG HUB - -+ARG TARGETARCH -+ - # The following section is used as base image if BASE_DISTRIBUTION=debug --FROM ${HUB:-gcr.io/istio-release}/base:${BASE_VERSION} as debug -+FROM ${HUB:-gcr.io/istio-release}/base:${BASE_VERSION}-${TARGETARCH} as debug - - # The following section is used as base image if BASE_DISTRIBUTION=distroless - # FROM gcr.io/istio-release/distroless:${BASE_VERSION} as distroless -@@ -16,7 +18,6 @@ - # hadolint ignore=DL3006 - FROM ${BASE_DISTRIBUTION:-debug} - --ARG TARGETARCH - COPY ${TARGETARCH:-amd64}/pilot-discovery /usr/local/bin/pilot-discovery - - # Copy templates for bootstrap generation. -diff -Naur istio/pilot/docker/Dockerfile.proxyv2 istio-new/pilot/docker/Dockerfile.proxyv2 ---- istio/pilot/docker/Dockerfile.proxyv2 2023-08-11 18:01:43.000000000 +0800 -+++ istio-new/pilot/docker/Dockerfile.proxyv2 2023-08-11 17:57:08.000000000 +0800 -@@ -6,8 +6,10 @@ - - ARG HUB - -+ARG TARGETARCH -+ - # The following section is used as base image if BASE_DISTRIBUTION=debug --FROM ${HUB:-gcr.io/istio-release}/base:${BASE_VERSION} as debug -+FROM ${HUB:-gcr.io/istio-release}/base:${BASE_VERSION}-${TARGETARCH} as debug - - # The following section is used as base image if BASE_DISTRIBUTION=distroless - # This image is a custom built debian11 distroless image with multiarchitecture support. -@@ -25,13 +27,13 @@ - ARG proxy_version - ARG istio_version - ARG SIDECAR=envoy -+ARG TARGETARCH - - # Copy Envoy bootstrap templates used by pilot-agent - COPY envoy_bootstrap.json /var/lib/istio/envoy/envoy_bootstrap_tmpl.json - COPY gcp_envoy_bootstrap.json /var/lib/istio/envoy/gcp_envoy_bootstrap_tmpl.json - - # Install Envoy. --ARG TARGETARCH - COPY ${TARGETARCH:-amd64}/${SIDECAR} /usr/local/bin/${SIDECAR} - - # Environment variable indicating the exact proxy sha - for debugging or version-specific configs -@@ -39,7 +41,6 @@ - # Environment variable indicating the exact build, for debugging - ENV ISTIO_META_ISTIO_VERSION $istio_version - --ARG TARGETARCH - COPY ${TARGETARCH:-amd64}/pilot-agent /usr/local/bin/pilot-agent - - # COPY stats-filter.wasm /etc/istio/extensions/stats-filter.wasm -diff -Naur istio/tools/istio-docker.mk istio-new/tools/istio-docker.mk ---- istio/tools/istio-docker.mk 2023-08-11 18:01:44.000000000 +0800 -+++ istio-new/tools/istio-docker.mk 2023-08-11 17:50:02.000000000 +0800 -@@ -85,7 +85,7 @@ - - # Default proxy image. - docker.proxyv2: BUILD_PRE=&& chmod 644 envoy_bootstrap.json gcp_envoy_bootstrap.json --docker.proxyv2: BUILD_ARGS=--build-arg proxy_version=istio-proxy:${PROXY_REPO_SHA} --build-arg istio_version=${VERSION} --build-arg BASE_VERSION=${BASE_VERSION} --build-arg SIDECAR=${SIDECAR} --build-arg HUB=${HUB} -+docker.proxyv2: BUILD_ARGS=--build-arg proxy_version=istio-proxy:${PROXY_REPO_SHA} --build-arg istio_version=${VERSION} --build-arg BASE_VERSION=${BASE_VERSION} --build-arg SIDECAR=${SIDECAR} --build-arg HUB=${HUB} --build-arg TARGETARCH=${TARGET_ARCH} - docker.proxyv2: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/envoy_bootstrap.json - docker.proxyv2: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/gcp_envoy_bootstrap.json - docker.proxyv2: $(ISTIO_ENVOY_LINUX_RELEASE_DIR)/${SIDECAR} -@@ -98,7 +98,7 @@ - $(DOCKER_RULE) - - docker.pilot: BUILD_PRE=&& chmod 644 envoy_bootstrap.json gcp_envoy_bootstrap.json --docker.pilot: BUILD_ARGS=--build-arg BASE_VERSION=${BASE_VERSION} --build-arg HUB=${HUB} -+docker.pilot: BUILD_ARGS=--build-arg BASE_VERSION=${BASE_VERSION} --build-arg HUB=${HUB} --build-arg TARGETARCH=${TARGET_ARCH} - docker.pilot: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/envoy_bootstrap.json - docker.pilot: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/gcp_envoy_bootstrap.json - docker.pilot: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/higress-pilot-start.sh -@@ -324,7 +324,7 @@ - # This can be done with DOCKER_BUILD_VARIANTS="default debug" as well, but at the expense of building twice vs building once and tagging twice - INCLUDE_UNTAGGED_DEFAULT ?= false - DEFAULT_DISTRIBUTION=debug --DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./tools/docker-copy.sh $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker build $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile$(suffix $@) . ); ) -+DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./tools/docker-copy.sh $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker build $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT))-$(TARGET_ARCH) -f Dockerfile$(suffix $@) . ); ) - RENAME_TEMPLATE ?= mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp $(ECHO_DOCKER)/$(VM_OS_DOCKERFILE_TEMPLATE) $(DOCKER_BUILD_TOP)/$@/Dockerfile$(suffix $@) - - # This target will package all docker images used in test and release, without re-building diff --git a/istio/1.12/patches/istio/20230815-multi-arch.patch b/istio/1.12/patches/istio/20230815-multi-arch.patch new file mode 100644 index 000000000..9f41f6755 --- /dev/null +++ b/istio/1.12/patches/istio/20230815-multi-arch.patch @@ -0,0 +1,124 @@ +diff -Naur istio/bin/init.sh istio-new/bin/init.sh +--- istio/bin/init.sh 2023-08-15 21:01:53.601636573 +0800 ++++ istio-new/bin/init.sh 2023-08-15 21:04:56.144783484 +0800 +@@ -151,7 +151,8 @@ + # download_envoy_if_necessary "${ISTIO_ENVOY_LINUX_RELEASE_URL}" "$ISTIO_ENVOY_LINUX_RELEASE_PATH" "${SIDECAR}" + # download_envoy_if_necessary "${ISTIO_ENVOY_CENTOS_RELEASE_URL}" "$ISTIO_ENVOY_CENTOS_LINUX_RELEASE_PATH" "${SIDECAR}-centos" + +-untar_envoy_if_necessary "${ENVOY_TAR_PATH}" "$ISTIO_ENVOY_LINUX_RELEASE_PATH" "${SIDECAR}" ++untar_envoy_if_necessary "${ENVOY_TAR_DIR}/envoy-arm64.tar.gz" "$ISTIO_ENVOY_LINUX_ARM64_RELEASE_PATH" "${SIDECAR}" ++untar_envoy_if_necessary "${ENVOY_TAR_DIR}/envoy-amd64.tar.gz" "$ISTIO_ENVOY_LINUX_AMD64_RELEASE_PATH" "${SIDECAR}" + + if [[ "$GOOS_LOCAL" == "darwin" ]]; then + # Download and extract the Envoy macOS release binary +diff -Naur istio/common/scripts/run.sh istio-new/common/scripts/run.sh +--- istio/common/scripts/run.sh 2023-08-15 21:01:53.601636573 +0800 ++++ istio-new/common/scripts/run.sh 2023-08-15 17:37:57.754600731 +0800 +@@ -36,7 +36,7 @@ + + HUB="${HUB:-istio}" + MOUNT_SOURCE="${MOUNT_SOURCE:-${PWD}}" +-ENVOY_TAR_PATH="${ENVOY_TAR_PATH:-/home/package/envoy.tar.gz}" ++ENVOY_TAR_DIR="${ENVOY_TAR_DIR:-/home/package}" + MOUNT_DEST="${MOUNT_DEST:-/work}" + MOUNT_ROOT_SOURCE="${MOUNT_ROOT_SOURCE:-`cd $MOUNT_SOURCE/..;pwd`}" + MOUNT_PACKAGE_SOURCE="${MOUNT_PACKAGE_SOURCE:-`cd $MOUNT_SOURCE/../package;pwd`}" +@@ -61,7 +61,7 @@ + -e TZ="${TIMEZONE:-$TZ}" \ + -e GOPROXY="${GOPROXY}" \ + -e HUB="${HUB}" \ +- -e ENVOY_TAR_PATH="${ENVOY_TAR_PATH}" \ ++ -e ENVOY_TAR_DIR="${ENVOY_TAR_DIR}" \ + --mount "type=bind,source=${MOUNT_PACKAGE_SOURCE},destination=/home/package" \ + --mount "type=bind,source=${MOUNT_SOURCE},destination=/work" \ + --mount "type=bind,source=${MOUNT_ROOT_SOURCE}/..,destination=/parent" \ +diff -Naur istio/common/scripts/setup_env.sh istio-new/common/scripts/setup_env.sh +--- istio/common/scripts/setup_env.sh 2023-08-15 21:01:53.601636573 +0800 ++++ istio-new/common/scripts/setup_env.sh 2023-08-15 20:15:23.292391629 +0800 +@@ -81,6 +81,9 @@ + export TARGET_OUT="${TARGET_OUT:-$(pwd)/out/${TARGET_OS}_${TARGET_ARCH}}" + export TARGET_OUT_LINUX="${TARGET_OUT_LINUX:-$(pwd)/out/linux_${TARGET_ARCH}}" + ++export ARM64_OUT_LINUX=/work/out/linux_arm64 ++export AMD64_OUT_LINUX=/work/out/linux_amd64 ++ + export CONTAINER_TARGET_OUT="${CONTAINER_TARGET_OUT:-/work/out/${TARGET_OS}_${TARGET_ARCH}}" + export CONTAINER_TARGET_OUT_LINUX="${CONTAINER_TARGET_OUT_LINUX:-/work/out/linux_${TARGET_ARCH}}" + +diff -Naur istio/Makefile.core.mk istio-new/Makefile.core.mk +--- istio/Makefile.core.mk 2023-08-15 21:01:53.601636573 +0800 ++++ istio-new/Makefile.core.mk 2023-08-15 20:03:25.384280274 +0800 +@@ -150,6 +150,11 @@ + export ISTIO_ENVOY_CENTOS_LINUX_RELEASE_NAME ?= envoy-centos-${ISTIO_ENVOY_LINUX_VERSION} + export ISTIO_ENVOY_CENTOS_LINUX_RELEASE_PATH ?= ${ISTIO_ENVOY_LINUX_RELEASE_DIR}/${ISTIO_ENVOY_CENTOS_LINUX_RELEASE_NAME} + ++export ISTIO_ENVOY_LINUX_ARM64_RELEASE_DIR ?= ${ARM64_OUT_LINUX}/release ++export ISTIO_ENVOY_LINUX_ARM64_RELEASE_PATH ?= ${ISTIO_ENVOY_LINUX_ARM64_RELEASE_DIR}/${ISTIO_ENVOY_LINUX_RELEASE_NAME} ++export ISTIO_ENVOY_LINUX_AMD64_RELEASE_DIR ?= ${AMD64_OUT_LINUX}/release ++export ISTIO_ENVOY_LINUX_AMD64_RELEASE_PATH ?= ${ISTIO_ENVOY_LINUX_AMD64_RELEASE_DIR}/${ISTIO_ENVOY_LINUX_RELEASE_NAME} ++ + # Envoy macOS vars. + # TODO Change url when official envoy release for macOS is available + export ISTIO_ENVOY_MACOS_VERSION ?= 1.0.2 +@@ -240,6 +245,8 @@ + ${ISTIO_ENVOY_LINUX_DEBUG_PATH}: init + ${ISTIO_ENVOY_LINUX_RELEASE_PATH}: init + ${ISTIO_ENVOY_MACOS_RELEASE_PATH}: init ++${ISTIO_ENVOY_LINUX_ARM64_RELEASE_PATH}: init ++${ISTIO_ENVOY_LINUX_AMD64_RELEASE_PATH}: init + + # Pull dependencies, based on the checked in Gopkg.lock file. + # Developers must manually run `dep ensure` if adding new deps +@@ -312,8 +319,8 @@ + # various platform images. + .PHONY: build-linux + build-linux: depend +- GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(ISTIO_OUT_LINUX)/ $(STANDARD_BINARIES) +- GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) common/scripts/gobuild.sh $(ISTIO_OUT_LINUX)/ -tags=agent $(AGENT_BINARIES) ++ GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) GOBUILDFLAGS='-buildvcs=false' common/scripts/gobuild.sh $(ISTIO_OUT_LINUX)/ $(STANDARD_BINARIES) ++ GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) GOBUILDFLAGS='-buildvcs=false' common/scripts/gobuild.sh $(ISTIO_OUT_LINUX)/ -tags=agent $(AGENT_BINARIES) + + # Create targets for ISTIO_OUT_LINUX/binary + # There are two use cases here: +diff -Naur istio/tools/istio-docker.mk istio-new/tools/istio-docker.mk +--- istio/tools/istio-docker.mk 2023-08-15 21:01:53.621637356 +0800 ++++ istio-new/tools/istio-docker.mk 2023-08-15 20:02:11.881402098 +0800 +@@ -77,6 +77,14 @@ + ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/envoy_bootstrap.json: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_PATH} + cp ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_PATH} ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/envoy_bootstrap.json + ++${ISTIO_ENVOY_LINUX_ARM64_RELEASE_DIR}/${SIDECAR}: ${ISTIO_ENVOY_LINUX_ARM64_RELEASE_PATH} ++ mkdir -p $(DOCKER_BUILD_TOP)/proxyv2 ++ cp ${ISTIO_ENVOY_LINUX_ARM64_RELEASE_PATH} ${ISTIO_ENVOY_LINUX_ARM64_RELEASE_DIR}/${SIDECAR} ++ ++${ISTIO_ENVOY_LINUX_AMD64_RELEASE_DIR}/${SIDECAR}: ${ISTIO_ENVOY_LINUX_AMD64_RELEASE_PATH} ++ mkdir -p $(DOCKER_BUILD_TOP)/proxyv2 ++ cp ${ISTIO_ENVOY_LINUX_AMD64_RELEASE_PATH} ${ISTIO_ENVOY_LINUX_AMD64_RELEASE_DIR}/${SIDECAR} ++ + # rule for wasm extensions. + $(ISTIO_ENVOY_LINUX_RELEASE_DIR)/stats-filter.wasm: init + $(ISTIO_ENVOY_LINUX_RELEASE_DIR)/stats-filter.compiled.wasm: init +@@ -88,7 +96,8 @@ + docker.proxyv2: BUILD_ARGS=--build-arg proxy_version=istio-proxy:${PROXY_REPO_SHA} --build-arg istio_version=${VERSION} --build-arg BASE_VERSION=${BASE_VERSION} --build-arg SIDECAR=${SIDECAR} --build-arg HUB=${HUB} + docker.proxyv2: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/envoy_bootstrap.json + docker.proxyv2: ${ISTIO_ENVOY_BOOTSTRAP_CONFIG_DIR}/gcp_envoy_bootstrap.json +-docker.proxyv2: $(ISTIO_ENVOY_LINUX_RELEASE_DIR)/${SIDECAR} ++docker.proxyv2: ${ISTIO_ENVOY_LINUX_ARM64_RELEASE_DIR}/${SIDECAR} ++docker.proxyv2: ${ISTIO_ENVOY_LINUX_AMD64_RELEASE_DIR}/${SIDECAR} + docker.proxyv2: $(ISTIO_OUT_LINUX)/pilot-agent + docker.proxyv2: pilot/docker/Dockerfile.proxyv2 + # docker.proxyv2: $(ISTIO_ENVOY_LINUX_RELEASE_DIR)/stats-filter.wasm +@@ -324,7 +333,13 @@ + # This can be done with DOCKER_BUILD_VARIANTS="default debug" as well, but at the expense of building twice vs building once and tagging twice + INCLUDE_UNTAGGED_DEFAULT ?= false + DEFAULT_DISTRIBUTION=debug ++ ++ ++ifeq ($(BUILDX_PLATFORM), true) ++DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./tools/docker-copy.sh $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker buildx create --use && docker buildx build --no-cache --platform linux/amd64,linux/arm64 $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile$(suffix $@) . --push ); ) ++else + DOCKER_RULE ?= $(foreach VARIANT,$(DOCKER_BUILD_VARIANTS), time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && TARGET_ARCH=$(TARGET_ARCH) ./tools/docker-copy.sh $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ $(BUILD_PRE) && docker build $(BUILD_ARGS) --build-arg BASE_DISTRIBUTION=$(call normalize-tag,$(VARIANT)) -t $(HUB)/$(subst docker.,,$@):$(TAG)$(call variant-tag,$(VARIANT)) -f Dockerfile$(suffix $@) . ); ) ++endif + RENAME_TEMPLATE ?= mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp $(ECHO_DOCKER)/$(VM_OS_DOCKERFILE_TEMPLATE) $(DOCKER_BUILD_TOP)/$@/Dockerfile$(suffix $@) + + # This target will package all docker images used in test and release, without re-building diff --git a/tools/hack/setup_env.sh b/tools/hack/setup_env.sh index 4531ba51e..c0cd17f6f 100755 --- a/tools/hack/setup_env.sh +++ b/tools/hack/setup_env.sh @@ -82,6 +82,9 @@ export TIMEZONE export TARGET_OUT="${TARGET_OUT:-$(pwd)/out/${TARGET_OS}_${TARGET_ARCH}}" export TARGET_OUT_LINUX="${TARGET_OUT_LINUX:-$(pwd)/out/linux_${TARGET_ARCH}}" +export AMD64_OUT_LINUX=$(pwd)/out/linux_amd64 +export ARM64_OUT_LINUX=$(pwd)/out/linux_arm64 + export CONTAINER_TARGET_OUT="${CONTAINER_TARGET_OUT:-/work/out/${TARGET_OS}_${TARGET_ARCH}}" export CONTAINER_TARGET_OUT_LINUX="${CONTAINER_TARGET_OUT_LINUX:-/work/out/linux_${TARGET_ARCH}}" @@ -173,6 +176,8 @@ export BUILD_WITH_CONTAINER=0 # For non container build, we need to write env to file if [[ "${1}" == "envfile" ]]; then + echo "AMD64_OUT_LINUX=${AMD64_OUT_LINUX}" + echo "ARM64_OUT_LINUX=${ARM64_OUT_LINUX}" echo "TARGET_OUT_LINUX=${TARGET_OUT_LINUX}" echo "TARGET_OUT=${TARGET_OUT}" echo "TIMEZONE=${TIMEZONE}"