タグ「Solaris10」が付けられているもの

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

動いた動いた。やったね。

 

Solaris10でmemcached1.4をビルドする

  • 投稿日:
  • カテゴリ:

http://memcached.googlecode.com/files/memcached-1.4.0.tar.gz

-は削除、+は追加という意味です。

memcached.h 467行目を修正

-extern void drop_privileges();
+extern void drop_privileges(void);

solaris_priv.cの11行目を修正

+extern void drop_privileges(void);

testapp.cの236行目を修正

-sprintf(pidfile, "/tmp/memcached.%d", getpid());
+sprintf(pidfile, "/tmp/memcached.%ld", getpid());

あとは普通にビルドをすれば通ります。今回リンクしたlibeventは「libevent-1.4.11-stable」です。

参考までにuname -aとgcc -vの結果を。

[tamtam@tamsvr11 work]$ uname -a
SunOS tamsvr11 5.10 Generic_137138-09 i86pc i386 i86pc Solaris
tamtam@tamsvr11 work]$ gcc -v
usr/local/lib/gcc/i386-pc-solaris2.10/3.4.6/specs から spec を読み込み中
コンフィグオプション: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++,f77
スレッドモデル: posix
gcc バージョン 3.4.6

参考情報
http://groups.google.com/group/memcached/browse_thread/thread/a8f346a0084d9828/11428cd7bb11a374?lnk=gst#11428cd7bb11a374

情報を教えてくれたtmaesaka氏に感謝(`・ω・)