This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-cpp.git
The following commit(s) were added to refs/heads/main by this push:
new 778fcba Build images with deps versions (#19)
778fcba is described below
commit 778fcba8a0a875a71826af72627fe626cd08a20b
Author: Matteo Merli <[email protected]>
AuthorDate: Fri Oct 7 10:37:33 2022 -0700
Build images with deps versions (#19)
* Fixed building Alpine Linux APK packaged for x86_64 and arm64
* Removed job depedency
* Fixed permissions
* Fixed directory ownership
* Fixed building APK as root
* Use qemu to build arm64 package
* fixed copying the APK package to artifacts
* Build images with fixed dependencies
* Apply suggestions from code review
Co-authored-by: Yunze Xu <[email protected]>
* Fixed docker tag names
* Added load: true
* Fixed overriding image name
Co-authored-by: Yunze Xu <[email protected]>
---
.github/workflows/ci-build-binary-artifacts.yaml | 136 ++++++++++++++++++++-
.github/workflows/ci-pr-validation.yaml | 86 +++++++++----
.../copy-deps-versionfile.sh | 12 +-
.../dep-version.py | 13 +-
pkg/apk/docker-build-apk.sh => dependencies.yaml | 18 ++-
pkg/apk/.gitignore | 6 +-
pkg/apk/APKBUILD | 4 +-
pkg/apk/Dockerfile | 112 +++++++++++++++++
pkg/apk/build-apk.sh | 11 +-
pkg/{rpm => apk}/create-images.sh | 8 +-
.../docker-build-apk-arm64.sh} | 8 +-
.../docker-build-apk-x86_64.sh} | 9 +-
pkg/deb/.gitignore | 1 +
pkg/deb/Dockerfile | 114 ++++++++++-------
pkg/deb/create-images.sh | 2 +
pkg/deb/docker-build-deb-arm64.sh | 3 +-
pkg/deb/docker-build-deb-x86_64.sh | 3 +-
pkg/rpm/.gitignore | 3 +-
pkg/rpm/Dockerfile | 107 +++++++++-------
pkg/rpm/create-images.sh | 2 +
pkg/rpm/docker-build-rpm-arm64.sh | 4 +-
pkg/rpm/docker-build-rpm-x86_64.sh | 4 +-
22 files changed, 483 insertions(+), 183 deletions(-)
diff --git a/.github/workflows/ci-build-binary-artifacts.yaml
b/.github/workflows/ci-build-binary-artifacts.yaml
index 61b1fe4..dd48231 100644
--- a/.github/workflows/ci-build-binary-artifacts.yaml
+++ b/.github/workflows/ci-build-binary-artifacts.yaml
@@ -20,8 +20,6 @@
name: CI - Build binary artifacts
on:
push:
- branches:
- - '*'
tags:
- '*'
@@ -43,8 +41,21 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/deb
+ load: true
+ tags: build-deb-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build Debian packages
- run: pkg/deb/docker-build-deb-x86_64.sh
+ run: pkg/deb/docker-build-deb-x86_64.sh build-deb-x86_64:latest
- name: Upload artifacts
uses: actions/upload-artifact@v3
@@ -67,8 +78,22 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/deb
+ load: true
+ tags: build-deb-arm64:latest
+ build-args: PLATFORM=aarch64
+ platforms: linux/arm64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build Debian packages
- run: pkg/deb/docker-build-deb-arm64.sh
+ run: pkg/deb/docker-build-deb-arm64.sh build-deb-arm64:latest
- name: Upload artifacts
uses: actions/upload-artifact@v3
@@ -88,8 +113,21 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/rpm
+ load: true
+ tags: build-rpm-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build RPM packages
- run: pkg/rpm/docker-build-rpm-x86_64.sh
+ run: pkg/rpm/docker-build-rpm-x86_64.sh build-rpm-x86_64:latest
- name: Upload artifacts
uses: actions/upload-artifact@v3
@@ -112,11 +150,97 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/rpm
+ load: true
+ tags: build-rpm-arm64:latest
+ build-args: PLATFORM=aarch64
+ platforms: linux/arm64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build RPM packages
- run: pkg/rpm/docker-build-rpm-arm64.sh
+ run: pkg/rpm/docker-build-rpm-arm64.sh build-rpm-arm64:latest
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: rpm-arm64
path: pkg/rpm/RPMS
+
+ apk-packaging-x86_64:
+ name: Build Alpine Linux APK Package - x86_64
+ runs-on: ubuntu-20.04
+ timeout-minutes: 120
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+
+ - name: Package Pulsar source
+ run: build-support/generate-source-archive.sh
+
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/apk
+ load: true
+ tags: build-apk-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ - name: Build APK packages
+ run: pkg/apk/docker-build-apk-x86_64.sh build-apk-x86_64:latest
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: apk-x86_64
+ path: pkg/apk/build/x86_64
+
+ apk-packaging-arm64:
+ name: Build Alpine Linux APK Package - arm64
+ runs-on: ubuntu-20.04
+ timeout-minutes: 120
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+
+ - name: Package Pulsar source
+ run: build-support/generate-source-archive.sh
+
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/apk
+ load: true
+ tags: build-apk-arm64:latest
+ build-args: PLATFORM=aarch64
+ platforms: linux/arm64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ - name: Build APK packages
+ run: pkg/apk/docker-build-apk-arm64.sh build-apk-arm64:latest
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: apk-arm64
+ path: pkg/apk/build/aarch64
diff --git a/.github/workflows/ci-pr-validation.yaml
b/.github/workflows/ci-pr-validation.yaml
index 0c2e4ef..eafa65e 100644
--- a/.github/workflows/ci-pr-validation.yaml
+++ b/.github/workflows/ci-pr-validation.yaml
@@ -22,9 +22,6 @@ on:
pull_request:
branches:
- main
- push:
- branches:
- - main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -209,10 +206,22 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/deb
+ load: true
+ tags: build-deb-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build Debian packages
- run: |
- echo "Build Debian packages"
- BUILD_IMAGE=1 pkg/deb/docker-build-deb-x86_64.sh
+ run: pkg/deb/docker-build-deb-x86_64.sh build-deb-x86_64:latest
+
rpm-packaging:
name: Build RPM Package
@@ -227,25 +236,48 @@ jobs:
- name: Package Pulsar source
run: build-support/generate-source-archive.sh
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/rpm
+ load: true
+ tags: build-rpm-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
- name: Build RPM packages
- run: |
- echo "Build RPM packages"
- BUILD_IMAGE=1 pkg/rpm/docker-build-rpm-x86_64.sh
-
-# apk-packaging:
-# name: Build Alpine Linux APK Package
-# runs-on: ubuntu-20.04
-# needs: unit-tests
-# timeout-minutes: 120
-#
-# steps:
-# - name: checkout
-# uses: actions/checkout@v2
-#
-# - name: Package Pulsar source
-# run: build-support/generate-source-archive.sh
-#
-# - name: Build APK packages
-# run: |
-# echo "Build APK packages"
-# BUILD_IMAGE=1 pkg/apk/docker-build-apk.sh
\ No newline at end of file
+ run: pkg/rpm/docker-build-rpm-x86_64.sh build-rpm-x86_64:latest
+
+
+ apk-packaging:
+ name: Build Alpine Linux APK Package
+ runs-on: ubuntu-20.04
+ needs: unit-tests
+ timeout-minutes: 120
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+
+ - name: Package Pulsar source
+ run: build-support/generate-source-archive.sh
+
+ - uses: docker/setup-buildx-action@v2
+ - run: build-support/copy-deps-versionfile.sh
+
+ - name: Build dependencies Docker image
+ uses: docker/build-push-action@v3
+ with:
+ context: ./pkg/apk
+ load: true
+ tags: build-apk-x86_64:latest
+ build-args: PLATFORM=x86_64
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ - name: Build APK packages
+ run: pkg/apk/docker-build-apk-x86_64.sh build-apk-x86_64:latest
\ No newline at end of file
diff --git a/pkg/apk/docker-build-apk.sh
b/build-support/copy-deps-versionfile.sh
similarity index 82%
copy from pkg/apk/docker-build-apk.sh
copy to build-support/copy-deps-versionfile.sh
index c400c7d..8ecc8c0 100755
--- a/pkg/apk/docker-build-apk.sh
+++ b/build-support/copy-deps-versionfile.sh
@@ -18,12 +18,12 @@
# under the License.
#
-set -e
+set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE=apachepulsar/pulsar-build:alpine-3.11
-docker pull $IMAGE
-
-docker run -i -v $ROOT_DIR:/pulsar-client-cpp $IMAGE \
- /pulsar-client-cpp/pkg/apk/build-apk.sh
+for dir in apk deb rpm; do
+ mkdir -p pkg/$dir/.build
+ cp $ROOT_DIR/dependencies.yaml pkg/$dir/.build
+ cp $ROOT_DIR/build-support/dep-version.py pkg/$dir/.build
+done
diff --git a/pkg/apk/docker-build-apk.sh b/build-support/dep-version.py
similarity index 76%
copy from pkg/apk/docker-build-apk.sh
copy to build-support/dep-version.py
index c400c7d..2421d42 100755
--- a/pkg/apk/docker-build-apk.sh
+++ b/build-support/dep-version.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/usr/bin/env python3
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -18,12 +18,7 @@
# under the License.
#
-set -e
+import yaml, sys
-ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE=apachepulsar/pulsar-build:alpine-3.11
-
-docker pull $IMAGE
-
-docker run -i -v $ROOT_DIR:/pulsar-client-cpp $IMAGE \
- /pulsar-client-cpp/pkg/apk/build-apk.sh
+deps = yaml.safe_load(open('dependencies.yaml'))
+print(deps[sys.argv[1]])
diff --git a/pkg/apk/docker-build-apk.sh b/dependencies.yaml
old mode 100755
new mode 100644
similarity index 76%
rename from pkg/apk/docker-build-apk.sh
rename to dependencies.yaml
index c400c7d..bc2c531
--- a/pkg/apk/docker-build-apk.sh
+++ b/dependencies.yaml
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -18,12 +17,11 @@
# under the License.
#
-set -e
-
-ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE=apachepulsar/pulsar-build:alpine-3.11
-
-docker pull $IMAGE
-
-docker run -i -v $ROOT_DIR:/pulsar-client-cpp $IMAGE \
- /pulsar-client-cpp/pkg/apk/build-apk.sh
+boost : 1.80.0
+cmake: 3.24.2
+protobuf: 3.20.0
+zlib: 1.2.12
+zstd: 1.5.2
+snappy: 1.1.9
+openssl: 1.1.1q
+curl: 7.85.0
diff --git a/pkg/apk/.gitignore b/pkg/apk/.gitignore
index 842209a..c3a14d5 100644
--- a/pkg/apk/.gitignore
+++ b/pkg/apk/.gitignore
@@ -1,5 +1,3 @@
pkg
-perf
-examples
-lib
-src
+build
+.build
\ No newline at end of file
diff --git a/pkg/apk/APKBUILD b/pkg/apk/APKBUILD
index e3ae244..3c3cdc7 100644
--- a/pkg/apk/APKBUILD
+++ b/pkg/apk/APKBUILD
@@ -27,7 +27,7 @@ url="https://pulsar.apache.org"
arch="all"
license="https://www.apache.org/licenses/LICENSE-2.0.txt"
depends=""
-makedepends="cmake"
+makedepends=""
install=""
subpackages="$pkgname-dev"
source=""
@@ -48,7 +48,7 @@ build() {
-DBUILD_TESTS=OFF \
-DLINK_STATIC=ON \
${CMAKE_CROSSOPTS} ${ROOT_DIR}
- make
+ make -j6
}
package() {
diff --git a/pkg/apk/Dockerfile b/pkg/apk/Dockerfile
new file mode 100644
index 0000000..2a3d3a0
--- /dev/null
+++ b/pkg/apk/Dockerfile
@@ -0,0 +1,112 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+FROM alpine:3.16
+
+ARG PLATFORM
+
+# perl is required to install OpenSSL
+RUN apk add \
+ build-base \
+ linux-headers \
+ abuild \
+ bash \
+ curl \
+ g++ \
+ make \
+ cmake \
+ python3 \
+ py3-pip \
+ perl \
+ sudo
+
+RUN pip3 install pyyaml
+
+ADD .build/dependencies.yaml /
+ADD .build/dep-version.py /usr/local/bin
+
+# Download and compile boost
+RUN BOOST_VERSION=$(dep-version.py boost) && \
+ BOOST_VERSION_UNDESRSCORE=$(echo $BOOST_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
&& \
+ tar xfz boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz && \
+ cd boost_${BOOST_VERSION_UNDESRSCORE} && \
+ ./bootstrap.sh --with-libraries=regex && \
+ ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi
variant=release install && \
+ rm -rf /boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
/boost_${BOOST_VERSION_UNDESRSCORE}
+
+# Download and compile protobuf
+RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
+ curl -O -L
https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
&& \
+ tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
+ cd protobuf-${PROTOBUF_VERSION}/ && \
+ CXXFLAGS=-fPIC ./configure && \
+ make -j8 && make install && \
+ rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
/protobuf-${PROTOBUF_VERSION}
+
+# ZLib
+RUN ZLIB_VERSION=$(dep-version.py zlib) && \
+ curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz
&& \
+ tar xfz v${ZLIB_VERSION}.tar.gz && \
+ cd zlib-${ZLIB_VERSION} && \
+ CFLAGS="-fPIC -O3" ./configure && \
+ make -j8 && make install && \
+ rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
+
+# Zstandard
+RUN ZSTD_VERSION=$(dep-version.py zstd) && \
+ curl -O -L
https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz
&& \
+ tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
+ cd zstd-${ZSTD_VERSION} && \
+ CFLAGS="-fPIC -O3" make -j8 && \
+ make install && \
+ rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
+
+# Snappy
+RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
+ curl -O -L
https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
+ tar xfz ${SNAPPY_VERSION}.tar.gz && \
+ cd snappy-${SNAPPY_VERSION} && \
+ CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF && \
+ make -j8 && make install && \
+ rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
+
+RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
+ OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
&& \
+ tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
+ cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
+ ./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
+ make -j8 && make install && \
+ rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
/openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
+
+ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:
+ENV OPENSSL_ROOT_DIR /usr/local/ssl/
+
+# LibCurl
+RUN CURL_VERSION=$(dep-version.py curl) && \
+ CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz
&& \
+ tar xfz curl-${CURL_VERSION}.tar.gz && \
+ cd curl-${CURL_VERSION} && \
+ CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd && \
+ make -j8 && make install && \
+ rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
+
+
diff --git a/pkg/apk/build-apk.sh b/pkg/apk/build-apk.sh
index b31a131..66cb763 100755
--- a/pkg/apk/build-apk.sh
+++ b/pkg/apk/build-apk.sh
@@ -37,13 +37,6 @@ export VERSION=`echo $POM_VERSION | sed -E 's/\-[a-zA-Z]+//'`
echo "VERSION: $VERSION"
abuild-keygen -a -i -n
-chmod 755 ~
-chmod 755 ~/.abuild
-chmod 644 ~/.abuild/*
+abuild -F -c -r
-mkdir -p /root/packages
-chmod 777 /root/packages
-
-sudo -E -u pulsar abuild -r
-
-mv /root/packages/pkg .
+cp -r /root/packages/pkg ./build
diff --git a/pkg/rpm/create-images.sh b/pkg/apk/create-images.sh
similarity index 85%
copy from pkg/rpm/create-images.sh
copy to pkg/apk/create-images.sh
index 9bfb3ee..eb8a89f 100755
--- a/pkg/rpm/create-images.sh
+++ b/pkg/apk/create-images.sh
@@ -21,12 +21,14 @@
set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
-cd $ROOT_DIR/pkg/rpm
+cd $ROOT_DIR/pkg/apk
+
+$ROOT_DIR/build-support/copy-deps-versionfile.sh
# ARM
-IMAGE=apachepulsar/pulsar-build:centos-7-2.11-arm64
+IMAGE=apachepulsar/pulsar-build:alpine-3.16-arm64
docker build --platform arm64 -t $IMAGE . --build-arg PLATFORM=aarch64
# X86_64
-IMAGE=apachepulsar/pulsar-build:centos-7-2.11-x86_64
+IMAGE=apachepulsar/pulsar-build:alpine-3.16-x86_64
docker build --platform x86_64 -t $IMAGE . --build-arg PLATFORM=x86_64
diff --git a/pkg/deb/docker-build-deb-arm64.sh
b/pkg/apk/docker-build-apk-arm64.sh
similarity index 87%
copy from pkg/deb/docker-build-deb-arm64.sh
copy to pkg/apk/docker-build-apk-arm64.sh
index 5a814b2..7563152 100755
--- a/pkg/deb/docker-build-deb-arm64.sh
+++ b/pkg/apk/docker-build-apk-arm64.sh
@@ -18,14 +18,14 @@
# under the License.
#
-set -ex
+set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-arm64
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:alpine-3.16-arm64}
-docker pull $IMAGE_NAME
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=arm64 \
$IMAGE_NAME \
- /pulsar-client-cpp/pkg/deb/build-deb.sh
+ /pulsar-client-cpp/pkg/apk/build-apk.sh
+
diff --git a/pkg/rpm/docker-build-rpm-x86_64.sh
b/pkg/apk/docker-build-apk-x86_64.sh
similarity index 87%
copy from pkg/rpm/docker-build-rpm-x86_64.sh
copy to pkg/apk/docker-build-apk-x86_64.sh
index 69707c1..985d87d 100755
--- a/pkg/rpm/docker-build-rpm-x86_64.sh
+++ b/pkg/apk/docker-build-apk-x86_64.sh
@@ -18,15 +18,14 @@
# under the License.
#
-set -ex
+set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-x86_64
-
-docker pull $IMAGE_NAME
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:alpine-3.16-x86_64}
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=x86_64 \
$IMAGE_NAME \
- /pulsar-client-cpp/pkg/rpm/build-rpm.sh
+ /pulsar-client-cpp/pkg/apk/build-apk.sh
+
diff --git a/pkg/deb/.gitignore b/pkg/deb/.gitignore
index 89620f3..a71cdd7 100644
--- a/pkg/deb/.gitignore
+++ b/pkg/deb/.gitignore
@@ -1 +1,2 @@
BUILD
+.build
\ No newline at end of file
diff --git a/pkg/deb/Dockerfile b/pkg/deb/Dockerfile
index 839f05a..8229762 100644
--- a/pkg/deb/Dockerfile
+++ b/pkg/deb/Dockerfile
@@ -25,69 +25,93 @@ ARG PLATFORM
# perl is required to install OpenSSL
RUN apt-get update -y && \
- apt-get install -y curl g++ make perl dpkg-dev python3
+ apt-get install -y \
+ curl \
+ g++ \
+ make \
+ perl \
+ dpkg-dev \
+ python3 \
+ python3-pip
+
+RUN pip3 install pyyaml
+
+ADD .build/dependencies.yaml /
+ADD .build/dep-version.py /usr/local/bin
# Download and compile boost
-RUN curl -O -L
https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz
&& \
- tar xfz boost_1_79_0.tar.gz && \
- cd boost_1_79_0 && \
- ./bootstrap.sh && \
- ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi
variant=release install && \
- rm -rf /boost_1_79_0.tar.gz /boost_1_79_0
-
-RUN curl -O -L
https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-${PLATFORM}.tar.gz
&& \
- tar xfz cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
- cp cmake-3.24.0-linux-${PLATFORM}/bin/* /usr/bin/ && \
- cp -r cmake-3.24.0-linux-${PLATFORM}/share/cmake-3.24 /usr/share/ && \
- rm -rf cmake-3.24.0-linux-${PLATFORM} cmake-3.24.0-linux-${PLATFORM}.tar.gz
-
-# Download and copile protoubf
-RUN curl -O -L
https://github.com/google/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.0.tar.gz
&& \
- tar xfz protobuf-cpp-3.20.0.tar.gz && \
- cd protobuf-3.20.0/ && \
+RUN BOOST_VERSION=$(dep-version.py boost) && \
+ BOOST_VERSION_UNDESRSCORE=$(echo $BOOST_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
&& \
+ tar xfz boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz && \
+ cd boost_${BOOST_VERSION_UNDESRSCORE} && \
+ ./bootstrap.sh --with-libraries=regex && \
+ ./b2 -d0 address-model=64 cxxflags=-fPIC link=static threading=multi
variant=release install && \
+ rm -rf /boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
/boost_${BOOST_VERSION_UNDESRSCORE}
+
+RUN CMAKE_VERSION=$(dep-version.py cmake) && \
+ curl -O -L
https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz
&& \
+ tar xfz cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz && \
+ cp cmake-${CMAKE_VERSION}-linux-${PLATFORM}/bin/* /usr/bin/ && \
+ cp -r cmake-${CMAKE_VERSION}-linux-${PLATFORM}/share/cmake-* /usr/share/
&& \
+ rm -rf cmake-${CMAKE_VERSION}-linux-${PLATFORM}
cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz
+
+# Download and compile protobuf
+RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
+ curl -O -L
https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
&& \
+ tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
+ cd protobuf-${PROTOBUF_VERSION}/ && \
CXXFLAGS=-fPIC ./configure && \
make -j8 && make install && ldconfig && \
- rm -rf /protobuf-cpp-3.20.0.tar.gz /protobuf-3.20.0
+ rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
/protobuf-${PROTOBUF_VERSION}
# ZLib
-RUN curl -O -L https://github.com/madler/zlib/archive/v1.2.12.tar.gz && \
- tar xfz v1.2.12.tar.gz && \
- cd zlib-1.2.12 && \
+RUN ZLIB_VERSION=$(dep-version.py zlib) && \
+ curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz
&& \
+ tar xfz v${ZLIB_VERSION}.tar.gz && \
+ cd zlib-${ZLIB_VERSION} && \
CFLAGS="-fPIC -O3" ./configure && \
- make && make install && \
- rm -rf /v1.2.12.tar.gz /zlib-1.2.12
+ make -j8 && make install && \
+ rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
# Zstandard
-RUN curl -O -L
https://github.com/facebook/zstd/releases/download/v1.3.7/zstd-1.3.7.tar.gz && \
- tar xfz zstd-1.3.7.tar.gz && \
- cd zstd-1.3.7 && \
+RUN ZSTD_VERSION=$(dep-version.py zstd) && \
+ curl -O -L
https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz
&& \
+ tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
+ cd zstd-${ZSTD_VERSION} && \
CFLAGS="-fPIC -O3" make -j8 && \
make install && \
- rm -rf /zstd-1.3.7 /zstd-1.3.7.tar.gz
+ rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
# Snappy
-RUN curl -O -L
https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz &&
\
- tar xfz snappy-1.1.3.tar.gz && \
- cd snappy-1.1.3 && \
- CXXFLAGS="-fPIC -O3" ./configure && \
- make && make install && \
- rm -rf /snappy-1.1.3 /snappy-1.1.3.tar.gz
-
-RUN curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz && \
- tar xfz OpenSSL_1_1_1n.tar.gz && \
- cd openssl-OpenSSL_1_1_1n/ && \
+RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
+ curl -O -L
https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
+ tar xfz ${SNAPPY_VERSION}.tar.gz && \
+ cd snappy-${SNAPPY_VERSION} && \
+ CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF && \
+ make -j8 && make install && \
+ rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
+
+RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
+ OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
&& \
+ tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
+ cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
make -j8 && make install && \
- rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n
+ rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
/openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:
+ENV OPENSSL_ROOT_DIR /usr/local/ssl/
# LibCurl
-RUN curl -O -L
https://github.com/curl/curl/releases/download/curl-7_61_0/curl-7.61.0.tar.gz
&& \
- tar xfz curl-7.61.0.tar.gz && \
- cd curl-7.61.0 && \
- CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ && \
+RUN CURL_VERSION=$(dep-version.py curl) && \
+ CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz
&& \
+ tar xfz curl-${CURL_VERSION}.tar.gz && \
+ cd curl-${CURL_VERSION} && \
+ CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd && \
make -j8 && make install && \
- rm -rf /curl-7.61.0.tar.gz /curl-7.61.0
+ rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
+
-ENV OPENSSL_ROOT_DIR /usr/local/ssl/
diff --git a/pkg/deb/create-images.sh b/pkg/deb/create-images.sh
index ad85357..14b64b5 100755
--- a/pkg/deb/create-images.sh
+++ b/pkg/deb/create-images.sh
@@ -23,6 +23,8 @@ set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
cd $ROOT_DIR/pkg/deb
+$ROOT_DIR/build-support/copy-deps-versionfile.sh
+
# ARM
IMAGE=apachepulsar/pulsar-build:debian-9-2.11-arm64
docker build --platform arm64 -t $IMAGE . --build-arg PLATFORM=aarch64
diff --git a/pkg/deb/docker-build-deb-arm64.sh
b/pkg/deb/docker-build-deb-arm64.sh
index 5a814b2..f8c397c 100755
--- a/pkg/deb/docker-build-deb-arm64.sh
+++ b/pkg/deb/docker-build-deb-arm64.sh
@@ -22,9 +22,8 @@ set -ex
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-arm64
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:debian-9-2.11-arm64}
-docker pull $IMAGE_NAME
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=arm64 \
$IMAGE_NAME \
diff --git a/pkg/deb/docker-build-deb-x86_64.sh
b/pkg/deb/docker-build-deb-x86_64.sh
index 5a958a6..fecf6a1 100755
--- a/pkg/deb/docker-build-deb-x86_64.sh
+++ b/pkg/deb/docker-build-deb-x86_64.sh
@@ -22,9 +22,8 @@ set -ex
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-x86_64
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:debian-9-2.11-x86_64}
-docker pull $IMAGE_NAME
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=amd64 \
$IMAGE_NAME \
diff --git a/pkg/rpm/.gitignore b/pkg/rpm/.gitignore
index b77cada..f825e31 100644
--- a/pkg/rpm/.gitignore
+++ b/pkg/rpm/.gitignore
@@ -2,4 +2,5 @@ BUILD
BUILDROOT
SOURCES
RPMS
-SRPMS
\ No newline at end of file
+SRPMS
+.build
\ No newline at end of file
diff --git a/pkg/rpm/Dockerfile b/pkg/rpm/Dockerfile
index e4b809b..119ca9d 100644
--- a/pkg/rpm/Dockerfile
+++ b/pkg/rpm/Dockerfile
@@ -24,71 +24,94 @@ FROM centos:7
ARG PLATFORM
RUN yum update -y && \
- yum install -y gcc-c++ make rpm-build which \
- createrepo libstdc++-static python3
+ yum install -y \
+ gcc-c++ \
+ make \
+ rpm-build \
+ which \
+ createrepo \
+ libstdc++-static \
+ python3
+
+RUN pip3 install pyyaml
+
+ADD .build/dependencies.yaml /
+ADD .build/dep-version.py /usr/local/bin
# Download and compile boost
# GCC 4.8.2 implementation of std::regex is buggy, so we install boost::regex
here
-RUN curl -O -L
https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz
&& \
- tar xfz boost_1_79_0.tar.gz && \
- cd boost_1_79_0 && \
+RUN BOOST_VERSION=$(dep-version.py boost) && \
+ echo "BOOST VERSION: '${BOOST_VERSION}'" && \
+ BOOST_VERSION_UNDESRSCORE=$(echo $BOOST_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
&& \
+ tar xfz boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz && \
+ cd boost_${BOOST_VERSION_UNDESRSCORE} && \
./bootstrap.sh --with-libraries=regex && \
./b2 address-model=64 cxxflags=-fPIC link=static threading=multi
variant=release install && \
- rm -rf /boost_1_79_0.tar.gz /boost_1_79_0
+ rm -rf /boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
/boost_${BOOST_VERSION_UNDESRSCORE}
-RUN curl -O -L
https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-${PLATFORM}.tar.gz
&& \
- tar xfz cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
- cp cmake-3.24.0-linux-${PLATFORM}/bin/* /usr/bin/ && \
- cp -r cmake-3.24.0-linux-${PLATFORM}/share/cmake-3.24 /usr/share/ && \
- rm -rf cmake-3.24.0-linux-${PLATFORM} cmake-3.24.0-linux-${PLATFORM}.tar.gz
+RUN CMAKE_VERSION=$(dep-version.py cmake) && \
+ curl -O -L
https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz
&& \
+ tar xfz cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz && \
+ cp cmake-${CMAKE_VERSION}-linux-${PLATFORM}/bin/* /usr/bin/ && \
+ cp -r cmake-${CMAKE_VERSION}-linux-${PLATFORM}/share/cmake-* /usr/share/
&& \
+ rm -rf cmake-${CMAKE_VERSION}-linux-${PLATFORM}
cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz
# Download and copile protoubf
-RUN curl -O -L
https://github.com/google/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.0.tar.gz
&& \
- tar xfz protobuf-cpp-3.20.0.tar.gz && \
- cd protobuf-3.20.0/ && \
+RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
+ curl -O -L
https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
&& \
+ tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
+ cd protobuf-${PROTOBUF_VERSION}/ && \
CXXFLAGS=-fPIC ./configure && \
make -j8 && make install && ldconfig && \
- rm -rf /protobuf-cpp-3.20.0.tar.gz /protobuf-3.20.0
+ rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
/protobuf-${PROTOBUF_VERSION}
# ZLib
-RUN curl -O -L https://github.com/madler/zlib/archive/v1.2.12.tar.gz && \
- tar xfz v1.2.12.tar.gz && \
- cd zlib-1.2.12 && \
+RUN ZLIB_VERSION=$(dep-version.py zlib) && \
+ curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz
&& \
+ tar xfz v${ZLIB_VERSION}.tar.gz && \
+ cd zlib-${ZLIB_VERSION} && \
CFLAGS="-fPIC -O3" ./configure && \
- make && make install && \
- rm -rf /v1.2.12.tar.gz /zlib-1.2.12
+ make -j8 && make install && \
+ rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
# Zstandard
-RUN curl -O -L
https://github.com/facebook/zstd/releases/download/v1.3.7/zstd-1.3.7.tar.gz && \
- tar xfz zstd-1.3.7.tar.gz && \
- cd zstd-1.3.7 && \
+RUN ZSTD_VERSION=$(dep-version.py zstd) && \
+ curl -O -L
https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz
&& \
+ tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
+ cd zstd-${ZSTD_VERSION} && \
CFLAGS="-fPIC -O3" make -j8 && \
make install && \
- rm -rf /zstd-1.3.7 /zstd-1.3.7.tar.gz
+ rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
# Snappy
-RUN curl -O -L
https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz &&
\
- tar xfz snappy-1.1.3.tar.gz && \
- cd snappy-1.1.3 && \
- CXXFLAGS="-fPIC -O3" ./configure && \
- make && make install && \
- rm -rf /snappy-1.1.3 /snappy-1.1.3.tar.gz
-
-RUN curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz && \
- tar xfz OpenSSL_1_1_1n.tar.gz && \
- cd openssl-OpenSSL_1_1_1n/ && \
+RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
+ curl -O -L
https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
+ tar xfz ${SNAPPY_VERSION}.tar.gz && \
+ cd snappy-${SNAPPY_VERSION} && \
+ CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF && \
+ make -j8 && make install && \
+ rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
+
+RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
+ OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
&& \
+ tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
+ cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
make -j8 && make install && \
- rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n
+ rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
/openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:
+ENV OPENSSL_ROOT_DIR /usr/local/ssl/
# LibCurl
-RUN curl -O -L
https://github.com/curl/curl/releases/download/curl-7_61_0/curl-7.61.0.tar.gz
&& \
- tar xfz curl-7.61.0.tar.gz && \
- cd curl-7.61.0 && \
- CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ && \
- make && make install && \
- rm -rf /curl-7.61.0.tar.gz /curl-7.61.0
+RUN CURL_VERSION=$(dep-version.py curl) && \
+ CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz
&& \
+ tar xfz curl-${CURL_VERSION}.tar.gz && \
+ cd curl-${CURL_VERSION} && \
+ CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd && \
+ make -j8 && make install && \
+ rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
-ENV OPENSSL_ROOT_DIR /usr/local/ssl/
diff --git a/pkg/rpm/create-images.sh b/pkg/rpm/create-images.sh
index 9bfb3ee..0e57d35 100755
--- a/pkg/rpm/create-images.sh
+++ b/pkg/rpm/create-images.sh
@@ -23,6 +23,8 @@ set -e -x
ROOT_DIR=$(git rev-parse --show-toplevel)
cd $ROOT_DIR/pkg/rpm
+$ROOT_DIR/build-support/copy-deps-versionfile.sh
+
# ARM
IMAGE=apachepulsar/pulsar-build:centos-7-2.11-arm64
docker build --platform arm64 -t $IMAGE . --build-arg PLATFORM=aarch64
diff --git a/pkg/rpm/docker-build-rpm-arm64.sh
b/pkg/rpm/docker-build-rpm-arm64.sh
index 07d05d6..13ca8d5 100755
--- a/pkg/rpm/docker-build-rpm-arm64.sh
+++ b/pkg/rpm/docker-build-rpm-arm64.sh
@@ -22,9 +22,7 @@ set -ex
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-arm64
-
-docker pull $IMAGE_NAME
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:centos-7-2.11-arm64}
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=aarch64 \
diff --git a/pkg/rpm/docker-build-rpm-x86_64.sh
b/pkg/rpm/docker-build-rpm-x86_64.sh
index 69707c1..c78dc7b 100755
--- a/pkg/rpm/docker-build-rpm-x86_64.sh
+++ b/pkg/rpm/docker-build-rpm-x86_64.sh
@@ -22,9 +22,7 @@ set -ex
ROOT_DIR=$(git rev-parse --show-toplevel)
-IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-x86_64
-
-docker pull $IMAGE_NAME
+IMAGE_NAME=${1:-apachepulsar/pulsar-build:centos-7-2.11-x86_64}
docker run -v $ROOT_DIR:/pulsar-client-cpp \
--env PLATFORM=x86_64 \