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
あたりで確認した上で、必要に応じて導入したところからスタート。
共通で必要なもの
()内は今回ダウンロードしたファイル
インストール手順
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の設定を入れます。具体的には以下行のコメントアウトを外して有効にします。
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で一緒にインストールされました)。
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を見にいかないようにします(直接インターネット接続できない前提なので)。
/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
以上、インターネットに繋がらないなら、いっそソースからコンパイルしていったほうが手っ取り早いこともある、という教訓を得た今日この頃でした。