MongoDBのRPMを入れてみた

が、UTF-8が使えない。。誰か知ってたら教えていただけると嬉しいです!

Problem

When I run the mongo-server, it says "spider monkey build without utf8 support. consider rebuilding with utf8 support" but I don't know how..

# tail -f /var/log/mongo/mongod.log

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Tue May  4 22:48:50 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
Tue May  4 22:48:50 db version v1.4.0, pdfile version 4.5
Tue May  4 22:48:50 git version: nogitversion
Tue May  4 22:48:50 sys info: Linux chrislea.com 2.6.9-023stab048.6-enterprise #1 SMP Mon Nov 17 19:09:18 MSK 2008                                     i686 BOOST_LIB_VERSION=1_37

error occurs when I use Japanese in it.

> k = { name : "ほげ" };
Wed May  5 07:54:26 User Exception 10213:non ascii character detected
error:non ascii character detected

hmm..

What should I do?

環境

# cat /etc/issue
CentOS release 5.4 (Final)
Kernel \r on an \m

# uname -a
Linux ip-10-130-34-195 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 i686 i386 GNU/Linux

インストール

chrisleaさんのリポジトリを使用。
> http://yum.chrislea.com/centos/5/i386/

mongo-1.4.0-mongodb_1.i386.rpm
mongo-devel-1.4.0-mongodb_1.i386.rpm
mongo-server-1.4.0-mongodb_1.i386.rpm

で、早速ダウンロードして入れようと思ったら案の定、依存エラー。

# rpm --test -ivh mongo-*
警告: mongo-1.4.0-mongodb_1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
エラー: 依存性の欠如:
        boost >= 1.35 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_filesystem-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_program_options-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_system-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_thread-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libjs.so.1 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_filesystem-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_program_options-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_system-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_thread-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libjs.so.1 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています

あぁそういえばboostが必要だとか書いてたな。。

ということで入れてみる。

# yum install boost==================================================================================================================
 Package                   Arch                    Version                          Repository               Size
==================================================================================================================
Installing:
 boost                     i386                    1.33.1-10.el5                    base                    863 k
Installing for dependencies:
 libicu                    i386                    3.6-5.11.4                       base                    5.2 M

Transaction Summary
==================================================================================================================

なんか一個依存関係があってついてきたけどまぁいいでしょう。

で、もう一回MongoDBを追加しようとしてみると。。

# rpm --test -ivh *
警告: mongo-1.4.0-mongodb_1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
エラー: 依存性の欠如:
        boost >= 1.35 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_filesystem-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_program_options-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_system-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_thread-mt.so.4 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libjs.so.1 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libboost_filesystem-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_program_options-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_system-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libboost_thread-mt.so.4 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています
        libjs.so.1 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています

あれ、また同じエラー?

で、よくよく見るとこの部分。

boost >= 1.35

あ、なるほど、そんなことも書いてましたね。で、chrisleaさんのリポジトリを確認すると、なるほど確かにありますねと。

# yum erase boost libicu
# wget http://yum.chrislea.com/centos/5/i386/boost-1.37.0-6.i386.rpm
# rpm --test -ivh boost-1.37.0-6.i386.rpm

で、インストールしようとしたところでまたエラー。

# rpm --test -ivh boost-1.37.0-6.i386.rpm
警告: boost-1.37.0-6.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
エラー: 依存性の欠如:
        libicudata.so.36 は boost-1.37.0-6.i386 に必要とされています
        libicui18n.so.36 は boost-1.37.0-6.i386 に必要とされています
        libicuuc.so.36 は boost-1.37.0-6.i386 に必要とされています

あぁそういえばさっきlibicu みたいなの入れたなーと思ってターミナル遡って確認したらビンゴ。もういっかい普通に入れる。

# yum install libicu
…
# rpm -qi libicu
Name        : libicu                       Relocations: (not relocatable)
Version     : 3.6                               Vendor: CentOS
Release     : 5.11.4                        Build Date: 2009年06月26日 04時38分13秒
Install Date: 2010年05月04日 22時25分14秒      Build Host: builder16.centos.org
Group       : System Environment/Libraries   Source RPM: icu-3.6-5.11.4.src.rpm
Size        : 13109644                         License: X License
Signature   : DSA/SHA1, 2009年06月26日 22時56分57秒, Key ID a8a447dce8562897
URL         : http://www.ibm.com/software/globalization/icu/
Summary     : ユニコード用の国際化コンポーネント - ライブラリ
Description :
International Components for Unicode - libraries.

