kumofs について
最近 OSS としてリリースされて話題の Key Value Store。 試して見ようと思ってインストールしたら何度かつまづいたので、 メモしておきます。
- Centos である
- gccが4.1系である
という条件でコケる傾向にあるようです。 kumofs 0.3.0 でこれを解決するのはなかなか面倒っぽかったのですが、さっそく 0.3.1 がリリースされて俺でもビルドできたので、似たような環境で悩んでる人に助けになれば。
環境
米国 VPS のひとつ Linode 上の Centos 5.1 でインストールを試みました。Rubygems が入ってる以外はほぼ登録直後の状態。デフォルトで入っていたgccは4.1.2でした。こいつが諸悪の根源だったようす。
手順
基本的には以下の手順どおり:
必要なもの
Githubのwikiを参考に、今回入れたものをとかデフォルトで入ってたものを明記しときます。
- linux: 2.6.18 (デフォルト)
- gcc = 4.4.0 (yumから)
- g++ = 4.4,0 (yumから)
- ruby = 1.8.7 (デフォルト)
- Tokyo Cabinet >= 1.4.41 (ソースから)
- MessagePack for C++ = 0.4.1 (ソースから)
- MessagePack for Ruby = 0.3.2 (gemから)
- libcrypto (openssl) (デフォルト)
- zlib (デフォルト)
- kumofs = 0.3.1 (ソースから)
gcc 4.4とg++ 4.4 をインストール
gcc/g++ 4.1だとkumofs のビルドに失敗します( _syncandaddfetch_4 がどうとか言われる)。なので、先にgcc/g++ 4.4をインストールしておく。こいつらはTokyo Cabinet とかのビルドには使わなくてもOK。
yumから入ります。
# yum install gcc44 gcc44-c++ # gcc44 -v # g++44 -v
Tokyo Cabinet をインストール
バックエンドとして利用される Tokyo Cabinet をインストールします。僕は 1.4.41 を利用。
./configure してようとするとbzip2がらみの何かがないとか言われます。そしたらdevelを入れてやりましょう。
# yum install bzip2-devel bzip2-libs $ ./condifure $ make # make install
どこに入ったか覚えて置きましょう。デフォルトは /usr/local/libです。
Message Pack for C++ をインストール
SourceForgeのリリースページから最新版の 0.4.1 をダウンロードします。
で、ここで gcc44 と g++44 が登場。 ./configure します。
$ CC=gcc44 CXX=g++44 ./configure $ make # make install
ここでもインストール先を覚えておきましょう。デフォルトなら /usr/local/lib です。
Message Pack for Ruby をインストール
これはgemから。
# gem install msgpack
kumofs をインストール
これでラスト。最新版の 0.4.1 を使います。Githubのリリースページか、git clone します。
ここでも gcc44 と g++44 が登場。
$ CC=gcc44 CXX=g++44 ./configure $ make # make install
起動してみる
急いでインストールしたので、今回はkumo-manager を起動するだけです。
$ kumo-manager -v kumo-manager: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
おうふ! Tokyo Cabinet と MessagePack のインストール先を教えてあげましょう。
$ export LD_LIBRARY_PATH=/usr/local/lib $ kumo-manager -v usage: kumo-manager -l-p -p --partner master-slave replication partner -a --auto-replace enable auto replacing -Rs --replace-delay delay time of auto replacing in sec. -k --keepalive-interval keepalive interval in seconds -Ys --connect-timeout connect timeout time in seconds -Yn --connect-retry-limit connect retry limit -Ci --clock-interval clock interval in seconds -TW --write-threads number of threads for asynchronous writing -TR --read-threads number of threads for asynchronous reading -o --log output logs to the file -g --binary-log enable binary log -v --verbose -d --daemon v0.3.1 revision 5b53cc4277e6ed951db7f599de9fcfcd3738b2cd Wed Jan 20 15:52:34 2010 +0900 error: required but not set: -l
うふふ

コメントする