CentOS5 はもう使っちゃダメですよ
- 新しい OS に移行を急ぎましょう。
- rpm ではもはやカバーできないので、
/usr/local
を使って 完全にやっつけ仕事です。
OpenSSL 最新版のライブラリをコンパイル
https://www.openssl.org/source/ から、 openssl-1.0.2o.tar.gz
を他の環境でダウンロード(1.0.2o は現時点での Long Term Support (LTS) release の 1.0.2 シリーズの最新版です)してホームディレクトリに置いておきます。他の環境、というのは CentOS5 の OpenSSL は古いのでた例えば CentOS5 上の curl を使うと https の TLS のバージョンについていけず接続できないためです。
$ sudo su
# cd /usr/local/src
# tar xvfz ~/openssl-1.0.2o.tar.gz
# cd openssl-1.0.2o
# CFLAGS=-fPIC ./config shared
# make install
参考: Compile OpenSSL with the 'shared' option?
Curl を、インストールした OpenSSL ライブラリを使って作り直し
pyenv は、各バージョンの Python を curl を使ってダウンロードしますが、CentOS の curl は OpenSSL が古いため TLS のバージョンについていけず https プロトコルを使ってダウンロードできません。そこで上でインストールした OpenSSL を使用した curl を /usr/local
以下にインストールします。これで TLS のバージョンに追従できるようになります。
https://github.com/curl/curl/releases から、 curl-7.60.0.tar.gz
を他の環境からダウンロード(7.60.0 は現時点での最新版です)してホームディレクトリに置いておきます。他の環境、というのは CentOS5 の OpenSSL は古いので例えば CentOS5 上の curl を使うと https の TLS のバージョンについていけず接続できないためです。
$ sudo su
# cd /usr/local/src
# tar xvfz ~/curl-7.60.0.tar.gz
# cd curl-7.60.0
# PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --prefix=/usr/local --enable-libcurl-option
# make
# make install
参考: error compiling curl with my own openssl version
/usr/local/bin
にパスが通っていないので、次のファイルを置きます。
pathmunge /usr/local/bin
/etc/profile.d/usrlocal.sh
を置いたら、いったん /usr/local/bin
のパスを反映するためログアウトしてログインします。ログインしたら、 OpenSSL/1.0.2o が curl で使われることを確認します。
$ curl -V
curl 7.60.0 (x86_64-pc-linux-gnu) libcurl/7.60.0 OpenSSL/1.0.2o zlib/1.2.3
Release-Date: 2018-05-16
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
ldconfig で /usr/local/ 以下のライブラリを認識させます
/usr/local/ssl/lib/
# ldconfig
pyenv 最新版をダウンロードして配置
https://github.com/pyenv/pyenv より pyenv-master.zip
をダウンロードしてホームディレクトリにおいておきます。先ほどインストールした curl は TLS に追随するためダウンロード可能です。git コマンドを使いたいところですが、CentOS5 の git も https の TLS のバージョンについていけず github に接続できません。先ほどコンパイルした curl のライブラリを使えば git もコンパイルはできるのですが、ダウンロードせず終了する謎の挙動がでてそれ以上深追いしていません。
ダウンロード後ディレクトリ名を変えて、
$ unzip pyenv-master.zip
$ mv pyenv-master .pyenv
~/.bash_profile
に 追加します。
# User specific environment and startup programs
export PYENV_ROOT="$HOME/.pyenv"
PATH=$PATH:$HOME/bin
PATH="$PYENV_ROOT/bin:$PATH"
export PATH
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
# 必要なら pip などで使う proxy 追加
export http_proxy=http://10.1.1.1:3128/
export https_proxy=http://10.1.1.1:3128/
ここでログアウトしてログインし、環境変数を再構築します。
お好みの Python をインストール
openssl-1.0.2o を使用して Python をコンパイルするため pyenv install する前に環境変数を付加します。
$ export CFLAGS="-I/usr/local/ssl/include"
$ export LDFLAGS="-L/usr/local/ssl/lib/"
$ pyenv install 3.6.5
略
$ pyenv global 3.6.5
$ pyenv versions
system
* 3.6.5 (set by /home/yamachan/.python-version)
$ python -V
Python 3.6.5
/usr/local の OpenSSL がリンクされていることを確認
- OpenSSL 1.0.2o とでているので
/usr/local
の OpenSSL を読んでることが確認できました
$ python -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2o 27 Mar 2018