복붙노트

[PYTHON] 비표준 위치에 SSL을 지원하는 Python 구현

PYTHON

비표준 위치에 SSL을 지원하는 Python 구현

루트 액세스 권한이없는 RHEL에 여러 개의 Python 모듈을 설치해야합니다. 적어도 하나의 모듈도 Python.h에 액세스해야합니다.

이 경우 가장 좋은 것은 python을 설치하고 ~ / local에 의존성이 있음을 발견했습니다. 대개는 작동하지만, 이번에는 파이썬이 SSL 모듈을 빌드하지 못합니다 (아래 세부 정보 참조). 여기 내가하는 일의 흔적이 있습니다.

그래서 나는 파이썬 6 소스를 다운로드하고 나갔다 :

./configure --prefix=/home/fds/rms/local
make >& make.log

로그를 검사하면 ssl 모듈이 컴파일되지 않았지만 원인에 대한 언급이 없습니다 (make 또는 configure에서 ssl이 표시되지 않음).

Failed to find the necessary bits to build these modules:
_bsddb             _curses            _curses_panel
_hashlib           _sqlite3           _ssl   <----------

그래서, 파이썬은 전혀 ssl 라이브러리를 찾지 못하고 있습니다. (이상하게 보입니다 만, 어이 ...). 그래서 openssl-0.9.8r을 다운로드하고

./config --prefix=/home/fds/rms/local shared
make
make install

이제 파이썬으로 돌아가서 ./ 구성하고 다시 작성하십시오. 실패했지만 이번에는 다릅니다.

Failed to build these modules:
_hashlib           _ssl

로그 파일을 자세히 살펴보면 다음과 같이 나타납니다.

gcc -pthread -shared build/temp.linux-x86_64-2.6/home/fds/rms/installers/Python-2.6.6/Modules/_ssl.o -L/home/fds/rms/local/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.6/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: libssl.so.0.9.8: cannot open shared object file: No such file or directory

이제는 라이브러리를 가져 오는 것이지만 제대로되지는 않습니다 (파일은 있어야합니다).

$ find /home/fds/rms/local -iname libssl.so.0.9.8
/home/fds/rms/local/lib/libssl.so.0.9.8

다음은 make를 추적하고 파일을 찾는 위치를 확인하는 것입니다.

