ansibleというかpython絡みでインストールエラーが発生するのは稀によくあるので、備忘録として残しておきます。
今回使うCentOS7は、VagrantBoxの CentOS7.0 x86_64 minimal (VirtualBoxGuestAddtions 4.3.14) となります。
- 公式のインストールチュートリアル
- デフォルトで必要なもの
- バージョンの確認
- 早速インストールしてみる
- ansibleの動作確認
- インストール時のエラー
- sudo pip install paramiko PyYAML Jinja2 httplib2
- ansible all -m ping --ask-pass のエラーその1
- ansible all -m ping --ask-pass のエラーその2
- もっと簡単にインストールする
- yumでインストールした場合のバージョン
- ついでにFabricもインストールしよう!
- Fabricのインストール
- Fabricの動作確認
- 雑感
公式のインストールチュートリアル
デフォルトで必要なもの
- python2.4以上
- git
- python-devel
- sshpass
※ python-devel はCentOS7で初期インストールされていないので注意。
※ sshpassはチュートリアルを正常動作させるために必要です。
バージョンの確認
# バージョン確認 [vagrant@node1 ~]$ python -V Python 2.7.5 [vagrant@node1 ~]$ easy_install --version setuptools 0.9.8
早速インストールしてみる
# epelのインストール sudo yum install -y epel-release # sshpassの新ストール sudo yum install -y sshpass # python-develをインストール sudo yum install -y python-devel # pipと依存ライブラリをインストール sudo easy_install pip sudo pip install paramiko PyYAML Jinja2 httplib2 # ansibleをインストール git clone git://github.com/ansible/ansible.git --recursive cd ./ansible source ./hacking/env-setup
ansibleの動作確認
バージョンの確認
[vagrant@node1 ansible]$ ansible --version ansible 1.9 (devel 1e867b0b8e) last updated 2015/02/15 03:30:39 (GMT -400) lib/ansible/modules/core: (detached HEAD 4ba2d55589) last updated 2015/02/15 03:30:51 (GMT -400) lib/ansible/modules/extras: (detached HEAD 2ffd7235e5) last updated 2015/02/15 03:31:03 (GMT -400) v2/ansible/modules/core: (detached HEAD 34784b7a61) last updated 2015/02/15 03:31:14 (GMT -400) v2/ansible/modules/extras: (detached HEAD 312d59061c) last updated 2015/02/15 03:31:26 (GMT -400) configured module search path = None
動作確認
# 自分にpingを送信するため一度sshしてknown_hostsを生成しておく ssh vagrant@127.0.0.1 # デフォルトのインベントリファイルを生成する echo "127.0.0.1" > ~/ansible_hosts export ANSIBLE_HOSTS=~/ansible_hosts # pingする [vagrant@node1 ansible]$ ansible all -m ping --ask-pass SSH password: 127.0.0.1 | success >> { "changed": false, "ping": "pong" }
インストール時のエラー
sudo pip install paramiko PyYAML Jinja2 httplib2
以下のエラーが出る場合は python-devel がインストールされていません。インストールしましょう。
sudo pip install paramiko PyYAML Jinja2 httplib2 ・・・中略・・・ gcc -pthread -fno-strict-aliasing -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c src/MD2.c -o build/temp.linux-x86_64-2.7/src/MD2.o src/MD2.c:31:20: 致命的エラー: Python.h: そのようなファイルやディレクトリはありません #include "Python.h" ^ コンパイルを停止しました。 error: command 'gcc' failed with exit status 1 ---------------------------------------- Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-pJjJCP/pycrypto/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-m6JKiC-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-pJjJCP/pycrypto
ansible all -m ping --ask-pass のエラーその1
以下のエラーが出る場合は sshpass がインストールされていません。
[vagrant@node1 ansible]$ ansible all -m ping --ask-pass SSH password: 127.0.0.1 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program
sshpassをインストールする
# epelのインストール sudo yum install -y epel-release # sshpassの新ストール sudo yum install -y sshpass
ansible all -m ping --ask-pass のエラーその2
ansible all -m ping --ask-pass 実行時に以下のエラーが出る場合は、対象サーバに1度もsshしていない、つまりknown_hostsが生成されていない場合に発生します。1回sshするなりしてknown_hostsを生成しておきましょう。
[vagrant@node1 ansible]$ ansible all -m ping --ask-pass SSH password: 127.0.0.1 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
もっと簡単にインストールする
Installation Guide — Ansible Documentation
公式サイトによると、EPELのver6か7が入っている場合、sudo yum install ansible でインストールできるとの事です。(実際できました)
しかしyumなので、まず間違いなく最新バージョンは入りません。
yumでインストールした場合のバージョン
1.8.2-1.el7が入るようです。しかし前述のやり方なら最新版のv1.9がインストールできます。この差は以外とデカイので、どちらのインストール方法を選ぶかは要検討ですね。
[vagrant@node1 ~]$ sudo yum instal ansible ======================================================================================================================================================= Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================================================================= インストール中: ansible noarch 1.8.2-1.el7 epel 1.5 M 依存性関連でのインストールをします: PyYAML x86_64 3.10-11.el7 base 153 k libyaml x86_64 0.1.4-11.el7_0 updates 55 k python-babel noarch 0.9.6-8.el7 base 1.4 M python-crypto x86_64 2.6.1-1.el7.centos extras 470 k python-ecdsa noarch 0.11-3.el7.centos extras 69 k python-httplib2 noarch 0.7.7-3.el7 epel 70 k python-jinja2 noarch 2.7.2-2.el7 base 515 k python-keyczar noarch 0.71c-2.el7 epel 218 k python-markupsafe x86_64 0.11-10.el7 base 25 k python-paramiko noarch 1.15.1-1.el7 epel 999 k python-pyasn1 noarch 0.1.6-2.el7 base 91 k python-six noarch 1.3.0-4.el7 base 18 k トランザクションの要約 ======================================================================================================================================================= インストール 1 パッケージ (+12 個の依存関係のパッケージ)
ついでにFabricもインストールしよう!
chefに対してAnsibleが有るように、capistranoに対してFabricがあります。Fabricはcapistranoと比較してシンプルで使いやすい構造になっています。chef + capistranoの重戦車と比較し、Ansible + Fabricはlightweightなので、個人使用や小規模プロジェクトにはおすすめです。
今回はAnsibleのインストールの過程でpipもインストールされているので、折角なのでFabricもインストールしてしまいましょう!
Fabricのインストール
[vagrant@node1 ~]$ pip install fabric Collecting fabric Downloading Fabric-1.10.1.tar.gz (209kB) ・・・中略・・・ ---------------------------------------- Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-3BAKrD/fabric/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-7sD1N8-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-3BAKrD/fabric [vagrant@node1 ~]$ sudo pip install fabric Collecting fabric Downloading Fabric-1.10.1.tar.gz (209kB) 100% |################################| 212kB 2.1MB/s Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.10 in /usr/lib/python2.7/site-packages (from fabric) Requirement already satisfied (use --upgrade to upgrade): ecdsa>=0.11 in /usr/lib/python2.7/site-packages (from paramiko>=1.10->fabric) Requirement already satisfied (use --upgrade to upgrade): pycrypto!=2.4,>=2.1 in /usr/lib64/python2.7/site-packages (from paramiko>=1.10->fabric) Installing collected packages: fabric Running setup.py install for fabric Installing fab script to /usr/bin Successfully installed fabric-1.10.1
Fabricの動作確認
バージョン確認
[vagrant@node1 ~]$ fab -V Fabric 1.10.1 Paramiko 1.15.2
Fabricの動作確認
まずは test.py を作成します。
def hello(): print("Hello world!")
以下で実行し、Hellow world! と表示されれば正常動作しています。
[vagrant@node1 ~]$ fab -f ./test.py hello Hello world! Done.
雑感
python系はアプリのインストールが大変難しい印象があります。あれをやってエラー、これをやってエラー・・・
ansibleも公式サイトのInstallation通りやったのにエラーがでました。これがCentOS5系どかだったらもう目も当てられない状況になるでしょう。インストール職人にしかインストールできない程難解かもしれません。
しかしansible自体は大変素晴らしい構成管理ツールだと思います。chefは大規模以外は冗長で気軽に使えるものではないし、puppetは海外での総合評価が1位のようですがansible程の手軽さはないです(多分)。なので、インストール作業さえ乗り越えれば後は楽になれますので頑張りましょう!
- 作者: Lorin Hochstein,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/04/16
- メディア: 大型本
- この商品を含むブログ (2件) を見る