ほぼまっさらなCentOS5.5にkumofsをインストール

いくらでも情報があるんですが、自分用の備忘録。

方針とか

  • この手順では32bitマシンを対象にする
  • ソースから入れるパッケージはとにかくcheckinstall
  • ネットワーク周りやiptablesの設定は各自やってね

準備するもの

  • CentOS 5.5をインストール済みのマシン
    • 全部デフォルト設定でインストール(インストーラ任せ)
    • アップデート済み(yum -y update)

手順

Development Toolsのインストール

そもそもgccとか入ってなかったので、インストール。

yum -y groupinstall "Development Tools"
rpmforgeを使えるようにする

checkinstallをインストールしたいのだが、rpmforgeじゃないとパッケージが置いてないのでrpmforgeを使えるようにする。x64の人はAdditionalResources/Repositories/RPMForge - CentOS Wikiを要確認。

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm

で、このままだとrpmforgeがデフォルトで有効になっちゃってるので、基本は無効にする。エディタで/etc/yum.repos.d/rpmforge.repoを開いて、enabled = 0にしておく。
rpmforgeを使ってyum installしたい場合は、--enablerepo=rpmforgeを付ける。

checkinstallのインストール
yum -y --enablerepo=rpmforge install checkinstall
gcc44のインストール

MessagePack for C++がgcc4.2以上をを要求してくるので4.4をインストール。

yum -y install gcc44 gcc44-c++
zlib-develのインストール

TokyoCabinetRubyインストールに必要なのでインストール。

yum -y install zlib-devel
bzip2のインストール

TokyoCabinetでbzip2-1.0.5以上が必要なのだが、yumでインストールできるものは1.0.3なのでソースから入れる。

wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
tar xvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make
/usr/sbin/checkinstall
...
rpm -iH  /usr/src/redhat/RPMS/i386/bzip2-1.0.5-1.i386.rpm
openssl-develのインストール

kumofsが依存してるのでインストール。

yum -y install openssl-devel
ncurses-develのインストール

id:salexkiddさんから、これを入れておかないとkumotopコマンド(kumofsのサーバ監視ツール)が動作しないと教えて頂いた。ありがとうございます!!

yum -y install ncurses-devel
Rubyのインストール

先にzlib-develを入れておかないと、RubyGemsがこけるので注意。

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p299.tar.bz2
tar xvf ruby-1.8.7-p299.tar.bz2
cd ruby-1.8.7-p299
./configure
make
/usr/sbin/checkinstall --fstrans=no
...
rpm -iH /usr/src/redhat/RPMS/i386/ruby-1.8.7-p299-1.i386.rpm
RubyGemsのインストール
wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
tar xvf rubygems-1.3.7.tgz
cd rubygems
/usr/sbin/checkinstall -R "ruby setup.rb"
...
rpm -iH /usr/src/redhat/RPMS/i386/rubygems-1.3.7-1.i386.rpm
TokyoCabinetのインストール

chconしないとSELinuxに怒られて、kumofsを起動できないぽい。

wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz
tar xvf tokyocabinet-1.4.45.tar.gz
cd tokyocabinet-1.4.45
./configure
make
/usr/sbin/checkinstall
...
rpm -iH /usr/src/redhat/RPMS/i386/tokyocabinet-1.4.45-1.i386.rpm
chcon -t texrel_shlib_t /usr/local/lib/libtokyocabinet.so.9
MessagePack for C++のインストール

gcc44を指定したり、checkinstallで--exclude=/selinuxが必要だったり。

wget http://downloads.sourceforge.net/project/msgpack/msgpack/cpp/msgpack-0.5.2.tar.gz
tar xvf msgpack-0.5.2.tar.gz
cd msgpack-0.5.2
CC=gcc44 CXX=g++44 ./configure
make
/usr/sbin/checkinstall --exclude=/selinux
...
rpm -iH /usr/src/redhat/RPMS/i386/msgpack-0.5.2-1.i386.rpm
MessagePack for Rubyのインストール

