@@ -90,6 +90,16 @@ echo " Build dir: ${BUILD_DIR}"
9090echo " Skip deps: ${SKIP_DEPS} "
9191echo " =============================================="
9292
93+ # OpenSSL 3 hints for CMake's find_package(OpenSSL).
94+ #
95+ # On Rocky/RHEL 8 the default 'openssl-devel' is still 1.1.1k, so we install
96+ # 'openssl3-devel' from EPEL. That package installs in non-default paths
97+ # (/usr/include/openssl3 and /usr/lib64/openssl3) so we have to point CMake
98+ # at them explicitly. On Rocky/RHEL 9+ and Ubuntu 22.04+ the default OpenSSL
99+ # devel package is already 3.x, so no special handling is needed.
100+ OPENSSL_INCLUDE_DIR_HINT=" "
101+ OPENSSL_LIB_DIR_HINT=" "
102+
93103# Install system dependencies if not skipped
94104if [ " ${SKIP_DEPS} " = false ]; then
95105 echo " "
@@ -100,11 +110,35 @@ if [ "${SKIP_DEPS}" = false ]; then
100110 # Enable PowerTools (Rocky 8) or CRB (Rocky 9) for some packages
101111 if [[ " ${VERSION_ID%% .* } " == " 8" ]]; then
102112 dnf config-manager --set-enabled powertools || dnf config-manager --set-enabled PowerTools || true
113+ # EPEL provides 'openssl3-devel' in parallel with the system OpenSSL 1.1.x.
114+ dnf install -y epel-release
115+ dnf install -y git cmake ninja-build gcc gcc-c++ openssl3-devel zlib-devel c-ares-devel
116+ OPENSSL_INCLUDE_DIR_HINT=" /usr/include/openssl3"
117+ OPENSSL_LIB_DIR_HINT=" /usr/lib64/openssl3"
103118 elif [[ " ${VERSION_ID%% .* } " == " 9" ]]; then
104119 dnf config-manager --set-enabled crb || true
120+ dnf install -y git cmake ninja-build gcc gcc-c++ openssl-devel zlib-devel c-ares-devel
121+ elif [[ " $ID " == " fedora" ]]; then
122+ # Fedora 36+ ships OpenSSL 3.x as the default 'openssl-devel'.
123+ dnf install -y git cmake ninja-build gcc gcc-c++ openssl-devel zlib-devel c-ares-devel
124+ else
125+ echo " ERROR: ${PRETTY_NAME:- $ID $VERSION_ID } is not a supported RHEL-family release for OpenSSL 3 builds." >&2
126+ echo " Supported: Rocky/RHEL/CentOS/Alma 8 or 9, or Fedora. Re-run with --skip-deps to bypass." >&2
127+ exit 1
105128 fi
106- dnf install -y git cmake ninja-build gcc gcc-c++ openssl-devel zlib-devel c-ares-devel
107129 elif [[ " $ID " == " ubuntu" || " $ID " == " debian" ]]; then
130+ # The default 'libssl-dev' package is OpenSSL 3.x on Ubuntu 22.04+
131+ # and Debian 12+. Older releases (Ubuntu 20.04, Debian 11) ship
132+ # OpenSSL 1.1.1, which we deliberately do not link against (see top
133+ # of file). Refuse to proceed there rather than silently regress.
134+ DISTRO_MAJOR=" ${VERSION_ID%% .* } "
135+ if [[ " $ID " == " ubuntu" && " ${DISTRO_MAJOR} " -lt 22 ]] || \
136+ [[ " $ID " == " debian" && " ${DISTRO_MAJOR} " -lt 12 ]]; then
137+ echo " ERROR: ${PRETTY_NAME:- $ID $VERSION_ID } ships OpenSSL 1.1; cuopt requires OpenSSL 3." >&2
138+ echo " Upgrade to Ubuntu 22.04+ / Debian 12+, or install OpenSSL 3 manually" >&2
139+ echo " (e.g. via PPA or backport) and re-run this script with --skip-deps." >&2
140+ exit 1
141+ fi
108142 apt-get update
109143 apt-get install -y git cmake ninja-build g++ libssl-dev zlib1g-dev libc-ares-dev
110144 else
@@ -200,6 +234,17 @@ cmake --install "${PROTOBUF_BUILD}"
200234
201235echo " "
202236echo " Building gRPC (using installed Abseil and Protobuf)..."
237+ # When building on Rocky/RHEL 8, the EPEL openssl3-devel package installs
238+ # headers in /usr/include/openssl3 and libs in /usr/lib64/openssl3. CMake's
239+ # FindOpenSSL.cmake doesn't know to look there, so pass explicit hints.
240+ GRPC_OPENSSL_HINTS=()
241+ if [[ -n " ${OPENSSL_INCLUDE_DIR_HINT} " && -n " ${OPENSSL_LIB_DIR_HINT} " ]]; then
242+ GRPC_OPENSSL_HINTS=(
243+ " -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR_HINT} "
244+ " -DOPENSSL_SSL_LIBRARY=${OPENSSL_LIB_DIR_HINT} /libssl.so"
245+ " -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_LIB_DIR_HINT} /libcrypto.so"
246+ )
247+ fi
203248cmake -S " ${GRPC_SRC} " -B " ${GRPC_BUILD} " -G Ninja \
204249 -DCMAKE_BUILD_TYPE=Release \
205250 -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
@@ -214,6 +259,7 @@ cmake -S "${GRPC_SRC}" -B "${GRPC_BUILD}" -G Ninja \
214259 -DgRPC_SSL_PROVIDER=package \
215260 -DgRPC_ZLIB_PROVIDER=package \
216261 -DgRPC_CARES_PROVIDER=package \
262+ " ${GRPC_OPENSSL_HINTS[@]} " \
217263 -DCMAKE_PREFIX_PATH=" ${PREFIX} " \
218264 -DCMAKE_INSTALL_PREFIX=" ${PREFIX} "
219265cmake --build " ${GRPC_BUILD} " --parallel
0 commit comments