これでboost は大丈夫。

 rpm -ivh boost-1.37.0-6.i386.rpm
警告: boost-1.37.0-6.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
準備中...                ########################################### [100%]
   1:boost                  ########################################### [100%]

で、やっと本命のmongo さんだけど、まだひっかかる。

# rpm --test -ivh mongo-*
警告: mongo-1.4.0-mongodb_1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
エラー: 依存性の欠如:
        libjs.so.1 は mongo-1.4.0-mongodb_1.i386 に必要とされています
        libjs.so.1 は mongo-server-1.4.0-mongodb_1.i386 に必要とされています

こんなことを言われる。RPMsearch で検索するとどうやらjsというパッケージが必要とのこと。普通に入れる。

# yum install js
…
# rpm -qi js
Name        : js                           Relocations: (not relocatable)
Version     : 1.7.0                             Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
Release     : 1.el5.rf                      Build Date: 2009年11月23日 10時03分05秒
Install Date: 2010年05月04日 22時28分13秒      Build Host: lisse.hasselt.wieers.com
Group       : Development/Languages         Source RPM: js-1.7.0-1.el5.rf.src.rpm
Size        : 3323391                          License: GPL
Signature   : DSA/SHA1, 2009年11月25日 20時47分36秒, Key ID a20e52146b8d79e6
Packager    : Dag Wieers <dag@wieers.com>
URL         : http://www.mozilla.org/js/
Summary     : JavaScript interpreter
Description :
JavaScript is the Netscape-developed object scripting languages.
This package has been created for purposes of Sablotron and is suitable
for embedding in applications.

目的のファイルもちゃんと入ってる。

# rpm -ql js
/usr/bin/js
/usr/lib/libjs.so.1
/usr/share/doc/js-1.7.0
/usr/share/doc/js-1.7.0/README.html
# rpm -ivh mongo-*
警告: mongo-1.4.0-mongodb_1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 44a334da
準備中...                ########################################### [100%]
   1:mongo-server           ########################################### [ 33%]
   2:mongo                  ########################################### [ 67%]
   3:mongo-devel            ########################################### [100%]

入った!

起動

で、使い方がよくわからないので入ってるファイルを確認。まずはmongo

# rpm -ql mongo
/usr/bin/mongo
/usr/bin/mongodump
/usr/bin/mongoexport
/usr/bin/mongofiles
/usr/bin/mongoimport
/usr/bin/mongorestore
/usr/bin/mongostat
/usr/share/doc/mongo-1.4.0
/usr/share/doc/mongo-1.4.0/GNU-AGPL-3.0.txt
/usr/share/doc/mongo-1.4.0/README
/usr/share/man/man1/mongo.1.gz
/usr/share/man/man1/mongod.1.gz
/usr/share/man/man1/mongodump.1.gz
/usr/share/man/man1/mongoexport.1.gz
/usr/share/man/man1/mongofiles.1.gz
/usr/share/man/man1/mongoimport.1.gz
/usr/share/man/man1/mongorestore.1.gz
/usr/share/man/man1/mongos.1.gz
/usr/share/man/man1/mongosniff.1.gz
/usr/share/man/man1/mongostat.1.gz

まぁクライアント用のコマンドなんかが入ってる。次に、mongo-server

# rpm -ql mongo-server
/etc/mongod.conf
/etc/rc.d/init.d/mongod
/usr/bin/mongod
/usr/bin/mongos
/usr/share/man/man1/mongos.1.gz
/var/lib/mongo
/var/log/mongo

設定ファイルや起動スクリプト、データの置き場所もある。

設定ファイルを一応眺めてみるも、とりあえず変更の必要はなさそうなのでデフォルトで起動してみる。

# /etc/init.d/mongod start
/etc/init.d/mongod: line 25: /etc/sysconfig/mongod: そのようなファイルやディレクトリはありません
Starting mongod: runuser: mongod というユーザは存在しません

いろいろ怒られる。ユーザはとりあえず作る。よくわかんないけどapache ユーザやmysql ユーザを参考にする。nologin とかでいいんだろうか。。

# useradd mongod -d /var/lib/mongo -s /sbin/nologin
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

/etc/sysconfig/mongod のほうもよくわからない。でも、/etc/sysconfig/httpd なんかを見ると特に必要がなければ中身は空っぽっぽい。

というわけで空っぽのファイルを置いておいた。
# touch /etc/sysconfig/mongod

もういっかい起動してみる。

