root権限なしでNode.js、MongoDBをインストールする方法



さくらインターネットなどroot権限なしのレンタルサーバーで node.jsをインストールする方法を紹介します。

root権限なしのFreeBSD環境では「libexecinfo」というライブラリのインストールで苦労している人が多いと思います。

「64bit」の環境に「libexecinfo」のソースコードに修正が必要でした。パッチも合わせて公開しています。

スポンサードリンク

「.cshrc」 に次のように記載する

setenv PATH ${PATH}:${HOME}/local/bin
setenv NODE_PATH ${HOME}/local/lib/node_modules
setenv NODE_MODULES ${HOME}/local/bin/node_modules
setenv LD_LIBRARY_PATH
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ukyo/local/lib

その後、次のコマンドにより設定を反映させます。

$ source ~/.cshrc

「LD_LIBRARY_PATH」を正しく設定しないと次のようなエラーが出ます。

$ source ~/.cshrc
LD_LIBRARY_PATH: Undefined variable.

$ source ~/.cshrc
Bad : modifier in $ (/).

libexecinfo をインストールする

「libexecinfo」とは、バックトレースのためのライブラリです。

node.js 、mongoDB のビルドに libexecinfo が必要になるため、最初にインストールします。

$ wget ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/libexecinfo-1.1.tar.bz2
$ tar yxvf libexecinfo-1.1.tar.bz2
$ cd libexecinfo-1.1
$ patch -p0 < libexecinfo.patch ※1
$ setenv SRCCONF ~/usr/local/etc/src.conf
$ make
$ cp libexecinfo.* ~/local/lib/
$ cp execinfo.h ~/local/include/

※1 パッチを当てているのは、次のようなエラーが発生するためです。

パッチは、ここに置いておきます。

execinfo.c: In function 'backtrace_symbols':
execinfo.c:81: error: lvalue required as left operand of assignment

81行目を次のように修正するだけで対応も可能です([感謝] 中里様 2014/03/06追記)

-    (char **)cp = &(rval[size]);
+    cp = (char *)&(rval[size]);

また、「make install」はroot権限がなく使えないので、手動でコピーしています。

Node.js をroot権限なしでインストールする

http://nodejs.org/download/」からNode.jsの最新版を入手します。

$ tar zxvf node-v0.10.25.tar.gz
$ cd node-v0.10.25
$ ./v8/src/platform-freebsd.cc を修正 ※1
$ ./deps/v8/tools/gyp/v8.gyp を修正 ※2
$ ./configure --prefix=$HOME/local
$ gmake
$ gmake install

gmake install 終了後に versionを確認してみましょう。

$ node --version
v0.10.25

※2 先ほどの「execinfo」を参照・リンクするために「-I」「-L」オプションを追加します。

             ['OS=="freebsd"', {
+                'include_dirs+': [
+                  '/home/アカウント名/local/include'
+                ],
                 'link_settings': {
                   'libraries': [
-                    '-L/usr/local/lib -lexecinfo',
+                    '-L/usr/local/lib -L${HOME}/local/lib -lexecinfo',
                 ]},
                 'sources': [
                   '../../src/platform-freebsd.cc',

これは gyp のドキュメントで例を見つけられます。([感謝] 中里様 2014/03/06追記)

スポンサードリンク

mongoDB

SConsは、Pythonによって実装されたソフトウェア構築ツール(Makeの代替ビルドツール )です。

他のソフトウェアに組み込むためのモジュールをつくる機能を持っています。

MongoDBではSconsを利用するので、まずはSconsをインストールします。

ファイルのダウンロード先

http://www.scons.org/download.php

次の手順で構築します。

$ tar zxvf scons-2.3.0.tar.gz
$ cd scons-2.3.0
$ python setup.py install --prefix=$HOME/local/

続いて mongodb をインストールします。

$ tar zxvf mongodb-src-r2.4.9.tar.gz
$ cd mongodb-src-r2.4.9
$ scons all --libpath=$HOME/local/lib --cpppath=$HOME/local/include
$ scons --prefix=$HOME/local/ install --libpath=$HOME/local/lib --cpppath=$HOME/local/include

バイナリが存在することを確認しましょう。

$ ls ~/local/bin/mo*
mongo           mongodump       mongofiles      mongooplog      mongorestore    mongosniff      mongotop
mongod          mongoexport     mongoimport     mongoperf       mongos          mongostat

npmを使ってroot権限なしでモジュールをインストール

npmはパッケージマネージャです。Node.jsをインストールしたら一緒に入っています。

パッケージマネージャーとは、ソフトウェアのインストール、更新、削除を容易に行えるようにするプログラムです。

Rubyには「RubyGem」があり、Pythonには「pip」「easy_install」、Javaには「Maven」があります。

root権限なしで使うために、「~/.npmrc」を作成し次のように記載しましょう。

root =    /home/アカウント名/local/lib/node_modules
binroot = /home/アカウント名/local/bin
manroot = /home/アカウント名/local/share/man

express のインストール方法

node.js が提供するHTTPサーバの機能はプロトコルに沿った低レベルなものになっています。

これらを簡単に定義して実装できるWebアプリケーションフレームワークの代表格が「Express」です。

インストール方法は次のように行います。

$ express -t ejs firstapp
$ cd firstapp
$ npm install express
$ npm install ejs
$ ls node_modules/
ejs     express
$ node app

HTMLテンプレートエンジンはJade、EJSやHaml.jsなどを、CSSテンプレートエンジンはStylusなどを選べます。

共通モジュールとしてインストールしたい場合は「-g」オプションを付けます。

$ npm install -g express
$ npm install -g ejs
$ ls ~/local/lib/node_modules/
ejs  express   npm

socket.io のインストール方法

socket.io を使えば、双方向通信を実現を容易に実現できるようになります。

インストール方法は次のようになります。

$ npm install -g socket.io
$ ls ~/local/bin/node_modules/
socket.io

前述していますが、「.cshrc」 に次のように記載する事を忘れないようにしてください。

setenv PATH ${PATH}:${HOME}/local/bin
setenv NODE_PATH ${HOME}/local/bin/node_modules
setenv NODE_MODULES ${HOME}/local/bin/node_modules

上記手続きをしない場合に発生するエラー

Node.js をインストール時に 「execinfo.h」が存在しないと、gmakeで次のようなエラーが発生します。

../deps/v8/src/platform-freebsd.cc:46:56: warning: execinfo.h: No such file or directory
../deps/v8/src/platform-freebsd.cc:302: error: 'backtrace' was not declared in this scope
../deps/v8/src/platform-freebsd.cc:304: error: 'backtrace_symbols' was not declared in this scope

スポンサードリンク

スポンサードリンク