FreeBSD に簡単に node.js 0.4.5 を入れられるセットを作ってみた

このエントリーをはてなブックマークに追加
はてなブックマーク - FreeBSD に簡単に node.js 0.4.5 を入れられるセットを作ってみた
Share on Facebook
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

FreeBSD に簡単に node.js 0.4.5 を入れられるセットを作ってみた。
(本当は、さくらインターネットのレンタルサーバーのスタンダードにインストールできるようにしようとしていたが、できていない。)

尚、この記事の内容と配布物は、 FreeBSD 以外の OS では、無意味なので注意。

ビルドの確認は PC-BSD 8.2 amd64 (自宅のマシン)と FreeBSD 8.1 i386 (さくらインターネットの VPS )で行った。
ただし、 node.js が本当に全く問題なく動作しているかは、確かめていない。

事前に gmake と python 2.x 系(2.4以降)がインストールされていなければならない。
PC-BSD の場合は、 Ports コンソール上で行うべきだろう。

node-v0.4.5_hunyoi.tar.bz2 をダウンロードして展開する。

> curl http://hunyoi.com/pub/node/node-v0.4.5_hunyoi.tar.bz2 | tar xjvf –

node-v0.4.5_hunyoi に移動してインストールスクリプトを起動する。

> cd node-v0.4.5_hunyoi
> ./install.sh

これで、 ${HOME}/local 以下にインストールされるので、
検索パス関係の環境変数を設定すると node が起動できる。

> setenv LD_LIBRARY_PATH ${HOME}/local/lib
> setenv PATH ${PATH}:${HOME}/local/node/0.4.5/bin
> rehash
> node –version

${HOME}/local じゃなくて別の所にしたい場合は、 TOP 環境変数を設定して ./install.sh を起動する。
node に含まれている v8 をそのまま使う場合(v8 を置き換えない場合) USE_DEFAULT_V8=yes などと環境変数を設定して ./install.sh を起動する。

このディストリビューションは、以下のような事をしている。

・libexecinfo-1.1 にパッチを当ててコンパイルしている。
 /etc/src.conf が読み込めない場合は、 SRCCONF 環境変数に /dev/null を指定して
 /etc/src.conf を参照しないようにしている(src.conf の manpage を参照)。
 Ports のパッチではなく、自分で作ったパッチ(C99用)を当てているが、
 このパッチは Ports にパッチがあるのを知らずに作った物。
 確か execinfo.c は、修正しないとコンパイルできなかった。

・mod_*.py で v8 のビルド時のライブラリの検索先パスを追加している。
 node-v0.4.5/wscript, node-v0.4.5/deps/v8/SConstruct に対して、
 TOP 環境変数が設定されていれば、 ${TOP}/lib, ${TOP}/include、
 そうじゃなければ、 ${HOME}/local/lib, ${HOME}/local/include を参照するように
 コードを挿入している。
 node-v0.4.5/deps/v8/tools/gyp/v8.gyp は、コードが書き込めないので、
 展開したディレクトリを挿入している。
 これは、 libexecinfo をユーザーディレクトリ内にインストールしているが、
 node.js や v8 のビルドのスクリプト内では、 libexecinfo を探すのに
 /usr/local/lib しか見ていないため。

・mod_wscript.py で v8 のビルドのオプションに ‘importenv=”LD_LIBRARY_PATH”‘ を追加している。
 v8 のビルド中、 mksnapshot をビルドし、実行して snapshot.cc を作成するが、
 mksnapshot が libexecinfo を使うために LD_LIBRARY_PATH が参照できる必要がある。
 しかし、 v8 のビルドの際に importenv で指定しないと外部で設定した LD_LIBRARY_PATH が
 無視されてしまう為。

・node-v0.4.5 に含まれている v8 (バージョン 3.1.8.8) では、下記のエラーでビルドができないため、
 v8 をより新しいバージョン(3.2.9)に置き換えている。

obj/release/mksnapshot obj/release/snapshot.cc –logfile “/usr/home/xxxxx/node_work/node-v0.4.5_hunyoi/node-v0.4.5/build/default/obj/release/snapshot.log” –log-snapshot-positions

#
# Fatal error in CALL_AND_RETRY_0
# Allocation failed – process out of memory
#

Abort
scons: *** [obj/release/snapshot.cc] Error 134
scons: building terminated because of errors.
Waf: Leaving directory `/usr/home/xxxxx/node_work/node-v0.4.5_hunyoi/node-v0.4.5/build’
Build failed: -> task failed (err #2):
{task: libv8.a SConstruct -> libv8.a}
gmake: *** [program] エラー 1

これらは、さくらサーバにnode.jsをインストールしたい(未完了) の問題を途中までは解決していると思う。
しかし、この node.js インストールセットでさくらインターネットのレンタルサーバーのスタンダードにインストールしようとすると、下記のエラーでビルドが失敗する。

g++ -o obj/release/api.o -c -Wall -Werror -W -Wno-unused-parameter -Wnon-virtual-dtor -m32 -O3 -fomit-frame-pointer -fdata-sections -ffunction-sections -ansi -fno-rtti -fno-exceptions -Wall -Werror -W -Wno-unused-parameter -Wnon-virtual-dtor -m32 -O3 -fomit-frame-pointer -fdata-sections -ffunction-sections -ansi -DV8_TARGET_ARCH_IA32 -DV8_FAST_TLS -DENABLE_DEBUGGER_SUPPORT -DENABLE_VMSTATE_TRACKING -DENABLE_LOGGING_AND_PROFILING -I/home/xxxxx/local/include -I/usr/local/include -I/home/xxxxx/node-v0.4.5_hunyoi/node-v0.4.5/deps/v8/src /home/xxxxx/node-v0.4.5_hunyoi/node-v0.4.5/deps/v8/src/api.cc
g++: Internal error: Killed: 9 (program cc1plus)
Please submit a full bug report.
See for instructions.
scons: *** [obj/release/api.o] Error 1
scons: building terminated because of errors.
Waf: Leaving directory `/home/xxxxx/node-v0.4.5_hunyoi/node-v0.4.5/build’
Build failed: -> task failed (err #2):
{task: libv8.a SConstruct -> libv8.a}
gmake: *** [program] Error 1

これは、 FreeBSD 7.1 だからなのか、それとも高負荷の為にコンパイラのプロセスが kill されてしまうのか…
後日、別のマシンに FreeBSD 7.1 を入れて、コンパイルしてみようと思う。

しかし、ここまでのようなやり方は、果たして正しいのだろうか…?

カテゴリー: 未分類   タグ: ,   この投稿のパーマリンク

FreeBSD に簡単に node.js 0.4.5 を入れられるセットを作ってみた への3件のコメント

  1. ピンバック: FreeBSD 用の nave もどきを作ってみた | ふにょいサイト

  2. hunyosi より:

    さくらの共有サーバーに Node.js のバイナリを置いて動かしてみた」で試してみたところ、別のPCにインストールした FreeBSD 7.1 i386 上でコンパイルできました。
    また、生成されたバイナリをさくらの共有サーバー(スタンダード)においた所、簡単な hello, world プログラムが一応動きました。

  3. 通りすがり より:

    gmake 部分を nice -n 20 gmake に書き換えることで、一発インストール完了しました。
    さくらのビジネスプランです。ご報告まで。

コメントは受け付けていません。