Skip to content

Commit 69f1fb2

Browse files
authored
chore: use dynamic build of OpenSSL (#1604)
1 parent d874855 commit 69f1fb2

File tree

5 files changed

+37
-34
lines changed

5 files changed

+37
-34
lines changed

docker/Dockerfile

+9-18
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ FROM build_cpython_system_ssl AS build_cpython36
112112
COPY build_scripts/cpython-pubkeys.txt /build_scripts/cpython-pubkeys.txt
113113
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.6.15
114114

115-
116115
FROM build_cpython_system_ssl AS build_cpython37
117116
COPY build_scripts/cpython-pubkeys.txt /build_scripts/cpython-pubkeys.txt
118117
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.7.17
@@ -122,12 +121,10 @@ FROM build_cpython AS build_cpython38
122121
COPY build_scripts/ambv-pubkey.txt /build_scripts/cpython-pubkeys.txt
123122
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.8.19
124123

125-
126124
FROM build_cpython AS build_cpython39
127125
COPY build_scripts/ambv-pubkey.txt /build_scripts/cpython-pubkeys.txt
128126
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.9.19
129127

130-
131128
FROM build_cpython AS build_cpython310
132129
COPY build_scripts/cpython-pubkey-310-311.txt /build_scripts/cpython-pubkeys.txt
133130
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.10.14
@@ -140,8 +137,11 @@ FROM build_cpython AS build_cpython312
140137
COPY build_scripts/cpython-pubkey-312-313.txt /build_scripts/cpython-pubkeys.txt
141138
RUN manylinux-entrypoint /build_scripts/build-cpython.sh 3.12.3
142139

143-
FROM build_cpython AS all_cpython
144-
COPY build_scripts/finalize-python.sh /build_scripts/
140+
141+
FROM runtime_base
142+
COPY --from=build_git /manylinux-rootfs /
143+
COPY --from=build_cpython_system_ssl /manylinux-rootfs /
144+
COPY build_scripts /opt/_internal/build_scripts/
145145
RUN --mount=type=bind,target=/build_cpython36,from=build_cpython36 \
146146
--mount=type=bind,target=/build_cpython37,from=build_cpython37 \
147147
--mount=type=bind,target=/build_cpython38,from=build_cpython38 \
@@ -151,20 +151,11 @@ RUN --mount=type=bind,target=/build_cpython36,from=build_cpython36 \
151151
--mount=type=bind,target=/build_cpython312,from=build_cpython312 \
152152
mkdir -p /opt/_internal && \
153153
cp -rf /build_cpython*/opt/_internal/* /opt/_internal/ && \
154-
manylinux-entrypoint /build_scripts/finalize-python.sh
155-
156-
157-
FROM runtime_base
158-
COPY --from=build_git /manylinux-rootfs /
159-
COPY --from=build_cpython /manylinux-rootfs /
160-
COPY build_scripts /opt/_internal/build_scripts/
161-
RUN --mount=type=bind,target=/all_cpython,from=all_cpython \
162-
cp -rf /all_cpython/opt/_internal/* /opt/_internal/ && \
163154
manylinux-entrypoint /opt/_internal/build_scripts/finalize.sh \
164-
pp37-pypy37_pp73 \
165-
pp38-pypy38_pp73 \
166-
pp39-pypy39_pp73 \
167-
pp310-pypy310_pp73
155+
pp37-pypy37_pp73 \
156+
pp38-pypy38_pp73 \
157+
pp39-pypy39_pp73 \
158+
pp310-pypy310_pp73
168159

169160
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
170161

docker/build_scripts/build-cpython.sh

+15-1
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,31 @@ if [ "${AUDITWHEEL_POLICY}" == "manylinux2014" ] ; then
4343
export TCLTK_LIBS="-ltk8.6 -ltcl8.6"
4444
fi
4545

46+
OPENSSL_EXTRA=""
47+
OPENSSL_PREFIX=$(find /opt/_internal -maxdepth 1 -name 'openssl*')
48+
if [ "${OPENSSL_PREFIX}" != "" ]; then
49+
OPENSSL_EXTRA="--with-openssl=${OPENSSL_PREFIX}"
50+
case "${CPYTHON_VERSION}" in
51+
3.8.*|3.9.*) export LD_RUN_PATH=${OPENSSL_PREFIX}/lib;;
52+
*) OPENSSL_EXTRA="${OPENSSL_EXTRA} --with-openssl-rpath=auto";;
53+
esac
54+
fi
55+
4656
# configure with hardening options only for the interpreter & stdlib C extensions
4757
# do not change the default for user built extension (yet?)
4858
./configure \
4959
CFLAGS_NODIST="${MANYLINUX_CFLAGS} ${MANYLINUX_CPPFLAGS} ${CFLAGS_EXTRA}" \
50-
LDFLAGS_NODIST="${MANYLINUX_LDFLAGS}" \
60+
LDFLAGS_NODIST="${MANYLINUX_LDFLAGS}" ${OPENSSL_EXTRA} \
5161
--prefix=${PREFIX} --disable-shared --with-ensurepip=no > /dev/null
5262
make > /dev/null
5363
make install > /dev/null
5464
popd
5565
rm -rf Python-${CPYTHON_VERSION} Python-${CPYTHON_VERSION}.tgz Python-${CPYTHON_VERSION}.tgz.asc
5666

67+
if [ "${OPENSSL_PREFIX}" != "" ]; then
68+
rm -rf ${OPENSSL_PREFIX}/bin ${OPENSSL_PREFIX}/include ${OPENSSL_PREFIX}/lib/pkgconfig ${OPENSSL_PREFIX}/lib/*.so
69+
fi
70+
5771
# We do not need precompiled .pyc and .pyo files.
5872
clean_pyc ${PREFIX}
5973

docker/build_scripts/build-openssl.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@ else
3535
apk del openssl-dev
3636
fi
3737
38+
PREFIX=/opt/_internal/openssl-${OPENSSL_VERSION%.*}
39+
3840
fetch_source ${OPENSSL_ROOT}.tar.gz ${OPENSSL_DOWNLOAD_URL}
3941
check_sha256sum ${OPENSSL_ROOT}.tar.gz ${OPENSSL_HASH}
4042
tar -xzf ${OPENSSL_ROOT}.tar.gz
4143
pushd ${OPENSSL_ROOT}
42-
./config no-shared --prefix=/usr/local/ssl --openssldir=/usr/local/ssl --libdir=lib CPPFLAGS="${MANYLINUX_CPPFLAGS}" CFLAGS="${MANYLINUX_CFLAGS} -fPIC" CXXFLAGS="${MANYLINUX_CXXFLAGS} -fPIC" LDFLAGS="${MANYLINUX_LDFLAGS} -fPIC" > /dev/null
44+
./Configure --prefix=${PREFIX} --openssldir=${PREFIX} --libdir=lib CPPFLAGS="${MANYLINUX_CPPFLAGS}" CFLAGS="${MANYLINUX_CFLAGS}" CXXFLAGS="${MANYLINUX_CXXFLAGS}" LDFLAGS="${MANYLINUX_LDFLAGS} -Wl,-rpath,\$(LIBRPATH)" > /dev/null
4345
make > /dev/null
4446
make install_sw > /dev/null
4547
popd
4648
rm -rf ${OPENSSL_ROOT} ${OPENSSL_ROOT}.tar.gz
4749
50+
strip_ ${PREFIX}
4851
49-
/usr/local/ssl/bin/openssl version
52+
${PREFIX}/bin/openssl version

docker/build_scripts/finalize-python.sh

-13
This file was deleted.

docker/build_scripts/finalize.sh

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ MY_DIR=$(dirname "${BASH_SOURCE[0]}")
99
# Get build utilities
1010
source $MY_DIR/build_utils.sh
1111

12+
# most people don't need libpython*.a, and they're many megabytes.
13+
# compress them all together for best efficiency
14+
pushd /opt/_internal
15+
XZ_OPT=-9e tar -cJf static-libs-for-embedding-only.tar.xz cpython-*/lib/libpython*.a
16+
popd
17+
find /opt/_internal -name '*.a' -print0 | xargs -0 rm -f
18+
19+
# update package, create symlinks for each python
1220
mkdir /opt/python
1321
for PREFIX in $(find /opt/_internal/ -mindepth 1 -maxdepth 1 \( -name 'cpython*' -o -name 'pypy*' \)); do
1422
${MY_DIR}/finalize-one.sh ${PREFIX}

0 commit comments

Comments
 (0)