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" : "ほげ" }
大丈夫なようです。