RubyGemsで入れる。

gem install msgpack
kumofsのインストール

やっとkumofsをインストールできる。gitで最新版を落としてきてもよかったけど、配布パッケージver0.3.2を使うことに。ここでもgcc44を指定したり--exclude=/selinuxを指定したり。

wget http://github.com/downloads/etolabo/kumofs/kumofs-0.4.10.tar.gz
tar xvf kumofs-0.4.10.tar.gz
cd kumofs-0.4.10
CC=gcc44 CXX=g++44 ./configure
make
/usr/sbin/checkinstall --exclude=/selinux
...
rpm -iH /usr/src/redhat/RPMS/i386/kumofs-0.4.10-1.i386.rpm

あと、LD_LIBRARY_PATHの設定が必要なので適当なエディタで/etc/profileを開いて、以下を追加しておく。

export LD_LIBRARY_PATH=/usr/local/lib
kumofsをシングルノードで起動できるようにする

開発環境などはシングルノードで動作させたいことが多いと思うので、以下のようなスクリプトを用意。やっつけで作ってるので、動かなかったら教えてください。attachに失敗するので、manager・serverが起動完了するまで3秒のsleepをかけてるけど、環境によってはもっと長めに時間をとらないとダメかも。
ちなみにうちではこのスプリプトを/usr/local/bin/kumosingleに保存して使っている。

#!/bin/sh
case "$1" in
    start)
        if [ ! -d /var/kumofs ]; then
            mkdir /var/kumofs
        fi
        if [ ! -d /var/log/kumofs ]; then
            mkdir /var/log/kumofs
        fi

        # run manager
        kumo-manager -v -l localhost -d /var/kumofs/manager.pid \
                     -o /var/log/kumofs/manager.log

        # run servers
        kumo-server  -v -m localhost -l localhost:19801 -L 19901 \
                     -s /var/kumofs/database1.tch \
                     -d /var/kumofs/server1.pid \
                     -o /var/log/kumofs/server1.log
        kumo-server  -v -m localhost -l localhost:19802 -L 19902 \
                     -s /var/kumofs/database2.tch \
                     -d /var/kumofs/server2.pid \
                     -o /var/log/kumofs/server2.log
        kumo-server  -v -m localhost -l localhost:19803 -L 19903 \
                     -s /var/kumofs/database3.tch \
                     -d /var/kumofs/server3.pid \
                     -o /var/log/kumofs/server3.log

    # wait
        sleep 3

        # run gateway(enabled flags)
        kumo-gateway -v -m localhost -t 11211 -d /var/kumofs/gateway.pid \
                     -o /var/log/kumofs/gateway.log -F

        # attach servers
        kumoctl localhost attach

        echo "running kumofs"
        ;;
    stop)
        kill `cat /var/kumofs/gateway.pid`
        kill `cat /var/kumofs/server1.pid`
        kill `cat /var/kumofs/server2.pid`
        kill `cat /var/kumofs/server3.pid`
        kill `cat /var/kumofs/manager.pid`
        
        rm -f /var/kumofs/gateway.pid
        rm -f /var/kumofs/server1.pid
        rm -f /var/kumofs/server2.pid
        rm -f /var/kumofs/server3.pid
        rm -f /var/kumofs/manager.pid
        
        echo "stopped kumofs"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
exit 0
kumofsの動作確認

kumofsはmemcachedプロトコルでやりとりができるので、telnetを使って動作確認。

telnet localhost 11211
...
version

VERSION kumofs-0.4.10って表示されたらちゃんと動いてるはず。

更新履歴

2010/04/21
  • kumofs-0.3.3に手順変更
  • kumofs起動スクリプト kumo-gatewayの起動オプションに-F追加
2010/04/25
  • kumofs-0.3.4に手順変更
2010/07/18
  • id:salexkiddさんに指摘されたkumotopコマンドが動作しない件に対応
    • ncurses-develをインストールするようにした
  • CentOS 5.4 -> CentOS 5.5
  • インストールモジュールを最新化