diff --git a/ci/cloudbuild/dockerfiles/demo-debian-bookworm.Dockerfile b/ci/cloudbuild/dockerfiles/demo-debian-bookworm.Dockerfile index 0af3700ded566..cee79720ae9ba 100644 --- a/ci/cloudbuild/dockerfiles/demo-debian-bookworm.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-debian-bookworm.Dockerfile @@ -166,9 +166,49 @@ RUN curl -fsSL https://github.com/google/re2/archive/2025-11-05.tar.gz | \ # ```bash WORKDIR /var/tmp/build/grpc -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN apt-get update && apt-get --no-install-recommends install -y golang-go +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=yes \ @@ -178,7 +218,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -DgRPC_OPENTELEMETRY_PROVIDER=package \ -S . -B cmake-out && \ diff --git a/ci/cloudbuild/dockerfiles/demo-fedora.Dockerfile b/ci/cloudbuild/dockerfiles/demo-fedora.Dockerfile index 8e86caa2e9123..53d07f97884ed 100644 --- a/ci/cloudbuild/dockerfiles/demo-fedora.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-fedora.Dockerfile @@ -128,9 +128,49 @@ RUN curl -fsSL https://github.com/open-telemetry/opentelemetry-cpp/archive/v1.24 # ```bash WORKDIR /var/tmp/build/grpc RUN dnf makecache && dnf install -y c-ares-devel re2-devel -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN dnf makecache && dnf install -y golang +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=ON \ @@ -141,7 +181,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_PROTOBUF_PACKAGE_TYPE=CONFIG \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -DgRPC_OPENTELEMETRY_PROVIDER=package \ -DgRPC_BUILD_GRPCPP_OTEL_PLUGIN=ON \ diff --git a/ci/cloudbuild/dockerfiles/demo-opensuse-leap.Dockerfile b/ci/cloudbuild/dockerfiles/demo-opensuse-leap.Dockerfile index 0a337c4a8b61a..c240f7d3c3ce3 100644 --- a/ci/cloudbuild/dockerfiles/demo-opensuse-leap.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-opensuse-leap.Dockerfile @@ -141,9 +141,49 @@ RUN curl -fsSL https://github.com/google/re2/archive/2025-11-05.tar.gz | \ # ```bash WORKDIR /var/tmp/build/grpc -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN zypper refresh && zypper install --allow-downgrade -y go +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=yes \ @@ -153,7 +193,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -DgRPC_OPENTELEMETRY_PROVIDER=package \ -S . -B cmake-out && \ diff --git a/ci/cloudbuild/dockerfiles/demo-rockylinux-9.Dockerfile b/ci/cloudbuild/dockerfiles/demo-rockylinux-9.Dockerfile index 472b573ff9faf..5252e6d28672a 100644 --- a/ci/cloudbuild/dockerfiles/demo-rockylinux-9.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-rockylinux-9.Dockerfile @@ -160,9 +160,49 @@ RUN curl -fsSL https://github.com/google/re2/archive/2025-11-05.tar.gz | \ # ```bash WORKDIR /var/tmp/build/grpc -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN dnf makecache && dnf install -y golang +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_SHARED_LIBS=yes \ @@ -172,7 +212,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -S . -B cmake-out && \ cmake --build cmake-out -- -j ${NCPU:-4} && \ diff --git a/ci/cloudbuild/dockerfiles/demo-ubuntu-24.04.Dockerfile b/ci/cloudbuild/dockerfiles/demo-ubuntu-24.04.Dockerfile index 3ee7fb793dae4..d3a72b49bf67a 100644 --- a/ci/cloudbuild/dockerfiles/demo-ubuntu-24.04.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-ubuntu-24.04.Dockerfile @@ -166,9 +166,49 @@ RUN curl -fsSL https://github.com/google/re2/archive/2025-11-05.tar.gz | \ # ```bash WORKDIR /var/tmp/build/grpc -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN apt-get update && apt-get --no-install-recommends install -y golang-go +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=ON \ @@ -178,7 +218,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -DgRPC_OPENTELEMETRY_PROVIDER=package \ -DgRPC_BUILD_GRPCPP_OTEL_PLUGIN=ON \ diff --git a/ci/cloudbuild/dockerfiles/demo-ubuntu-jammy.Dockerfile b/ci/cloudbuild/dockerfiles/demo-ubuntu-jammy.Dockerfile index 6c462378af748..1cad20bbf7807 100644 --- a/ci/cloudbuild/dockerfiles/demo-ubuntu-jammy.Dockerfile +++ b/ci/cloudbuild/dockerfiles/demo-ubuntu-jammy.Dockerfile @@ -97,9 +97,49 @@ RUN curl -fsSL https://github.com/protocolbuffers/protobuf/archive/v36.0.tar.gz # ```bash WORKDIR /var/tmp/build/grpc -RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +## [BEGIN IGNORED] +## The [BEGIN IGNORED] / [DONE IGNORED] sections below are omitted when +## generating doc/packaging.md via ci/generate-markdown/generate-packaging.sh. +## They work around an upstream gRPC + OpenSSL issue +## (https://github.com/grpc/grpc/issues/42068) in CI by building gRPC against +## its bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +## (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +## bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +## at build or run time. +RUN apt-get update && apt-get --no-install-recommends install -y golang-go +## [DONE IGNORED] +RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ +## [BEGIN IGNORED] +## Build BoringSSL once to extract its symbol list with Go, disable its CMake +## install rules (to avoid overwriting system OpenSSL headers/pkg-config), and +## rename its shared libraries so they can be installed alongside OpenSSL. + mkdir -p third_party/boringssl-with-bazel && \ + curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ + tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ +## [DONE IGNORED] cmake \ +## [BEGIN IGNORED] + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ +## [DONE IGNORED] -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=yes \ @@ -109,7 +149,11 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ +## [BEGIN IGNORED] + -DgRPC_SSL_PROVIDER=module \ +## [DONE IGNORED] +## Emit -DgRPC_SSL_PROVIDER=package into doc/packaging.md while ignoring it in Docker. +# -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -S . -B cmake-out && \ cmake --build cmake-out -- -j ${NCPU:-4} && \ diff --git a/ci/cloudbuild/dockerfiles/fedora-cmake-quickstart.Dockerfile b/ci/cloudbuild/dockerfiles/fedora-cmake-quickstart.Dockerfile index 9b6b537e82353..8c4d876009a40 100644 --- a/ci/cloudbuild/dockerfiles/fedora-cmake-quickstart.Dockerfile +++ b/ci/cloudbuild/dockerfiles/fedora-cmake-quickstart.Dockerfile @@ -177,8 +177,14 @@ RUN curl -fsSL https://github.com/open-telemetry/opentelemetry-cpp/archive/v1.24 cmake --build cmake-out --target install && \ ldconfig && cd /var/tmp && rm -fr build +# Work around an upstream gRPC + OpenSSL issue +# (https://github.com/grpc/grpc/issues/42068) by building gRPC against its +# bundled BoringSSL (-DgRPC_SSL_PROVIDER=module) with prefixed symbols +# (BORINGSSL_PREFIX=bssl_grpc) and renamed shared libraries (bssl_crypto, +# bssl_ssl) so they do not collide with system OpenSSL (libssl.so, libcrypto.so) +# at build or run time. WORKDIR /var/tmp/build/grpc -RUN dnf makecache && dnf install -y c-ares-devel re2-devel +RUN dnf makecache && dnf install -y c-ares-devel golang re2-devel RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ mkdir -p third_party/grpc-proto && \ @@ -187,10 +193,26 @@ RUN curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ mkdir -p third_party/boringssl-with-bazel && \ curl -fsSL https://github.com/google/boringssl/archive/2b44a3701a4788e1ef866ddc7f143060a3d196c9.tar.gz | \ tar -xzf - -C third_party/boringssl-with-bazel --strip-components=1 && \ + printf 'module boringssl.googlesource.com/boringssl.git\n\ngo 1.18\n' > third_party/boringssl-with-bazel/go.mod && \ + cmake -S third_party/boringssl-with-bazel -B bssl-build && \ + cmake --build bssl-build --target crypto ssl -- -j ${NCPU:-4} && \ + (cd third_party/boringssl-with-bazel && go run util/read_symbols.go -out ../../bssl_symbols.txt ../../bssl-build/libcrypto.a ../../bssl-build/libssl.a) && \ + rm -rf bssl-build && \ + sed -i 's/set(INSTALL_ENABLED 1)/set(INSTALL_ENABLED 0)/' third_party/boringssl-with-bazel/CMakeLists.txt && \ + printf '%s\n' \ + 'set_target_properties(crypto PROPERTIES OUTPUT_NAME bssl_crypto)' \ + 'set_target_properties(ssl PROPERTIES OUTPUT_NAME bssl_ssl)' \ + 'add_dependencies(ssl boringssl_prefix_symbols)' \ + 'target_compile_definitions(crypto PUBLIC $)' \ + 'target_include_directories(crypto PUBLIC $)' \ + >> third_party/boringssl-with-bazel/CMakeLists.txt && \ cmake \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=ON \ + -DBORINGSSL_PREFIX=bssl_grpc \ + -DBORINGSSL_PREFIX_SYMBOLS="$(pwd)/bssl_symbols.txt" \ -DgRPC_INSTALL=ON \ -DgRPC_BUILD_TESTS=OFF \ -DgRPC_ABSL_PROVIDER=package \ diff --git a/doc/packaging.md b/doc/packaging.md index 9db11e9263272..002085934d98f 100644 --- a/doc/packaging.md +++ b/doc/packaging.md @@ -344,8 +344,11 @@ sudo ldconfig ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc sudo dnf makecache && sudo dnf install -y c-ares-devel re2-devel -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=17 \ @@ -514,8 +517,11 @@ sudo ldconfig ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ @@ -712,8 +718,11 @@ sudo ldconfig ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ @@ -842,8 +851,11 @@ Platform proto files. We install it using: ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ @@ -1081,8 +1093,11 @@ sudo ldconfig ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=17 \ @@ -1273,8 +1288,11 @@ install it using: ```bash mkdir -p $HOME/Downloads/grpc && cd $HOME/Downloads/grpc -curl -fsSL https://github.com/grpc/grpc/archive/v1.71.2.tar.gz | \ +curl -fsSL https://github.com/grpc/grpc/archive/v1.84.0.tar.gz | \ tar -xzf - --strip-components=1 && \ + mkdir -p third_party/grpc-proto && \ + curl -fsSL https://github.com/grpc/grpc-proto/archive/ec30f589e2519d595688b9a42f88a91bdd6b733f.tar.gz | \ + tar -xzf - -C third_party/grpc-proto --strip-components=1 && \ cmake \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Debug \ diff --git a/google/cloud/config.cmake.in b/google/cloud/config.cmake.in index fc7e88a7b5f60..9ad74ada11524 100644 --- a/google/cloud/config.cmake.in +++ b/google/cloud/config.cmake.in @@ -15,6 +15,9 @@ include(CMakeFindDependencyMacro) find_dependency(Threads) find_dependency(absl) +if (NOT WIN32) + find_dependency(OpenSSL) +endif () @GOOGLE_CLOUD_CPP_FIND_OPTIONAL_DEPENDENCIES@ include("${CMAKE_CURRENT_LIST_DIR}/google_cloud_cpp_common-targets.cmake")