# /etc/init.d/mongod start
Starting mongod: warning: some regex utf8 things will not work.  pcre build doesn't have --enable-unicode-properties
all output going to: /var/log/mongo/mongod.log
can't open [/var/log/mongo/mongod.log] for log file
Tue May  4 22:44:57  dbexit:
Tue May  4 22:44:57      shutdown: going to close listening sockets...
Tue May  4 22:44:57      shutdown: going to flush oplog...
Tue May  4 22:44:57      shutdown: going to close sockets...
forked process: 13501
Tue May  4 22:44:57         shutdown: waiting for fs preallocator...
Tue May  4 22:44:57      shutdown: closing all files...
Tue May  4 22:44:57      closeAllFiles() finished
Tue May  4 22:44:57  dbexit: really exiting now

うーん。うまく起動してくれない。下記に注目。
can't open [/var/log/mongo/mongod.log] for log file

ということで確認してみると、これまたおマヌケな事態に。。

# cd /var/log/
# ll
…
-rw-r----- 1 root   root              0  4月 11 14:25 mongo
    • mongod ユーザには手も足も出ないパーミッション
    • /var/log/mongo/mongod.log を開こうとしているのに、mongo 自体はファイル。(ディレクトリですらない。)

ということで調整。

# rm mongo
# mkdir mongo
# chown mongod:mongod mongo

これで再挑戦。

# /etc/init.d/mongod start
Starting mongod: warning: some regex utf8 things will not work.  pcre build doesn't have --enable-unicode-properties
all output going to: /var/log/mongo/mongod.log
forked process: 13568     [  OK  ]

「OK」と出ているので、今度こそやったか?と思いきや、これまた動いてない模様。試しにmongo コマンドを打つも、「connect failed」してしまう。

# mongo
MongoDB shell version: 1.4.0
url: test
Tue May  4 22:47:13 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
connecting to: test
Tue May  4 22:47:13 JS Error: Error: couldn't connect: couldn't connect to server 127.0.0.1 127.0.0.1:27017 (anon):952
Tue May  4 22:47:13 User Exception 12513:connect failed
exception: connect failed

で、ちょっと考える。

# /etc/init.d/mongod status
mongod は停止していますがサブシテムがロックされています

# tail -f mongo/mongod.log
Tue May  4 22:47:47  dbexit:
Tue May  4 22:47:47      shutdown: going to close listening sockets...
Tue May  4 22:47:47      shutdown: going to flush oplog...
Tue May  4 22:47:47      shutdown: going to close sockets...
Tue May  4 22:47:47      shutdown: waiting for fs preallocator...
Tue May  4 22:47:47      shutdown: closing all files...
Tue May  4 22:47:47      closeAllFiles() finished
Tue May  4 22:47:47      shutdown: removing fs lock...
Tue May  4 22:47:47      couldn't remove fs lock errno:9 Bad file descriptor
Tue May  4 22:47:47  dbexit: really exiting now

ロックファイルを作ろうとして、なにやら失敗しているようだ。

で、データ用のディレクトリを見てみると、あいたたた。。

# ll
…
drwxr-xr-x  2 root   root         4096  4月 11 14:25 mongo

これまたmongod さんには権限がなかったですね。。ということで権限をあげる。
# chown mongod:mongod mongo

再び起動。

# /etc/init.d/mongod restart
Starting mongod: warning: some regex utf8 things will not work.  pcre build doesn't have --enable-unicode-properti                                    es
all output going to: /var/log/mongo/mongod.log
forked process: 13649                           [  OK  ]

なんかUTF-8をサポートしてないとか不吉なことは言っているが、起動はしている模様。

# tail -f /var/log/mongo/mongod.log

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Tue May  4 22:48:50 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
Tue May  4 22:48:50 db version v1.4.0, pdfile version 4.5
Tue May  4 22:48:50 git version: nogitversion
Tue May  4 22:48:50 sys info: Linux chrislea.com 2.6.9-023stab048.6-enterprise #1 SMP Mon Nov 17 19:09:18 MSK 2008                                     i686 BOOST_LIB_VERSION=1_37
Tue May  4 22:48:50 waiting for connections on port 27017
Tue May  4 22:48:50 web admin interface listening on port 28017

mongo コマンドを打ってみると。。

# mongo
MongoDB shell version: 1.4.0
url: test
Tue May  4 22:49:18 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
connecting to: test
type "exit" to exit
type "help" for help
>
>
> exit
bye

繋がった!