memcachedとTokyo Tyrantのインストール on FreeBSD

linuxじゃないので,先に明示的にlibeventを入れてからです.

> su
# pkg_add -r libevent
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.2-release/Latest/libevent.tbz... Done.
# exit
exit
> wget http://memcached.googlecode.com/files/memcached-1.4.2.tar.gz
> tar xvf memcached-1.4.2.tar.gz
> cd memcached-1.4.2
> ./configure
> make
> su
# make install
# exit
exit
> memcached -vv
failed to listen on TCP port 11211: Address already in use

しまった,昨日のROMAが立ち上がりっぱなしでした(笑)

# ps agx|grep ruby
23758  ??  Ss     1:29.92 ruby ./bin/romad localhost -p 11211 -d
24013  p2  S+     1:28.63 ruby ./bin/romad localhost -p 11212 --verbose
63251  p3  R+     0:00.00 grep ruby
# killall 'ruby'
> memcached -vv
slab class   1: chunk size        80 perslab   13107
(中略)
<16 server listening (auto-negotiate)
<17 send buffer was 9216, now 233016
<17 server listening (udp)
<17 server listening (udp)
<17 server listening (udp)
<17 server listening (udp)
<18 new auto-negotiating client connection
18: Client using the ascii protocol
(別なターミナルから)
# telnet localhost 11211
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set test 0 0 8
test des
STORED
get test
VALUE test 0 8
test des
END

Ok.
Tokyo Tyrantも入れます.今度はあらかじめmemcachedは落としておきました.当然,最初にTokyo Cabinetを入れます.

> wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.35.tar.gz
> tar xvf tokyocabinet-1.4.35.tar.gz
> cd tokyocabinet-1.4.35
> ./configure
> make -i
> su
# make installFreeBSDではbinプログラムの作成に失敗しますが,メンドクサイので無視.ライブラリさえ出来ていれば良いです)

次にTokyo Tyranto入れます.
ただし,そのままではFreeBSDではエラーが出るので,myconf.hに手をいれます.

#if defined(_SYS_FREEBSD_) || defined(_SYS_NETBSD_) || defined(_SYS_OPENBSD_)
#define nan(TC_a)      strtod("nan", NULL)
#define nanl(TC_a)      strtold("nan", NULL) // 追加
#endif
> wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.36.tar.gz
> tar xvf tokyotyrant-1.1.36.tar.gz
> cd tokyotyrant-1.1.36
> ./configure
> gmake
> su
# gmake install
mkdir -p /usr/local/include
(中略)
#================================================================
# Thanks for using Tokyo Tyrant.
#================================================================
# ttserver -port 11211
2009-10-25T20:28:48+09:00       SYSTEM  --------- logging started [69609] --------
2009-10-25T20:28:48+09:00       SYSTEM  server configuration: host=(any) port=11211
(中略)
2009-10-25T20:28:48+09:00       SYSTEM  listening started
(別なターミナルで,御馴染みのテスト)
# telnet localhost 11211
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set test 0 0 8
test des
STORED
get test
VALUE test 0 8
test des
END

Ok. ちなみにFreeBSDではmakeコマンドではうまくインストールできなかったので注意です(gmakeを使います).Linuxはmake=gmakeなので心配要りません.
準備の最後として,libmemcachedを入れます.

> wget http://download.tangent.org/libmemcached-0.34.tar.gz
> tar xvf libmemcached-0.34.tar.gz
> cd libmemcached-0.34
> ./configure
> make
> su
# make install

最後に,キャッシュのテストプログラムで使うので,SF-メルセンヌツイスタを入れておきます.

> wget "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/bin/dl/dl.cgi?SFMT:SFMT-src-1.3.3.tar.gz"
> tar xvf SFMT-src-1.3.3.tar.gz
> cd SFMT-src-1.3.3
> su
# cp SFMT.c SFMT.h SFMT-params*.h /usr/local/include/

メルセンヌツイスターのテストプログラムは,例えばこんな感じ.

#import <iostream>
#include <time.h>
#include <SFMT.c>
using namespace std;
int main()
{
  int seed = time(NULL);
  init_gen_rand(seed);
  for(int i=0;i<10;++i)
    cout<<gen_rand32()%10<<endl;
  return(0);
}

そして

> c++ client.cc -I/usr/local/include
In file included from /usr/local/include/SFMT.c:16,
                 from client.cc:4:
/usr/local/include/SFMT-params.h:6:4: warning: #warning "MEXP is not defined. I assume MEXP is 19937."
> ./a.out
9
5
1
9
9
9
3
1
1
8

では準備ができましたので,テストに入りましょう.