Fabricインストールメモ

Hadoopのような複数台のマシンを相手にする作業だと一括でコマンド発行したいことがあります。
その際に各マシンにいちいちSSHでログインして作業するのは面倒です。

なのでその辺りを解決するツールが欲しくなります。

Hadoop徹底入門だとparallel-sshが紹介されています。

ただこれだとsudoがうまくいかないんですよね。

sudo: sorry, you must have a tty to run sudo

と言われます。

Google Code Archive - Long-term storage for Google Code Project Hosting.によれば-xオプションつけてsshの-tオプションを渡せば良いように見えますが、

pssh -h hostlist -O "StrictHostKeyChecking=no" -x -t -A -l ユーザ -i "sudo ..."

とやっても状況は同じです。

うまくいく方法があるかもしれないですが、これは置いといてFabricネタを書きます。これが今日のメイン。

FabricはPythonで作られたデプロイツールです。Rubyで作られたCapistranoとの対比であげられることが多いかも。

Fabricは1.3から並列実行できるようになりました。

http://docs.fabfile.org/en/1.3.3/usage/parallel.html

この機能はPython 2.6で追加されたmultiprocessingモジュールに依存しています。

なのでここではPython 2.6 + Fabric 1.3系のインストール方法をCentOS 5.6とWindows XPの両方で書きます。あ、Windowsの方はPython 2.7使います。バイナリ配布が2.7だったので。

まずCentOS5.6へのインストール方法です。

CentOS5系はPython 2.4系しか入っていないのでPython 2.6をインストールする必要があります。

EPEL追加

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

# vi /etc/yum.repos.d/epel.repo
[epel]
...
enabled=0
...

python26とpython26-develのインストール

# yum install python26 python26-devel --enablerepo=epel

easy_install-2.6のインストール

# wget http://peak.telecommunity.com/dist/ez_setup.py
# python26 ez_setup.py

pip-2.6のインストール

# easy_install-2.6 pip

fabricのインストール

# pip-2.6 install fabric

これでインストールは終了です。

fabfile.pyを以下のように用意します。

from fabric.api import run

def host_type():
  run('uname -s')

そして以下のように実行します。

$ fab -H localhost -u ユーザ -p パスワード host_type

並列実行の場合は以下のように-Pオプションを指定して実行します。

fab -H hostA,hostB -u ユーザ -p パスワード -P host_type

次はWindows XPの場合

Download Python | Python.orgからpython-2.7.2.msiをダウンロードしてPython 2.7をインストールします。

setuptools · PyPIからsetuptools-0.6c11.win32-py2.7.exeをダウンロードしてeasy_installをインストールします。

C:\Python27とC:\Python27\Scriptsを環境変数PATHに追加してpipをインストール後にFabricをインストールします。

easy_install pip
pip install fabric

がしかし、

building 'Crypto.Random.OSRNG.winrandom' extension

warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.


error: Unable to find vcvarsall.bat

と言われます。

どうもPyCryptoが必要らしいのでインストールします。

The Voidspace Python Modulesからpycrypto-2.3.win32-py2.7.zipをダウンロードしてインストールします。

そして

fab -H localhost -u ユーザ -p パスワード host_type

と実行すると下記のエラーになります。

ImportError: No module named win32api

よくわからんですが、どうもpywin32が必要らしいです。

Python for Windows Extensions - Browse /pywin32/Build216 at SourceForge.netからpywin32-216.win32-py2.7.exeをダウンロードしてインストールします。

いじょ。