Python
Ansible

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

Amazon Linuxにインストールされているpyhon2.7を使用してAnsibleをオフラインインストールする手順を掲載しましたが、これでうまくいかないケースに遭遇したので、ソースからコンパイルする手順を備忘録として、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(openssl-1.1.0g.tar.gz)
  • Python(Python-2.7.14.tgz, Python-3.6.4.tgz)

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

インストール手順

1. OpenSSLのインストール

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のインストール

tar xzf Python-x.x.xx.tgz
cd Python-x.x.xx
./configure --prefix=/usr/local/pythonXX
vi ./Modules/Setup

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

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

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

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を見にいかないようにします(直接インターネット接続できない前提なので)。

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

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