¿Se puede compilar Python 2.7.16 con openssl 1.1.1?

¿Se puede compilar Python 2.7.16 con openssl 1.1.1?

Supongo que tengo razón al suponer (después de buscar en Google) que Python no usa la versión instalada de OpenSSL, sino que usa su propio módulo SSL y debe reconstruirse para actualizarlo.

Esto está en una Raspberry Pi, una pequeña imagen sin GUI basada en Raspbian Jessie. Estoy planeando una reconstrucción completa basada en una distribución actual más adelante, cuando el tiempo lo permita, por ahora solo quiero actualizar los paquetes importantes manualmente.

Cloné la fuente OpenSSL de git, revisé la rama estable 1.1.1 y la construí; solo por defecto configure, makey make test.sudo make install

Ahora estoy intentando reconstruir Python para usar esta versión.

Conseguí que funcionara con Python 3, pero falla en Python 2. Ambos son archivos comprimidos descargados hoy desde www.python.org/downloads/source/, creados con ./configurey makesin opciones adicionales.

Resultado de 3.7.3: make tiene éxito y esta prueba también

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

La versión antigua (instalada) de Python informa OpenSSL 1.0.1t tanto para python como para python3, por lo que la nueva compilación utiliza la nueva versión.

Resultado de 2.7.16: make solo tiene éxito parcialmente, pero termina con

Failed to build these modules:
_hashlib           _ssl               

y sale la misma prueba

$ ./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

Obtenga resultados al construir esos 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

Respuesta1

Como en mi comentario a la pregunta, la respuesta es sí.

[Editar: primero pensé que eran mis CFLAGS, pero no.]

Finalmente lo tengo. El comando de compilación para el módulo _ssl contiene estos modificadores: -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib

La primera de esas dos ubicaciones todavía contenía una versión ANTIGUA (1.0.0) de libssl.so. La versión correcta estaba en el segundo camino.

Lo curioso es que eso parece no haber hecho ninguna diferencia al compilar 3.7.3, solo para 2.7.16.

información relacionada