Edited at

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

Amazon Linuxにインストールされているpython2.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

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