CentOS上でMongoDBがちゃんと起動しないのを修正&UTF-8対応

$ yum install mongodb-server

でインストールしたMongoDBがちゃんと起動しない。/etc/init.dにmongodが作成されているので、起動してみるが、statusオプションで確認すると以下の状態になって動いていないようだ。

$ /etc/init.d/mongod start
Starting mongod:                                           [  OK  ]
$ /etc/init.d/mongod status
mongod dead but subsys locked

調べてみたら以下のページがヒット。
MongoDBを入れてみた - プログラマでありたい
作業をトレースしてみました。(追加部分あります)

/var/lib/mongodbの作成

$ mkdir /var/lib/mongodb
$ chown mongodb:mongodb /var/lib/mongodb

確認します。

# /etc/init.d/mongod start
Starting mongod:                                           [  OK  ]
# mongo
MongoDB shell version: 1.6.4
Mon Aug 20 13:29:58 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
connecting to: test
> k = {name: 'foo'};
{ "name" : "foo" }
> k = {name : 'ほげ'};
error:non ascii character detected
> quit

起動はできましたが、確かに日本語でエラーが起きました。

SpiderMonkey(js)をUTF-8対応

$ yum install mongodb-devel
$ curl -O ftp://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz
$ tar zxf js-1.7.0.tar.gz 
$ export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"
$ cd/src
$ make -f Makefile.ref
$ echo $?
0
$ which js
/usr/bin/js
$ js --version
JavaScript-C 1.7.0 2007-10-03
usage: js [-PswWxCi] [-b branchlimit] [-c stackchunksize] [-v version] [-f scriptfile] [-e script] [-S maxstacksize] [scriptfile] [scriptarg...]
$ JS_DIST=/usr make -f Makefile.ref export
...
cp Linux_All_DBG.OBJ/libjs.a /usr/lib64
cp Linux_All_DBG.OBJ/libjs.so /usr/lib64
cp Linux_All_DBG.OBJ/js /usr/bin
$ echo $?
0

確認してみます。

$ mongo
MongoDB shell version: 1.6.4
Mon Aug 20 13:51:16 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
connecting to: test

あれ?utf8サポートされていないままの状態です。

$ ll /usr/lib64/libjs.*
-rw-r--r-- 1 root root 3687704 Aug 20 13:51 /usr/lib64/libjs.a
-rwxr-xr-x 1 root root 2625491 Aug 20 13:51 /usr/lib64/libjs.so
-rwxr-xr-x 1 root root 3202792 Nov 23  2009 /usr/lib64/libjs.so.1

makeのログを見ると、libjs.so.1はコピーしてないのが分かった。と言う事でシンボリックリンクを張ります。

$ cd /usr/lib64
$ mv libjs.so.1 libjs.so.1.bak
$ cp libjs.so libjs.so.1
$ rm libjs.so
$ ln -s libjs.so.1 libjs.so
$ ll libjs.so*
lrwxrwxrwx 1 root root      10 Aug 20 14:01 libjs.so -> libjs.so.1
-rwxr-xr-x 1 root root 2625491 Aug 20 14:00 libjs.so.1
-rwxr-xr-x 1 root root 3202792 Nov 23  2009 libjs.so.1.bak

もう一度確認します。

$ mongo
MongoDB shell version: 1.6.4
connecting to: test
> k = {name : 'ほげ'};
{ "name" : "ほげ" }

大丈夫なようです。