PythonをソースからインストールしてAnsibleを導入

[Amazon Linuxにインストールされているpython2.7を使用してAnsibleをオフラインインストールする手順](https://qiita.com/ch7821/items/22735f2a9c8f7e0d4b2c)を掲載しましたが、これでうまくいかないケースに遭遇したので、ソースからコンパイルする手順を備忘録として、Python2.7系とPython3.6系それぞれ残しておきます。
いろいろ稀、というか残念なケースかと思いますが。。。

# 前提環境
+ Linux/Unix系OS
+ コンパイラ系（各環境に適したものを`yum install "gcc*"`等で導入）
+ zlib系（各環境に適したものを`yum install "zlib*`等で導入）

ソースからコンパイルするので当然gcc系がいります。zlibはpipの前提です（ないとコンパイル時にエラー）。メインのパッケージだけでなく、"-devel"系も要ります。`rpm -qa | grep -e zlib -e gcc`あたりで確認した上で、必要に応じて導入したところからスタート。

# 共通で必要なもの
+ [OpenSSL](https://www.openssl.org/source/)（openssl-1.1.0g.tar.gz）
+ [Python](https://www.python.org/downloads/source/)（Python-2.7.14.tgz, Python-3.6.4.tgz）

（）内は今回ダウンロードしたファイル

# インストール手順
## 1. OpenSSLのインストール
```bash
tar xzf openssl-1.1.0g.tar.gz
cd openssl-1.1.0g
./config
make
make install
echo 'export LD_LIBRARY_PATH=/usr/local/lib64' >> /etc/profile
. /etc/profile
```

まずはOpenSSLを`config`して`make`して`make install`します。pipのコンパイルや実行時に"libssl.so.1.1"が必要になるので、LD_LIBRARY_PATHを通しておきます。

## 2. Pythonのインストール
```bash:
tar xzf Python-x.x.xx.tgz
cd Python-x.x.xx
./configure --prefix=/usr/local/pythonXX
vi ./Modules/Setup
```

ここでさっきインストールしたOpenSSLの設定を入れます。具体的には以下行の***コメントアウトを外して有効に***します。

```text:./Modules/Setup
SSL=/usr/local/ssl
 _ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto
```

```bash
make
make install
```

ここまでは2.7と3.6とで同じです。2.7にはmakeしてもsetuptoolsとpipのモジュールが入らないようなので、あとから個別にインストールします（3.6はmakeで一緒にインストールされました）。

```bash:2.7系のみ
unzip setuptools-38.5.2.zip
cd setuptools-38.5.2
/usr/local/bin/python27/bin/python setup.py install
cd ..
tar xzf pip-9.0.1.tar.gz
cd pip-9.0.1
/usr/local/bin/python27/bin/python setup.py install
```

## 3. Ansible(winrm)インストール
あとはAnsibleをインストールするだけです。必要なモジュールファイル（後にリスト）を格納したディレクトリを"`-f`"で指定し、"`--no-index`"でpypi.python.orgを見にいかないようにします（直接インターネット接続できない前提なので）。

```bash:Ansible/pywinrm
/usr/local/bin/pythonXX/bin/pip install -f ./ --no-index ansible-2.4.3.0.tar.gz
/usr/local/bin/pythonXX/bin/pip install -f ./ --no-index pywinrm-0.3.0-py2.py3-none-any.whl
```

## 必要なもの（今回使ったもの）
### 2.7系
+ setuptools-38.5.2.zip
+ pip-9.0.1.tar.gz
+ Jinja2-2.10-py2.py3-none-any.whl
+ MarkupSafe-1.0.tar.gz
+ PyNaCl-1.2.1-cp27-cp27m-manylinux1_x86_64.whl
+ PyYAML-3.12.tar.gz
+ ansible-2.4.3.0.tar.gz
+ asn1crypto-0.24.0-py2.py3-none-any.whl
+ bcrypt-3.1.4-cp27-cp27m-manylinux1_x86_64.whl
+ certifi-2018.1.18-py2.py3-none-any.whl
+ cffi-1.11.5-cp27-cp27m-manylinux1_x86_64.whl
+ chardet-3.0.4-py2.py3-none-any.whl
+ cryptography-2.1.4-cp27-cp27m-manylinux1_x86_64.whl
+ enum34-1.1.6-py2-none-any.whl
+ idna-2.6-py2.py3-none-any.whl
+ ipaddress-1.0.19.tar.gz
+ ntlm_auth-1.1.0-py2.py3-none-any.whl
+ paramiko-2.4.1-py2.py3-none-any.whl
+ pyasn1-0.4.2-py2.py3-none-any.whl
+ pycparser-2.18.tar.gz
+ pywinrm-0.3.0-py2.py3-none-any.whl
+ requests-2.18.4-py2.py3-none-any.whl
+ requests_ntlm-1.1.0-py2.py3-none-any.whl
+ setuptools-38.5.2-py2.py3-none-any.whl
+ six-1.11.0-py2.py3-none-any.whl
+ urllib3-1.22-py2.py3-none-any.whl
+ xmltodict-0.11.0-py2.py3-none-any.whl

### 3.6系
+ Jinja2-2.10-py2.py3-none-any.whl
+ MarkupSafe-1.0.tar.gz
+ PyNaCl-1.2.1-cp36-cp36m-manylinux1_x86_64.whl
+ PyYAML-3.12.tar.gz
+ ansible-2.4.3.0.tar.gz
+ asn1crypto-0.24.0-py2.py3-none-any.whl
+ bcrypt-3.1.4-cp36-cp36m-manylinux1_x86_64.whl
+ certifi-2018.1.18-py2.py3-none-any.whl
+ cffi-1.11.5-cp36-cp36m-manylinux1_x86_64.whl
+ chardet-3.0.4-py2.py3-none-any.whl
+ cryptography-2.1.4-cp36-cp36m-manylinux1_x86_64.whl
+ idna-2.6-py2.py3-none-any.whl
+ ntlm_auth-1.1.0-py2.py3-none-any.whl
+ paramiko-2.4.1-py2.py3-none-any.whl
+ pyasn1-0.4.2-py2.py3-none-any.whl
+ pycparser-2.18.tar.gz
+ pywinrm-0.3.0-py2.py3-none-any.whl
+ requests-2.18.4-py2.py3-none-any.whl
+ requests_ntlm-1.1.0-py2.py3-none-any.whl
+ setuptools-38.5.2-py2.py3-none-any.whl
+ six-1.11.0-py2.py3-none-any.whl
+ urllib3-1.22-py2.py3-none-any.whl
+ xmltodict-0.11.0-py2.py3-none-any.whl

以上、インターネットに繋がらないなら、いっそソースからコンパイルしていったほうが手っ取り早いこともある、という教訓を得た今日この頃でした。