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
ということで調整。
# 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
繋がった!