O Python 2.7.16 pode ser construído com o openssl 1.1.1?

O Python 2.7.16 pode ser construído com o openssl 1.1.1?

Suponho que estou correto ao assumir (depois de pesquisar no Google) que o Python não usa a versão instalada do OpenSSL, mas usa seu próprio módulo SSL e precisa ser reconstruído para atualizá-lo.

Isto está em um Raspberry Pi, pequena imagem não GUI baseada em Raspbian Jessie. Estou planejando uma reconstrução completa baseada em uma distribuição atual mais tarde, quando o tempo permitir, por enquanto quero apenas atualizar os pacotes importantes manualmente.

Clonei o código-fonte OpenSSL do git, verifiquei o branch 1.1.1-stable e o construí; apenas padrão configure, make, make teste sudo make install.

Agora estou tentando reconstruir o Python para usar esta versão.

Consegui que funcionasse com Python 3, mas falha no Python 2. Ambos são tarballs baixados hoje em www.python.org/downloads/source/, criados com ./configuree makesem quaisquer opções adicionais.

Resultado para 3.7.3: make foi bem-sucedido e este teste também

$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.1.1d-dev  xx XXX xxxx

A versão antiga (instalada) do Python relata OpenSSL 1.0.1t para python e também para python3, portanto, a nova compilação está usando a nova versão.

Resultado para 2.7.16: make é bem-sucedido apenas parcialmente, mas termina com

Failed to build these modules:
_hashlib           _ssl               

e o mesmo teste vai

$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/src/python/Python-2.7.16/Lib/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

Obtenha resultados ao construir esses módulos:

building '_ssl' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_ssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-armv7l-2.7/_ssl.so: undefined symbol: OPENSSL_sk_num
building '_hashlib' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_hashlib.so
*** WARNING: renaming "_hashlib" since importing it failed: build/lib.linux-armv7l-2.7/_hashlib.so: undefined symbol: OPENSSL_init_crypto

Responder1

Como no meu comentário à pergunta, a resposta é sim.

[Editar: primeiro pensei que fossem minhas CFLAGS, mas não.]

Finalmente entendi. O comando build para o módulo _ssl contém estas opções: -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib

O primeiro desses dois locais ainda continha uma versão ANTIGA (1.0.0) do libssl.so. A versão correta estava no segundo caminho.

O engraçado é que isso parece não ter feito diferença na construção do 3.7.3, apenas no 2.7.16.

informação relacionada