DRYな備忘録

Don't Repeat Yourself.

MacにmongoDBをソースからインストール【mongoDB】【Mac】

Goal

  • brew installではなく、ソースからビルドしてmongoDBをインストールする
  • mongoコマンドが使え、インタラクティブモードで起動できる

Log

一応、brewで何が落とせるか見ておく

% brew search mongo
libmongoclient   mongo-c      mongodb      mongoose
% brew info mongodb
mongodb: stable 2.4.8 (bottled), devel 2.5.4, HEAD
http://www.mongodb.org/
Not installed
From: https://github.com//homebrew/commits/master/Library/Formula/mongodb.rb
# 以下略

ソースをダウンロード

ここから

Mac OS X を選択して、tgzファイルをダウンロード

% ls ~/Downloads | grep mongo
mongodb-osx-x86_64-2.4.8.tgz
%

解凍

ここを見れば大丈夫っぽい?

というか、curlで落としてきてはるわ。まあいいや、解凍

% mv ~/Downloads/mongodb-osx-x86_64-2.4.8.tgz ~/src/
% cd ~/src
% tar -zxvf mongodb-osx-x86_64-2.4.8.tgz
x mongodb-osx-x86_64-2.4.8/README
x mongodb-osx-x86_64-2.4.8/THIRD-PARTY-NOTICES
x mongodb-osx-x86_64-2.4.8/GNU-AGPL-3.0
x mongodb-osx-x86_64-2.4.8/bin/mongodump
# 以下略
% ls | grep mongo
mongodb-osx-x86_64-2.4.8
mongodb-osx-x86_64-2.4.8.tgz

とりあえずhomeに移動

% mkdir ~/mongodb
% cp -R -n mongodb-osx-x86_64-2.4.8/ ~/mongodb
% cd ~/mongodb
% ls
GNU-AGPL-3.0        README              THIRD-PARTY-NOTICES bin
%

ソースはあるので、起動してみる

% ~/mongodb/bin/mongo
MongoDB shell version: 2.4.8
connecting to: test
Mon Jan  6 15:28:26.663 Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145
exception: connect failed

Error: couldn't connect to server

ん、サーバ立ってないからだなこれは。

サーバ立てよう

% ~/mongodb/bin/mongod
/Users/otiai10/mongodb/bin/mongod --help for help and startup options
Mon Jan  6 15:28:45.729 [initandlisten] MongoDB starting : pid=44486 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net
Mon Jan  6 15:28:45.729 [initandlisten]
Mon Jan  6 15:28:45.729 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
# 以下略

んー

WARNING: soft rlimits too low.

これか

% ulimit -n 2048
% ~/mongodb/bin/mongod
/Users/otiai10/mongodb/bin/mongod --help for help and startup options
Mon Jan  6 15:36:48.008 [initandlisten] MongoDB starting : pid=44543 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net
Mon Jan  6 15:36:48.008 [initandlisten] db version v2.4.8
Mon Jan  6 15:36:48.008 [initandlisten] git version: a350fc38922fbda2cec8d5dd842237b904eafc14
Mon Jan  6 15:36:48.008 [initandlisten] build info: Darwin bs-osx-106-x86-64-2.10gen.cc 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
Mon Jan  6 15:36:48.008 [initandlisten] allocator: system
Mon Jan  6 15:36:48.008 [initandlisten] options: {}
Mon Jan  6 15:36:48.008 [initandlisten] exception in initAndListen: 10296
*********************************************************************
 ERROR: dbpath (/data/db/) does not exist.
 Create this directory or give existing directory in --dbpath.
 See http://dochub.mongodb.org/core/startingandstoppingmongo
*********************************************************************
, terminating
# 以下略

物理的なデータロケーションが無いっぽい

ERROR: dbpath (/data/db/) does not exist.

mongodを立ち上げるときに色々できるっぽい。とりあえず言われた通りのことをしよう

% ls / | grep data
% mkdir -p /data/db
mkdir: /data/db: Permission denied
% sudo mkdir -p /data/db
Password:
% ls /data/db
%

これで、mongod立ち上げるときに--dbpathを与えない場合のデフォルトの物理データパスができたはず

改めて立ち上げる

% ~/mongodb/bin/mongod
/Users/otiai10/mongodb/bin/mongod --help for help and startup options
Mon Jan  6 15:43:47.014 [initandlisten] MongoDB starting : pid=44571 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net
Mon Jan  6 15:43:47.014 [initandlisten] db version v2.4.8
Mon Jan  6 15:43:47.014 [initandlisten] git version: a350fc38922fbda2cec8d5dd842237b904eafc14
Mon Jan  6 15:43:47.014 [initandlisten] build info: Darwin bs-osx-106-x86-64-2.10gen.cc 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
Mon Jan  6 15:43:47.014 [initandlisten] allocator: system
Mon Jan  6 15:43:47.014 [initandlisten] options: {}
Mon Jan  6 15:43:47.016 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
%

だよねー

Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied

sudoでやろか

% sudo ~/mongodb/bin/mongod
# 前略
Mon Jan  6 15:45:44.612 [websvr] admin web console waiting for connections on port 28017
Mon Jan  6 15:45:44.612 [initandlisten] waiting for connections on port 27017

立った!モンゴが立った!

f:id:otiai10:20140106155031j:plain

バックグラウンドでサーバを立てつつ、インタラクティブなクライアントを起動する

サーバ立てる

% touch mongo.log
% nohup sudo ~/mongodb/bin/mongod > ~/mongo.log&
[1] 44730
%

クライアント起動

% ~/mongodb/bin/mongo
MongoDB shell version: 2.4.8
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
>

このまま使ってみよう

> db.name
test.name
> db.createCollection('unkos')
{ "ok" : 1 }
> db.unkos.insert({name:'otiai10',status:true})
> db.unkos.find()
{ "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true }
> db.unkos.insert({name:'otiai11',status:false})
> db.unkos.insert({name:'otiai12',status:true})
> db.unkos.find()
{ "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true }
{ "_id" : ObjectId("52ca5847434bc6caa84c61a8"), "name" : "otiai11", "status" : false }
{ "_id" : ObjectId("52ca5850434bc6caa84c61a9"), "name" : "otiai12", "status" : true }
>

永続データになってるよね

> exit
bye
%
% ~/mongodb/bin/mongo
MongoDB shell version: 2.4.8
connecting to: test
> db.unkos.find({status:false});
{ "_id" : ObjectId("52ca5847434bc6caa84c61a8"), "name" : "otiai11", "status" : false }
> db.unkos.find({status:true})
{ "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true }
{ "_id" : ObjectId("52ca5850434bc6caa84c61a9"), "name" : "otiai12", "status" : true }
>

よしよし

DRY