在 Centos 5 上使用非系统 Openssl 编译 Python 2.7.12
Compiling Python 2.7.12 with non-system Openssl on Centos 5
我目前正在尝试让 Python 2.7.12 在 Centos 5 主机上使用 Openssl 1.0.2h 进行编译。
原因是我需要在此主机上使用 Paramiko 2 运行,但它不支持系统提供的 OpenSSL 版本,即 0.9.8e-fips-rhel5 2008 年 7 月 1 日。
我在这里找到了一些很好的提示和技巧,但它似乎不起作用。我现在发布这篇文章是希望有人能发现我所做的 wrong/is 遗漏的事情。
对于 OpenSSL 设置,我已完成以下操作:
OPENSSL_ROOT="$HOME/.build/openssl-1.0.1e"
cd /tmp
curl http://www.openssl.org/source/openssl-1.0.2h.tar.gz | tar zxvf -
cd openssl-1.0.2.h
mkdir -p "$OPENSSL_ROOT"
./config no-hw --prefix="$OPENSSL_ROOT" --openssldir=...
make install
然后因为我不想用 2.7.12 替换安装的系统 Python 我做了以下操作:
首先我将 /usr/local/lib 添加到 /etc/ld.so.conf 和 运行 ldconfig.
在那之后我 运行:
cd /tmp
wget http://python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
tar xf Python-2.7.12.tar.xz
cd Python-2.7.12
./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" --prefix=/usr/local --enable-unicode=ucs4 --enable-shared
make && make altinstall
这是我想针对新版本的 OpenSSL 编译它的时候,但没有,正如您从此处的输出中看到的那样:
[root@an-host openssl-1.0.2h]# python2.7 -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
而且我确信我运行正在编译新编译的版本,因为它在此处得到回应:
[root@an-host openssl-1.0.2h]# python2.7
Python 2.7.12 (default, Aug 1 2016, 11:46:42)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
我什至用 Yum 删除了 openssl-devel,但它似乎仍然 care/compile 反对 1.0.2h。
此刻这让我有点生气所以非常感谢input/feedback/help。
我想我试图复制太可爱的解决方案并混合搭配 - 整理并简化了一点并最终让它发挥作用。
这是我这次做的:
下载并安装 OpenSSL
cd /tmp
curl http://www.openssl.org/source/openssl-1.0.2h.tar.gz | tar zxvf -
cd openssl-1.0.2.h
./config shared --prefix=/usr/local/
make && make install
设置一些环境变量
export LDFLAGS="-L/usr/local/lib/"
export LD_LIBRARY_PATH="/usr/local/lib/"
export CPPFLAGS="-I/usr/local/include -I/usr/local/include/openssl"
下载并安装Python 2.7.12
wget http://python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
tar xf Python-2.7.12.tar.xz
cd Python-2.7.12
./configure --prefix=/usr/local/ --enable-unicode=ucs4 --enable-shared
make && make altinstall
现在它按预期工作,显示更新的 OpenSSL 版本。
[root@an-host Python-2.7.12]# python2.7
Python 2.7.12 (default, Aug 1 2016, 14:48:09)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.0.2h 3 May 2016
然而,它仍然没有按预期工作。 :( 运行 我从 Paramiko 收到以下错误的程序:
RuntimeError: You are linking against OpenSSL 0.9.8, which is no longer support by the OpenSSL project. You need to upgrade to a newer version of OpenSSL.
我找到的解决方案是 运行。
卸载并重新安装 Cryptography 点点滴滴
pip2.7 uninstall cryptography
pip2.7 install cryptography
毕竟 - 它现在可以工作了。
我目前正在尝试让 Python 2.7.12 在 Centos 5 主机上使用 Openssl 1.0.2h 进行编译。
原因是我需要在此主机上使用 Paramiko 2 运行,但它不支持系统提供的 OpenSSL 版本,即 0.9.8e-fips-rhel5 2008 年 7 月 1 日。
我在这里找到了一些很好的提示和技巧,但它似乎不起作用。我现在发布这篇文章是希望有人能发现我所做的 wrong/is 遗漏的事情。
对于 OpenSSL 设置,我已完成以下操作:
OPENSSL_ROOT="$HOME/.build/openssl-1.0.1e"
cd /tmp
curl http://www.openssl.org/source/openssl-1.0.2h.tar.gz | tar zxvf -
cd openssl-1.0.2.h
mkdir -p "$OPENSSL_ROOT"
./config no-hw --prefix="$OPENSSL_ROOT" --openssldir=...
make install
然后因为我不想用 2.7.12 替换安装的系统 Python 我做了以下操作:
首先我将 /usr/local/lib 添加到 /etc/ld.so.conf 和 运行 ldconfig.
在那之后我 运行:
cd /tmp
wget http://python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
tar xf Python-2.7.12.tar.xz
cd Python-2.7.12
./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" --prefix=/usr/local --enable-unicode=ucs4 --enable-shared
make && make altinstall
这是我想针对新版本的 OpenSSL 编译它的时候,但没有,正如您从此处的输出中看到的那样:
[root@an-host openssl-1.0.2h]# python2.7 -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
而且我确信我运行正在编译新编译的版本,因为它在此处得到回应:
[root@an-host openssl-1.0.2h]# python2.7
Python 2.7.12 (default, Aug 1 2016, 11:46:42)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
我什至用 Yum 删除了 openssl-devel,但它似乎仍然 care/compile 反对 1.0.2h。
此刻这让我有点生气所以非常感谢input/feedback/help。
我想我试图复制太可爱的解决方案并混合搭配 - 整理并简化了一点并最终让它发挥作用。
这是我这次做的:
下载并安装 OpenSSL
cd /tmp
curl http://www.openssl.org/source/openssl-1.0.2h.tar.gz | tar zxvf -
cd openssl-1.0.2.h
./config shared --prefix=/usr/local/
make && make install
设置一些环境变量
export LDFLAGS="-L/usr/local/lib/"
export LD_LIBRARY_PATH="/usr/local/lib/"
export CPPFLAGS="-I/usr/local/include -I/usr/local/include/openssl"
下载并安装Python 2.7.12
wget http://python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
tar xf Python-2.7.12.tar.xz
cd Python-2.7.12
./configure --prefix=/usr/local/ --enable-unicode=ucs4 --enable-shared
make && make altinstall
现在它按预期工作,显示更新的 OpenSSL 版本。
[root@an-host Python-2.7.12]# python2.7
Python 2.7.12 (default, Aug 1 2016, 14:48:09)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.0.2h 3 May 2016
然而,它仍然没有按预期工作。 :( 运行 我从 Paramiko 收到以下错误的程序:
RuntimeError: You are linking against OpenSSL 0.9.8, which is no longer support by the OpenSSL project. You need to upgrade to a newer version of OpenSSL.
我找到的解决方案是 运行。
卸载并重新安装 Cryptography 点点滴滴pip2.7 uninstall cryptography
pip2.7 install cryptography
毕竟 - 它现在可以工作了。