Kyoto Tycoonが0.9.53でSolaris10でも動くようになったのでメモメモ。
0.9.52まではSolaris10ではsetsockoptのSO_RCVTIMEOとSO_SNDTIMEOが必ず失敗するのでSocketの接続が全てRejectされていました。0.9.53では設定は試みるけどエラーチェックをしなくなったので、Solaris10でも繋がるようになりました。
ビルドをするためにGCC4.4を入れます。GCC4.6じゃないの?と言われそうですが、依存ライブラリのmpc(gcc-4.5から必要)のビルドがgcc3.4.3で出来ないので1回GCC4.4系を入れます。gcc3.4.3でもconfig.hを書き換えればいけると思いますけど。
gmpとmpfrとmpcはgcc4-deps-libへ入れるという方向で行きたいと思います。
まず事前にgrepが/usr/xpg4/bin/grepを使うようにPATHを調整します。そうしないと、/usr/bin/grepを使ってしまいconfigure時にオプションを解釈できなくてチェックが正常に動きません。
gmp
cd gmp-5.0.2 ./configure --prefix=/usr/local/gcc4-deps-lib gmake > /dev/null gmake check gmake install
mpfr(documentに書いてあるとおり、パッチも当てます)
cd mpfr-3.1.0 wget http://www.mpfr.org/mpfr-3.1.0/allpatches /usr/bin/gpatch -N -Z -p1 < allpatches ./configure --prefix=/usr/local/gcc4-deps-lib --with-gmp=/usr/local/gcc4-deps-lib gmake > /dev/null gmake check gmake install
libgccのビルドにこけるので、以下を設定します。
export LD_LIBRARY_PATH=/usr/local/gcc4-deps-lib/lib:$LD_LIBRARY_PATH
gcc4.4.6
./configure \ --prefix=/usr/local/gcc446 \ --with-ar=/usr/ccs/bin/ar \ --with-as=/usr/ccs/bin/as \ --with-ld=/usr/ccs/bin/ld \ --enable-shared \ --enable-languages=c,c++ \ --with-gmp=/usr/local/gcc4-deps-lib \ --with-mpfr=/usr/local/gcc4-deps-lib gmake -j 2 bootstrap gmake install
確認
export LD_LIBRARY_PATH=/usr/local/gcc446/lib:$LD_LIBRARY_PATH /usr/local/gcc446/bin/gcc -v
Using built-in specs. Target: i386-pc-solaris2.10 コンフィグオプション: ./configure --prefix=/usr/local/gcc446 --with-ar=/usr/ccs/bin/ar --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++ --with-gmp=/usr/local/gcc4-deps-lib --with-mpfr=/usr/local/gcc4-deps-lib スレッドモデル: posix gcc version 4.4.6 (GCC)
環境変数はこんな感じで設定しております。
LD_LIBRARY_PATH=/usr/local/gcc446/lib/amd64:/usr/local/gccc446/lib:/usr/local/gcc4-deps-lib/lib:/usr/local/lib:/usr/ccs/lib:/usr/sfw/lib:/opt/sfw/lib:/usr/lib:/lib:/etc/lib PATH=/usr/local/gcc446/bin:/usr/local/bin:/usr/xpg4/bin:/usr/xpg6/bin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
次にKCを入れます。
./configure CXX=/usr/local/gcc446/bin/gcc --prefix=/usr/local/kc-1.2.72 gmake gmake install
次はKTを入れます。 とりあえずの注意点としては、-m64を付けないとconfigure時にlibkyotocabinetが認識できません。これは、libkyotocabinetが64ビットのSOであるのにconftest.cppを作ってリンクの確認をする時に-m64がつかなくて32ビットのELFに64ビットのSOをリンクしようとするからです。また、CXXに明示的にg++を指定しているのは、-m64つけた時にこれを指定しないとpthreadなどの他のライブラリを認識できなかったからです。
./configure \ CXXFLAGS="-m64" \ CXX="/usr/local/gcc446/bin/g++" \ LDFLAGS="-R/usr/local/kc-1.2.72/lib -R/usr/local/kt-0.9.53/lib" \ --prefix=/usr/local/kt-0.9.53 \ --with-kc=/usr/local/kc-1.2.72 gmake gmake install
確認をします。ktserverを立ち上げて以下のコマンドを打ちます。
bash-3.2# echo "hello" | /usr/local/kt-0.9.53/bin/ktutilmgr http -put http://localhost:1978/test1 bash-3.2# /usr/local/kt-0.9.53/bin/ktutilmgr http -get http://localhost:1978/test1 hello
動いた動いた。やったね。