This is an automated email from the ASF dual-hosted git repository. jianghaiting pushed a commit to branch branch-2.10 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 7162c3015d70ff8e7685c8d718bb5152b569fb38 Author: Yunze Xu <[email protected]> AuthorDate: Tue Sep 13 22:18:56 2022 +0800 [fix][cpp] Fix libcurl build failure when building deb package (#17614) * [fix][cpp] Fix libcurl build failure when building deb package See https://github.com/apache/pulsar/pull/17538#issuecomment-1244898721 The root cause is when libcurl is built from source, it uses [`ld`](https://linux.die.net/man/1/ld) to check if the `libcurl.so` links to the correct dependencies in runtime. In Linux, a dynamic library links to the paths of `/etc/ld.so.conf` by default. However, different from other images like `centos:7` and `alpine`, this file includes `/usr/lib/x86_64-linux-gnu` in `debian:9`. ```bash $ cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf $ cat /etc/ld.so.conf.d/*.conf /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu ``` When libcurl is compiled, it links to the install path of libopenssl via the `--with-ssl` option: https://github.com/apache/pulsar/blob/1f50366768e76f1a5f7084f7972167f989ddd0af/pulsar-client-cpp/pkg/deb/Dockerfile#L85 i.e. `/usr/local/ssl/lib/libopenssl.so`. However, after the `libcurl.so` is built, it links to `/usr/lib/x86_64-linux-gnu/libssl.so.1.1`, see the following output: ```bash $ ldd /usr/local/lib/libcurl.so /usr/local/lib/libcurl.so: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/local/lib/libcurl.so) ``` In `debian:9`, the default libopenssl version is 1.1.0: ```bash $ strings /usr/lib/x86_64-linux-gnu/libssl.so.1.1 | grep OpenSSL OpenSSL 1.1.0l 10 Sep 2019 ``` The ABI compatibility is not guaranteed between 1.1.0l and 1.1.1n, see https://abi-laboratory.pro/index.php?view=timeline&l=openssl. Set the `LD_LIBRARY_PATH` to `/usr/local/ssl/lib` in the Dockerfile to build deb package. Actually it's not required for other images like `centos:7`, but it's also good to add the `LD_LIBRARY_PATH` to them. So this PR set the environment variable to them as well. * Fix workflow so that cpp-tests isn't skipped * Revisit workflow fix to cover doc only workflows too * Fix multi-line condition Co-authored-by: Lari Hotari <[email protected]> (cherry picked from commit 0754ea105eab8c356ba18b2f4862cb1de1f6f1b6) --- pulsar-client-cpp/docker/alpine/Dockerfile | 2 ++ pulsar-client-cpp/docker/alpine/Dockerfile-alpine-3.8 | 2 ++ pulsar-client-cpp/docker/manylinux1/Dockerfile | 2 ++ pulsar-client-cpp/docker/manylinux2014/Dockerfile | 2 ++ pulsar-client-cpp/docker/manylinux_musl/Dockerfile | 2 ++ pulsar-client-cpp/pkg/deb/Dockerfile | 2 ++ pulsar-client-cpp/pkg/rpm/Dockerfile | 2 ++ 7 files changed, 14 insertions(+) diff --git a/pulsar-client-cpp/docker/alpine/Dockerfile b/pulsar-client-cpp/docker/alpine/Dockerfile index fb3282d09bd..9527d8dcc5c 100644 --- a/pulsar-client-cpp/docker/alpine/Dockerfile +++ b/pulsar-client-cpp/docker/alpine/Dockerfile @@ -58,6 +58,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make -j8 && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # Download and copile protoubf RUN curl -O -L https://github.com/google/protobuf/releases/download/v3.11.3/protobuf-cpp-3.11.3.tar.gz && \ tar xvfz protobuf-cpp-3.11.3.tar.gz && \ diff --git a/pulsar-client-cpp/docker/alpine/Dockerfile-alpine-3.8 b/pulsar-client-cpp/docker/alpine/Dockerfile-alpine-3.8 index 2873289545b..0f503be471d 100644 --- a/pulsar-client-cpp/docker/alpine/Dockerfile-alpine-3.8 +++ b/pulsar-client-cpp/docker/alpine/Dockerfile-alpine-3.8 @@ -58,6 +58,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make -j8 && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # Download and copile protoubf RUN curl -O -L https://github.com/google/protobuf/releases/download/v3.11.3/protobuf-cpp-3.11.3.tar.gz && \ tar xvfz protobuf-cpp-3.11.3.tar.gz && \ diff --git a/pulsar-client-cpp/docker/manylinux1/Dockerfile b/pulsar-client-cpp/docker/manylinux1/Dockerfile index ae7059afca1..8f5bcae77a1 100644 --- a/pulsar-client-cpp/docker/manylinux1/Dockerfile +++ b/pulsar-client-cpp/docker/manylinux1/Dockerfile @@ -61,6 +61,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # Download and compile boost RUN curl -O -L https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.tar.gz && \ tar xvfz boost_1_68_0.tar.gz && \ diff --git a/pulsar-client-cpp/docker/manylinux2014/Dockerfile b/pulsar-client-cpp/docker/manylinux2014/Dockerfile index 5bc1b0315ed..f6ee8e0d21b 100644 --- a/pulsar-client-cpp/docker/manylinux2014/Dockerfile +++ b/pulsar-client-cpp/docker/manylinux2014/Dockerfile @@ -63,6 +63,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make -j8 && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # Download and compile boost RUN curl -O -L https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz && \ tar xvfz boost_1_78_0.tar.gz && \ diff --git a/pulsar-client-cpp/docker/manylinux_musl/Dockerfile b/pulsar-client-cpp/docker/manylinux_musl/Dockerfile index 89dd2d10755..23a081ab238 100644 --- a/pulsar-client-cpp/docker/manylinux_musl/Dockerfile +++ b/pulsar-client-cpp/docker/manylinux_musl/Dockerfile @@ -63,6 +63,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make -j8 && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # Download and compile boost RUN curl -O -L https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz && \ tar xvfz boost_1_78_0.tar.gz && \ diff --git a/pulsar-client-cpp/pkg/deb/Dockerfile b/pulsar-client-cpp/pkg/deb/Dockerfile index db33f71de38..52a209fddef 100644 --- a/pulsar-client-cpp/pkg/deb/Dockerfile +++ b/pulsar-client-cpp/pkg/deb/Dockerfile @@ -79,6 +79,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # LibCurl RUN curl -O -L https://github.com/curl/curl/releases/download/curl-7_61_0/curl-7.61.0.tar.gz && \ tar xvfz curl-7.61.0.tar.gz && \ diff --git a/pulsar-client-cpp/pkg/rpm/Dockerfile b/pulsar-client-cpp/pkg/rpm/Dockerfile index ee332c51fd7..642ede00f4b 100644 --- a/pulsar-client-cpp/pkg/rpm/Dockerfile +++ b/pulsar-client-cpp/pkg/rpm/Dockerfile @@ -79,6 +79,8 @@ RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz make && make install && \ rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n +ENV LD_LIBRARY_PATH /usr/local/ssl/lib/: + # LibCurl RUN curl -O -L https://github.com/curl/curl/releases/download/curl-7_61_0/curl-7.61.0.tar.gz && \ tar xvfz curl-7.61.0.tar.gz && \