$ strace -f make 2>&1 | grep libssl.so.0.9.8
[pid  5584] open("/lib/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/lib64/tls/x86_64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/lib64/tls/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/lib64/x86_64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or   directory)
[pid  5584] open("/lib64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/tls/x86_64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/tls/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/x86_64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] write(1, "*** WARNING: renaming \"_ssl\" sin"..., 131*** WARNING: renaming "_ssl" since importing it failed: libssl.so.0.9.8: cannot open shared object file: No such file or directory
[pid  5584] open("/lib/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/lib64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/tls/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] open("/usr/lib64/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  5584] write(1, "*** WARNING: renaming \"_hashlib\""..., 135*** WARNING: renaming "_hashlib" since importing it failed: libssl.so.0.9.8: cannot open shared object file: No such file or directory

Mhhh, 그것은 모든 틀린 장소를보고있다. 나는 힌트를주는 것을 시도한다 :

CPPFLAGS="-I/home/fds/rms/local/include -I/home/fds/rms/local/include/openssl" LDFLAGS="-L/home/fds/rms/local/lib" ./configure --prefix=/home/fds/rms/local

그러나 아무것도 변하지 않으며 make는 / home / fds / rms / local / lib를 시도하지 않는 것 같습니다.

나는 이것을 몇 년 동안하지 않았기 때문에 아마도 뭔가를 바라 볼 것입니다. 누구든지 문제를 해결할 수 있습니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.Modules / Setup.dist를 편집하여 표준 위치에 있지 않은 OpenSSL의 위치를 ​​지정해야합니다. Python 2.5.1에서 SSL 지원 받기 :

    Modules / Setup.dist를 편집하여 표준 위치에 있지 않은 OpenSSL의 위치를 ​​지정해야합니다. Python 2.5.1에서 SSL 지원 받기 :

  2. ==============================

    2.Bourne 쉘 (/ bin / sh 또는 / bin / bash)에서 다음을 수행하십시오.

    Bourne 쉘 (/ bin / sh 또는 / bin / bash)에서 다음을 수행하십시오.

    $ LD_LIBRARY_PATH=/usr/local/lib
    $ export LD_LIBRARY_PATH
    $ make
    

    C 쉘 (/ bin / csh 또는 / bin / tcsh)에서 다음을 수행하십시오.

    % setenv LD_LIBRARY_PATH /usr/local/lib
    % make
    
  3. ==============================

    3._hashlib 모듈이 여전히 잘못된 OpenSSL 버전을 사용하여 끝났기 때문에 Modules / Setup 편집자가 충분하지 않았습니다. LD_LIBRARY_PATH는 SLES 시스템에서 런타임에 고려되지 않았습니다.

    _hashlib 모듈이 여전히 잘못된 OpenSSL 버전을 사용하여 끝났기 때문에 Modules / Setup 편집자가 충분하지 않았습니다. LD_LIBRARY_PATH는 SLES 시스템에서 런타임에 고려되지 않았습니다.

    GitHub patch : eddy-geek / python_custom_openssl.diff에 따라 setup.py를 편집하여 로컬 OpenSSL을 _ssl 및 _hashlib에 정적으로 연결 한 다음 clean && make를 작성했습니다.

    커스텀 오픈 솔라리스 버전으로 파이썬을 컴파일 할 때 Coredump의 Stack Overflow에서 정적 링크를 사용하는 이유에 대해 자세히 설명합니다.

  4. ==============================

    4.다음은 Python 2.7.11에서 사용한 전체 프로세스입니다.

    다음은 Python 2.7.11에서 사용한 전체 프로세스입니다.

    최상위 Python2.7.11 소스 디렉토리에서 :

  5. ==============================

    5.나는 정적 openssl과 정적 libintl에 대해 아래 2와 3에 대한 몇 가지 패치 세트를 가지고있다.

    나는 정적 openssl과 정적 libintl에 대해 아래 2와 3에 대한 몇 가지 패치 세트를 가지고있다.

    openssl (첫 번째 패치)에서는 env var OPENSSL_ROOT를 설정해야합니다.

    이것은 http://gist.github.com/eddy-geek/9604982의 패치를 기반으로합니다.

    파이썬 2.7.14 :

    https://gist.github.com/rkitover/2d9e5baff1f1cc4f2618dee53083bd35

    https://gist.github.com/rkitover/afab7ed3ac7ce1860c43a258571c8ae1

    파이썬 3.6.3 :

    https://gist.github.com/rkitover/93d89a679705875c59275fb0a8f22b45

    https://gist.github.com/rkitover/b18f19eafda3775a9652cc9cdf3ec914

  6. ==============================

    6.내가 openssl에 대한 로그를 얻을 때까지 나는 같은 결과를 얻고 있었다. 거기에서 openssl을 빌드 할 때 -fPIC를 사용해야한다는 것을 알았습니다. 확장 '_ssl'확장 기능 :

    내가 openssl에 대한 로그를 얻을 때까지 나는 같은 결과를 얻고 있었다. 거기에서 openssl을 빌드 할 때 -fPIC를 사용해야한다는 것을 알았습니다. 확장 '_ssl'확장 기능 :

    gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/home/feramos/Python-2.7.3/Include -I/home/feramos/Python-2.7.3 -c /home/feramos/Python-2.7.3/Modules/_ssl.c -o build/temp.linux-x86_64-2.7/home/feramos/Python-2.7.3/Modules/_ssl.o
    gcc -pthread -shared build/temp.linux-x86_64-2.7/home/feramos/Python-2.7.3/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_ssl.so
    /usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(x86_64cpuid.o): relocation R_X86_64_PC32 against `OPENSSL_cpuid_setup' can not be used when making a shared object; recompile with -fPIC
    
    openssl-0.9.8g]# .config -fPIC
    

    그런 다음 make를 만들어 openssl을 설치하고 Python을 다시 빌드하십시오.

  7. ==============================

    7.나는 Python2.7.13을 만들고 있는데, 나는이 같은 문제를 안다. 2.7.13의 경우 "openssl1.0.0e"이상을 사용해야 작동합니다. 나는 openssl-0.9.8g를 시도했으나 작동하지 않는다. 그리고 어쨌든 모듈 / Setup.dist를 수정하는 것만으로는 만들 수 없으므로 _ssl.o를 수동으로 컴파일해야합니다. 내가 제공 한 openssl-0.9.8g가 작동하지 않고 시스템 기본 libssl.so.10을 검색했기 때문에 이것이 작동하지 않는다고 생각합니다.

    나는 Python2.7.13을 만들고 있는데, 나는이 같은 문제를 안다. 2.7.13의 경우 "openssl1.0.0e"이상을 사용해야 작동합니다. 나는 openssl-0.9.8g를 시도했으나 작동하지 않는다. 그리고 어쨌든 모듈 / Setup.dist를 수정하는 것만으로는 만들 수 없으므로 _ssl.o를 수동으로 컴파일해야합니다. 내가 제공 한 openssl-0.9.8g가 작동하지 않고 시스템 기본 libssl.so.10을 검색했기 때문에 이것이 작동하지 않는다고 생각합니다.

  8. ==============================

    8.LDPATH에 -Wl, -rpath, / home / fds / rms / local / lib를 추가하십시오.

    LDPATH에 -Wl, -rpath, / home / fds / rms / local / lib를 추가하십시오.

  9. from https://stackoverflow.com/questions/5937337/building-python-with-ssl-support-in-non-standard-location by cc-by-sa and MIT license