A Docker image for building combinations of CPython and OpenSSL versions
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

78 Zeilen
3.9 KiB

  1. FROM debian:bullseye-slim AS builder
  2. ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
  3. ENV SSL_CERT_DIR=/etc/ssl/certs/
  4. COPY openssl1.1.0-*.patch /tmp/
  5. RUN apt-get update \
  6. && apt-get install -y build-essential zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl llvm libncursesw5-dev xz-utils libxml2-dev libffi-dev liblzma-dev \
  7. && rm -rf /var/lib/apt/lists/*
  8. ARG OPENSSL_VERSION=3.0.7
  9. ARG OPENSSL_SHA256=missing
  10. # OpenSSL 1.0.2 must be compiled with -fPIC and does not support parallel builds (make -j)
  11. RUN mkdir -p /tmp/src \
  12. && cd /tmp/src \
  13. && curl -sSL https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz -o openssl.tar.gz \
  14. && if [ "${OPENSSL_SHA256}" = "missing" ]; then \
  15. if [ "${OPENSSL_VERSION}" = "1.0.2u" ]; then OPENSSL_SHA256=ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16; \
  16. elif [ "${OPENSSL_VERSION}" = "1.1.0l" ]; then OPENSSL_SHA256=74a2f756c64fd7386a29184dc0344f4831192d61dc2481a93a4c5dd727f41148; \
  17. elif [ "${OPENSSL_VERSION}" = "1.1.1q" ]; then OPENSSL_SHA256=d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca; \
  18. elif [ "${OPENSSL_VERSION}" = "3.0.7" ]; then OPENSSL_SHA256=83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e; \
  19. else echo "Error: OPENSSL_SHA256 missing and OPENSSL_VERSION is not one of the built-in versions" && exit 1; \
  20. fi \
  21. fi \
  22. && echo "${OPENSSL_SHA256} openssl.tar.gz" | sha256sum -c \
  23. && tar -xvf openssl.tar.gz \
  24. && rm openssl.tar.gz \
  25. && cd openssl-${OPENSSL_VERSION} \
  26. && case "${OPENSSL_VERSION}" in 1.1.0*) patch -p1 </tmp/openssl1.1.0-test-certs.patch; patch -p1 </tmp/openssl1.1.0-test-fuzz.patch ;; 1.0.2*) extrasslconfig=-fPIC ;; esac \
  27. && ./config ${extrasslconfig} --prefix=/usr/local --openssldir=/usr/local \
  28. && case "${OPENSSL_VERSION}" in 1.0.2*) ;; *) extrasslmake=-j ;; esac \
  29. && make ${extrasslmake} \
  30. && make test \
  31. && make install \
  32. && rm -rf /tmp/src \
  33. && rm -rf /usr/local/share/doc /usr/local/share/man
  34. ARG PYTHON_VERSION=3.11.1
  35. ARG PYTHON_SHA256=missing
  36. RUN mkdir -p /tmp/src \
  37. && cd /tmp/src \
  38. && LD_LIBRARY_PATH= curl -sSL https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz -o Python.tar.xz \
  39. && if [ "${PYTHON_SHA256}" = "missing" ]; then \
  40. if [ "${PYTHON_VERSION}" = "3.7.16" ]; then PYTHON_SHA256=8338f0c2222d847e904c955369155dc1beeeed806e8d5ef04b00ef4787238bfd; \
  41. elif [ "${PYTHON_VERSION}" = "3.8.16" ]; then PYTHON_SHA256=d85dbb3774132473d8081dcb158f34a10ccad7a90b96c7e50ea4bb61f5ce4562; \
  42. elif [ "${PYTHON_VERSION}" = "3.9.16" ]; then PYTHON_SHA256=22dddc099246dd2760665561e8adb7394ea0cc43a72684c6480f9380f7786439; \
  43. elif [ "${PYTHON_VERSION}" = "3.10.9" ]; then PYTHON_SHA256=5ae03e308260164baba39921fdb4dbf8e6d03d8235a939d4582b33f0b5e46a83; \
  44. elif [ "${PYTHON_VERSION}" = "3.11.1" ]; then PYTHON_SHA256=85879192f2cffd56cb16c092905949ebf3e5e394b7f764723529637901dfb58f; \
  45. else echo "Error: PYTHON_SHA256 missing and PYTHON_VERSION is not one of the built-in versions" && exit 1; \
  46. fi \
  47. fi \
  48. && echo "${PYTHON_SHA256} Python.tar.xz" | sha256sum -c \
  49. && tar -xvf Python.tar.xz \
  50. && rm Python.tar.xz \
  51. && cd Python-${PYTHON_VERSION} \
  52. && case "${PYTHON_VERSION}" in 3.1[01].*) extrapyconfig=--disable-test-modules ;; esac \
  53. && ./configure ${extrapyconfig} --prefix=/usr/local --with-openssl=/usr/local CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local" \
  54. && make -j \
  55. && make install \
  56. && rm -rf /tmp/src \
  57. && rm -rf /usr/local/share/doc /usr/local/share/man \
  58. && case "${PYTHON_VERSION}" in 3.[789].*) find /usr/local/lib/ -depth -type d -a \( -name test -o -name tests -o -name idle_test \) -exec rm -rf '{}' + ;; esac
  59. FROM debian:bullseye-slim
  60. RUN apt-get update \
  61. && apt-get install -y zlib1g libbz2-1.0 libreadline8 libsqlite3-0 libncurses6 libncursesw6 libtinfo6 libxml2 libffi7 liblzma5 ca-certificates \
  62. && rm -rf /var/lib/apt/lists/*
  63. COPY --from=builder /usr/local/ /usr/local/
  64. ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
  65. ENV SSL_CERT_DIR=/etc/ssl/certs/
  66. CMD ["python3"]