Cygwin環境にmemcachedをインストールしてみた
概要: Cygwin で memcached をコンパイルしてインストールする
個人的に作ってるライブラリ群(Applish
のことです。詳しくは 僕のリポジトリ参照 )
のキャッシュクラスで、 memcached を使ったクラスを作ってて、
実際に動かしてテストしてみたかったんで、Cygwin に memcached をインストールしてみました。
今回はすんなりいくかと思いきや、ソースコードにパッチを当てる必要があったので、 そこら辺もまとめて掲載してみる。
1. ソースコードの取得
$ cd ~/tmp
$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
2. libevent
のインストール
memcached の動作には libevent が必要なので、
先にlibevent
をインストールします。
こっちは割りとすんなりいって、
$ wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
$ tar zxvf libevent-1.4.14b-stable.tar.gz
$ cd libevent-1.4.14b-stable
$ ./configure --prefix=/usr/local/libevent
$ make
$ make install
でインストールが終了しました。で、あと./configure
のオプションについては各自で調整してください。
3. memcached
のソースコード修正
で、次にmemcached
にソースコード修正に行きます。
まず、最初がutil.c
で、memcached
の生のコードだと、
Cygwin と Solaris で問題が発生するみたいです。詳しくは Issue 111: compile errors: array subscript has type 'char'
を参照。
で、この問題については、先のリンク先で、個人的に修正していた人がいたので、 そこからパクってきます。正確には、
- <http://github.com/lindner/memcached/ http://github.com/lindner/memcached/>
のリポジトリのutil.c
で、memcached
のutil.c
を上書きすれば OK です。
で、今度はtestapp.c
の修正をします。
testapp.c
についてなんですが、このファイルはコンパイル時に、
testapp.c: In function 'cache_redzone_test':
testapp.c:125: error: unknown field 'sa_handler' specified in initializer
cc1: warnings being treated as errors
みたいなエラーを吐きます。
でこのエラーメッセージのunknown field 'sa_handler' specified in initializer
で Google 検索したら一発で出てくるんですが、どうもこのエラーは、Cygwin のヘッダファイルの都合上おきるそうです。
まあ僕は詳しいことは分からないんで詳細は Designated Initializer - BOOLEANLABEL を参照してください。
でリンク先で、
sahandler がさらに内部で union のメンバになっているからというオチである。ちなみに普通にメンバに代入するように書くと、コンパイルできるのは何故なのだろうか? *1code: #include <signal.h> void func(void) struct sigaction action; action.sa_handler = SIG_IGN; action.sa_flags = 0;
と述べられているように、問題の箇所を上記のように書き換えれば、 コンパイルは可能になるようです。
で、testapp.c
の問題の箇所は line 125 の、
code:_ struct sigaction action = .sa_handler = SIG_IGN, .sa_flags = 0;
となっているところを、
struct sigaction action;
action.sa_handler = SIG_IGN;
action.sa_flags = 0;
と書き換えれば OK です。
4. memcached
のコンパイル
これでmemcached
のソースの修正は終わったので、あとは端末で、
$ cd ~/tmp/memcached-1.4.5
$ ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
$ make
$ make test
$ make install
すれば Cygwin にmemcached
をインストールできます。
ちなみに僕は memcached の動作確認をするのにmake test
しかやってないので、
本番環境で本当に動くかどうかは確認できていません。
まあmake test
でテストがこけるようなことはなかったので、多分大丈夫でしょう。
というわけで以上でmemcached
のインストールは終わりです。
5. 以上終了。以下感想
まあ今回memcached
を実際にインストールしてみたわけですが、
詰まった箇所が自分でなんとかできる範囲だったのが幸いでした。
これでわけの分からんエラーとか、ソースを大幅に書き換えないとダメな箇所とか出てきたら、
多分お手上げだったでしょう。
まあこれでmemcached
は手に入ったので、あとはmemcached
を使うテストを書くだけです。
というわけで、今日は Cygwin にmemcached
をインストールしてみたというお話でした。
#FIXME