Сборка Python и OpenSSL из источника, но модуль ssl не работает - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь собрать Python и OpenSSL из исходного кода в контейнере. Кажется, что оба построены правильно, но Python не может успешно создать модуль _ssl.

Я нашел несколько направляющих онлайн, которые говорят -комментарий и строки из Python - 3.X.X/Modules/Setup и добавьте флаг --openssldir=/usr/local/ssl к шагу ./configure для OpenSSL. Я делаю это в моем докер-файле. Это привело к тому, что во время вывода ./configure для Python я вижу следующую строку.

checking for X509_VERIFY_PARAM_set1_host in libssl... yes

И все же я получаю следующие ошибки:

[91m*** WARNING: renaming "_ssl" since importing it failed: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by build/lib.linux-x86_64-3.8/_ssl.cpython-38-x86_64-linux-gnu.so)
[0m[91m*** WARNING: renaming "_hashlib" since importing it failed: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: version `OPENSSL_1_1_1' not found (required by build/lib.linux-x86_64-3.8/_hashlib.cpython-38-x86_64-linux-gnu.so)
[0m
Python build finished successfully!

...

Following modules built successfully but were removed because they could not be imported:
_hashlib              _ssl                                     


Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

Если ./configure находит X509..., почему я до сих пор получить ошибки hashlib и ssl?

Полный Dockerfile, FWIW:

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y apt-utils gcc make zlib1g-dev \
    build-essential libffi-dev checkinstall libsqlite3-dev 
RUN wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz && \
    tar xzf openssl-1.1.1d.tar.gz && \
    cd openssl-1.1.1d && \
    ./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' --prefix=/usr/local/ssl --openssldir=/usr/local/ssl && \
    make && \
    make test && \
    make install
RUN wget -q https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz && \
    tar -xzf Python-3.8.2.tgz && \
    cd Python-3.8.2 && \
    ./configure && \
    make && \
    make install
USER jenkins

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Я считаю, что Jenkins Image поставляется с некоторой установленной версией openssl, которая не является 1.1.1, поэтому вы найдете X509 ... в libssl, но не можете собрать.

Что касается указанного параметра конфигурации, вы можете ускорить Контейнер с bash в качестве CMD, скопируйте конфигурацию изнутри контейнера на компьютер, на котором находится Образ, отредактируйте его и запеките свою версию конфигурации в Изображение.

0 голосов
/ 08 апреля 2020
Following modules built successfully but were removed because they could not be imported:
_hashlib              _ssl                                     

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

Похоже, проблема установки при сборке openssl из исходного кода. Для сбоя сборки на модуле _ssl попробуйте дополнительные параметры, такие как --with-openssl, CFLAGS и LDFLAGS при настройке Python с использованием скрипта ./configure, например,

./configure  --with-openssl=/PATH/TO/YOUR/OPENSSL_INSTALL_FOLDER/ \
    --enable-optimizations \
    --with-ssl-default-suites=openssl \
    CFLAGS="-I/PATH/TO/YOUR/OPENSSL_INSTALL_FODLER/include" \
    LDFLAGS="-L/PATH/TO/YOUR/OPENSSL_INSTALL_FODLER/"

Также попробуйте эту команду openssl version, если он сообщает об ошибке следующим образом:

/usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found

, что означает, что существует проблема с линковкой в ​​вашей библиотеке openssl, я не уверен, что вы используете Linux или другую систему, но для Linux система, вы можете вручную изменить ссылки на библиотеку openssl для решения проблемы, как описано в моем ответе здесь .

Ссылка

Building Python 3.7.1 - сбой модуля SSL

Python 3.7.0 не будет компилироваться с поддержкой SSL 1.1.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...