Net::ZooKeeperを試してみたかったのになぜかAlien::ZooKeeper作りかけてやめた話
最近、zookeeper が意外と使えるかもなぁと思って、ちょっと試してみるかと Perl バインディングであるNet::ZooKeeper
を cpan から入れようとしたところ、当然ですが client library およびビルド環境がないと入らなくて、じゃあそれの管理も必要だなぁと。CentOS なら rpm でもいんだけど、公式ではまだ提供されてないっぽい(trunk みると spec ファイルとか入ってるのでそのうち出るのかな?)。
クライアントライブラリごとき、OS のパッケージ管理に入れるのもなんかかったるいなぁと思い、Net::ZooKeeper
入れるときに perl のライブラリっぽく入れてくれる方法ないかなぁというところで、ふと gfx さんのAlien::RRDtool
を思い出して、コピってAlien::ZooKeeper
を作り始めました。RRDs と同様、Net::ZooKeeper
も実は zookeeper 本体の tar.gz の中に同梱されているので、ちょちょっと書き換えるだけで実装できた気がしましたが、結論から言うと激しくダメでした。
ダメだったポイントとかやる気が無くなった話
一番は、Net::ZooKeeper
の XS のビルド時にライブラリを簡単に静的リンクさせられないっぽいので、結局 Alien でライブラリとか入れたところで意味がないということ。
Alien::RRDtool
は動的リンクしてると思いこんでましたが、色々読んでいくとRRDs
のビルドの時にRPATH
指定して静的リンクしてました。まぁよくよく考えればそりゃそうだろって感じですが。。。
Net::ZooKeeper
のMakefile.PL
はそれっぽい指定もできないなぁというところで、飽きてきたので諦めました。あとなんかNet::ZooKeeper
が色々インストール周り微妙で、サーバ起動してないとこけるし、このテストのこの辺りが perl-5.14.2 だと必ずテストこけるとか、MacOS だともっと一杯こけるとかで、だいぶやる気がなくなりました。。。
後述のヘッダファイルの位置とかもなんか色々微妙だし、Alien で入るようになればポータブルにインストールできて嬉しい気がしたんですが、やる気の無さが勝りました。
素直にインストール
というわけで素直にインストール。細かいことは考えずとりあえず動けばいいや。
CentOS5
ライブラリとヘッダファイル用に rpm 入れるためのレポジトリを指定。今回は rtilabs さんを拝借。普通に tar.gz からmake install
でもいいですし、trunk の spec 使って自分で作ってもいいですし、将来的には公式な rpm が出るんじゃないかなぁとか期待。
# vim /etc/yum.repos.d/rtilabs.repo
[rtilabs]
name=rtilabs Repository $releasever - $basearch
baseurl=http://rtilabs.net/files/repos/yum/rh/5/$basearch/
#mirrorlist=http://rtilabs.net/files/repos/yum/rh/5/$basearch/mirrorlist
enabled=0
gpgcheck=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rtilabs-rti
# yum --enablerepo=rtilabs install zookeeper-lib zookeeper-devel
微妙にNet::ZooKeeper
が想定してる位置とヘッダファイルの位置が違うので手で修正。
# cd /usr/include
# ln -s zookeeper/proto.h .
# ln -s zookeeper/recordio.h .
# ln -s zookeeper/zookeeper.h .
# ln -s zookeeper/zookeeper.jute.h .
# ln -s zookeeper/zookeeper_log.h .
# ln -s zookeeper/zookeeper_version.h .
これでインストールできる。テストは先述のとおり微妙な作りなので無視して入れましょう。
$ cpanm -v --force Net::ZooKeeper
MacOS
homebrew で入れられるので、client library もいれてくれるオプションあるかなぁと思って Formula みたらあるので指定したらバグってて効かねぇ!ruby わかんないけど適当に修正。
$ vim /usr/local/Library/Formula/zookeeper.rb
@@ -66,13 +66,13 @@ class Zookeeper < Formula
build_python = ARGV.include? "--python"
build_perl = ARGV.include? "--perl"
- build_c = build_python or build_perl or ARGV.include? "--c"
+ build_c = ARGV.include? "--c"
# Build & install C libraries.
cd "src/c" do
system "./configure", "--prefix=#{prefix}", "--disable-dependency-tracking", "--without-cppunit"
system "make install"
- end if build_c
+ end if build_c or build_python or build_perl
$ brew install -v --c zookeeper
ヘッダファイルが同じくアレなので修正。
$ cd /usr/local/include
$ ln -s zookeeper/proto.h .
$ ln -s zookeeper/recordio.h .
$ ln -s zookeeper/zookeeper.h .
$ ln -s zookeeper/zookeeper.jute.h .
$ ln -s zookeeper/zookeeper_log.h .
$ ln -s zookeeper/zookeeper_version.h .
あとはテスト無視してインストール。
$ cpanm -v --force Net::ZooKeeper
まとめ
なんというか、使い始めるまでの時間で無駄に消費してしまうのは、運用をいつも考えてしまうからなんですかねぇ。。。
いらんところで色々苦労したので結局 zookeeper 使っておもしろホゲホゲやる暇はなく時間切れ。きっとまた半年くらいは触れる時間はないんかなぁ〜。だれか色々遊んでみてくれてもいいのよ!