はじめに
さくらのレンタルサーバにはデフォルトでPython 2.7が入っています(スタンダードプラン、2018年12月現在)が、TLSに対応していません。
そのため、今日のほとんどのHTTPSサイトにアクセスできず、pipなども使えません。つらい。
terminal
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
Collecting pip
/tmp/tmpQzUTJP/pip.zip/pip/_vendor/urllib3/util/ssl_.py:369: SNIMissingWarning: An HTTPS request has been made, but the SNI (Server Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
/tmp/tmpQzUTJP/pip.zip/pip/_vendor/urllib3/util/ssl_.py:160: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '_ssl.c:507: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version'),)': /simple/pip/
リンクしているOpenSSLのバージョンが古いようです。
terminal
$ python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 0.9.8zf 19 Mar 2015
というわけで、新しいOpenSSLを取ってきて、Pythonを自分でビルドしてみたいと思います。
なお、このサーバはFreeBSDなので、Linuxとはちょっとコマンドが違う部分があります。
例えば、Linuxでいうところのmake
(GNU make)は gmake
です。
必要なもの
- Python 2.7のソースコード
- OpenSSLのソースコード
OpenSSL
※さくらのレンタルサーバでHTTPS (TLS) 対応のGitをビルドした記録で紹介している手順と同じです。
terminal
$ openssl version
OpenSSL 1.0.2o 27 Mar 2018
などと出るのですが、ライブラリやヘッダファイルは「0.9.8」であるらしく、このままだとうまくいきません。
よって、まずはOpenSSLを自前で入れます。
terminal
# 作業場所は適当に
$ mkdir -p ~/.local/src
$ cd ~/.local/src
$ wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
$ tar xvfz openssl-1.0.2q.tar.gz
$ cd openssl-1.0.2q
$ ./config --prefix=${HOME}/.local -fPIC
$ gmake
$ gmake install
バージョンを確認。
terminal
$ ~/.local/bin/openssl version
OpenSSL 1.0.2q 20 Nov 2018
第一段階突破。
Python 2.7
terminal
$ cd ~/.local/src
$ wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
$ tar xvfz Python-2.7.15.tgz
$ cd Python-2.7.15
$ env CXX=/usr/bin/g++ ./configure --prefix=${HOME}/.local --enable-unicode=ucs4
$ gmake
$ gmake install
これで新しいOpenSSLを使ってくれるはず。
terminal
$ ~/.local/bin/python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.2q 20 Nov 2018
キター。
そして get-pip.py
も動きます。
terminal
$ ~/.local/bin/python get-pip.py
Collecting pip
Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
Collecting setuptools
Downloading https://files.pythonhosted.org/packages/37/06/754589caf971b0d2d48f151c2586f62902d93dc908e2fd9b9b9f6aa3c9dd/setuptools-40.6.3-py2.py3-none-any.whl (573kB)
Collecting wheel
Downloading https://files.pythonhosted.org/packages/ff/47/1dfa4795e24fd6f93d5d58602dd716c3f101cfd5a77cd9acbe519b44a0a9/wheel-0.32.3-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-18.1 setuptools-40.6.3 wheel-0.32.3
あとは好きにパッケージを追加できます。
terminal
$ ~/.local/bin/pip install numpy
めでたしめでたし。