2010
10/23
Fedora 8 上で node.js を RPM からインストールする
おばんです。最近では JavaScript に夢中になっていて、サーバサイドも JavaScript で書きたくなってきた今日この頃みなさまいかがお過ごしでしょうか。
今回はサーバサイドで JavaScript を実行することが出来る node.js (執筆時点で最新版の v0.2.3) を Amazon AWS の Fedora 8 上で RPM を作ってインストールしてみたので記録として残しておきます。未確認ですが他の RedHat 系のディストリビューションでも通用するかと思います。
前もってソースコードのビルドに必要そうなものを入れておく
# yum groupinstall "Development Tools"
コンパイラや基本的なライブラリをまとめてセットアップしてしまいます。
必要なファイルを集める
# cd /usr/src/redhat/SOURCES # wget http://nodejs.org/dist/node-v0.2.3.tar.gz
公式サイトからソースコードを入手します。
# cd /usr/src/redhat/SPECS # wget http://gist.github.com/raw/635036/79e971db1dac505201525d9f13218f734b37ff17/nodejs.spec
すでに node.js の spec ファイルを書いている人がいたので、ありがたく利用させていただきました。(いまや spec ファイルも gist で公開されるような時代なのか……。)
RPM の作成・インストール
rpmbuild コマンドを使ってビルドします。
# rpmbuild -bb nodejs.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.86351 + umask 022 + cd /usr/src/redhat/BUILD + LANG=C + export LANG + unset DISPLAY ... snip ... /usr/src/redhat/BUILD/node-v0.2.3/wscript:188: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed. Use configure --without-ssl to disable this message. エラー: /var/tmp/rpm-tmp.86351 の不正な終了ステータス (%build) RPM ビルドエラー: /var/tmp/rpm-tmp.86351 の不正な終了ステータス (%build)
OpenSSL の devel パッケージがはいっていないのでビルド出来ずエラーしてしまいました。yum でサクっと入れてしまいます。
# yum install openssl-devel
気をとりなおしてもう一度!
# rpmbuild -bb nodejs.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.4886 ... snip ...
メガバイト級のソースコードなのでビルドに結構時間がかかります。そろそろ終わりそうなところにさしかかってまたエラーしてしまいました。
... snip ... ファイルの処理中: nodejs-debuginfo-0.2.3-1.fc8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/nodejs-0.2.3-1.fc8-tV2607 エラー: インストール済み(ただし未伸張)ファイルが見つかりました: /usr/lib/node/wafadmin/Build.pyc /usr/lib/node/wafadmin/Build.pyo /usr/lib/node/wafadmin/Configure.pyc /usr/lib/node/wafadmin/Configure.pyo /usr/lib/node/wafadmin/Constants.pyc /usr/lib/node/wafadmin/Constants.pyo ... snip ...
エラーメッセージを Google で調べてみると spec ファイル内の定義と実際の BUILDS ディレクトリのファイルに差異があると発生するようです。
上記サイトによると以下のオプションをつけて rpmbuild するとエラーしなくなるということがわかりました。(感謝!)
# rpmbuild -bb --define="__check_files %{nil}" nodejs.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.26330 ... snip ...
またビルドが始まります。前回のビルド時にオブジェクトファイルが生成されているためか程々の時間でビルドが終了しました。
... snip ... Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 書き込み完了: /usr/src/redhat/RPMS/x86_64/nodejs-0.2.3-1.fc8.x86_64.rpm 書き込み完了: /usr/src/redhat/RPMS/x86_64/nodejs-debuginfo-0.2.3-1.fc8.x86_64.rpm 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.60752 + umask 022 + cd /usr/src/redhat/BUILD + cd node-v0.2.3 + rm -rf /var/tmp/nodejs-0.2.3-1.fc8-Pw6173 + exit 0
これで /usr/src/redhat/RPMS/ 下に RPM をビルドすることに成功しました。あとはいつものとおり rpm コマンドでインストールすれば OK です。
# cd ../RPMS/x86_64 # rpm -ivh nodejs-0.2.3-1.fc8.x86_64.rpm 準備中... ########################################### [100%] 1:nodejs ########################################### [100%]
コマンドを叩いてみます。
# node --version v0.2.3
大丈夫そうですね。
途中躓きながらでしたが無事 RPM からインストール出来ました。手始めに PHP では実装の難しいソケットサーバにチャレンジしてみようかなと思います。それではまた!