CentOS 5.4で、node.js, socket.io

wget, gitが必要なのでyumでインストール

wget, gitをyumでインストール。

# yum install wget git
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Setting up Install Process
No package git available.
Resolving Dependencies
    • > Running transaction check
      • > Package wget.i386 0:1.11.4-2.el5_4.1 set to be updated
    • > Finished Dependency Resolution
Dependencies Resolved ==================================================================================================== Package Arch Version Repository Size ==================================================================================================== Updating: wget i386 1.11.4-2.el5_4.1 base 582 k Transaction Summary ==================================================================================================== Install 0 Package(s) Update 1 Package(s) Remove 0 Package(s) Total download size: 582 k Is this ok [y/N]: y Downloading Packages: wget-1.11.4-2.el5_4.1.i386.rpm | 582 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Updating : wget 1/2 Cleanup : wget 2/2 Updated: wget.i386 0:1.11.4-2.el5_4.1 Complete!

wgetはインストールOKだけど、gitはリポジトリにないみたい。

http://d.hatena.ne.jp/uk_oasis/20090807/1249633626
ここを見ると、dagのリポジトリyumに追加すればいいみたい。

# vi /etc/yum.repos.d/CentOS-Base.repo

以下を追加して保存。
[dag]
name=Dag RPM Repository for Redhat EL5
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

gitをインストール。

# yum install git
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
addons                                                                       |  951 B     00:00
base                                                                         | 1.1 kB     00:00
dag                                                                          | 1.1 kB     00:00
dag/primary                                                                  | 4.1 MB     00:05
dag                                                                                     11214/11214
extras                                                                       | 2.1 kB     00:00
updates                                                                      | 1.9 kB     00:00
Setting up Install Process
Resolving Dependencies
    • > Running transaction check
      • > Package git.i386 0:1.7.8.2-2.el5.rf set to be updated
    • > Processing Dependency: perl-Git = 1.7.8.2-2.el5.rf for package: git
    • > Processing Dependency: perl(Git) for package: git
    • > Running transaction check
      • > Package perl-Git.i386 0:1.7.8.2-2.el5.rf set to be updated
    • > Finished Dependency Resolution
Dependencies Resolved ==================================================================================================== Package Arch Version Repository Size ==================================================================================================== Installing: git i386 1.7.8.2-2.el5.rf dag 6.7 M Installing for dependencies: perl-Git i386 1.7.8.2-2.el5.rf dag 25 k Transaction Summary ==================================================================================================== Install 2 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 6.8 M Is this ok [y/N]: y Downloading Packages: (1/2): perl-Git-1.7.8.2-2.el5.rf.i386.rpm | 25 kB 00:00 (2/2): git-1.7.8.2-2.el5.rf.i386.rpm | 6.7 MB 00:06
                                                                                                                                                                                                      • -
Total 834 kB/s | 6.8 MB 00:08 警告: rpmts_HdrFromFdno: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6 dag/gpgkey | 1.6 kB 00:00 Importing GPG key 0x6B8D79E6 "Dag Wieers (Dag Apt Repository v1.0) " from http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt Is this ok [y/N]: y Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : perl-Git 1/2 Installing : git 2/2 Installed: git.i386 0:1.7.8.2-2.el5.rf Dependency Installed: perl-Git.i386 0:1.7.8.2-2.el5.rf Complete!

nvmのソースコードをcheckout

$ git clone git://github.com/creationix/nvm.git ~/.nvm
Cloning into '/home/sai/.nvm'...
remote: Counting objects: 291, done.
remote: Compressing objects: 100% (157/157), done.
remote: Total 291 (delta 156), reused 256 (delta 126)
Receiving objects: 100% (291/291), 40.28 KiB, done.
Resolving deltas: 100% (156/156), done.

.bashrcにnvm.shを書いておく。

$ echo . ~/.nvm/nvm.sh >> ~/.bashrc
$ . ~/.bashrc

install nodeとuse

とりあえず、現時点で旧安定版とされているv0.4.12をインストール。

$ nvm install v0.4.12

...ビルドのメッセージが流れます

Waf: Leaving directory `/home/sai/.nvm/src/node-v0.4.12/build'
'build' finished successfully (3m7.228s)
Waf: Entering directory `/home/sai/.nvm/src/node-v0.4.12/build'
DEST_OS: linux
DEST_CPU: ia32
Parallel Jobs: 1
Product type: program
 * installing deps/libeio/eio.h as /home/sai/.nvm/v0.4.12/include/node/eio.h
 * installing deps/v8/include/v8.h as /home/sai/.nvm/v0.4.12/include/node/v8.h
 * installing deps/v8/include/v8-preparser.h as /home/sai/.nvm/v0.4.12/include/node/v8-preparser.h
 * installing deps/v8/include/v8-debug.h as /home/sai/.nvm/v0.4.12/include/node/v8-debug.h
 * installing deps/v8/include/v8-profiler.h as /home/sai/.nvm/v0.4.12/include/node/v8-profiler.h
 * installing deps/v8/include/v8stdint.h as /home/sai/.nvm/v0.4.12/include/node/v8stdint.h
 * installing deps/v8/include/v8-testing.h as /home/sai/.nvm/v0.4.12/include/node/v8-testing.h
 * installing deps/libev/ev.h as /home/sai/.nvm/v0.4.12/include/node/ev.h
 * installing build/default/config.h as /home/sai/.nvm/v0.4.12/include/node/config.h
 * installing src/node.h as /home/sai/.nvm/v0.4.12/include/node/node.h
 * installing src/node_object_wrap.h as /home/sai/.nvm/v0.4.12/include/node/node_object_wrap.h
 * installing src/node_buffer.h as /home/sai/.nvm/v0.4.12/include/node/node_buffer.h
 * installing src/node_events.h as /home/sai/.nvm/v0.4.12/include/node/node_events.h
 * installing src/node_version.h as /home/sai/.nvm/v0.4.12/include/node/node_version.h
 * installing doc/node.1 as /home/sai/.nvm/v0.4.12/share/man/man1/node.1
 * installing tools/node-waf as /home/sai/.nvm/v0.4.12/bin/node-waf
 * installing tools/wafadmin/py3kfixes.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/py3kfixes.py
 * installing tools/wafadmin/__init__.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/__init__.py
 * installing tools/wafadmin/Options.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Options.py
 * installing tools/wafadmin/Environment.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Environment.py
 * installing tools/wafadmin/Task.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Task.py
 * installing tools/wafadmin/Scripting.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Scripting.py
 * installing tools/wafadmin/Logs.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Logs.py
 * installing tools/wafadmin/pproc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/pproc.py
 * installing tools/wafadmin/Runner.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Runner.py
 * installing tools/wafadmin/Node.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Node.py
 * installing tools/wafadmin/Build.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Build.py
 * installing tools/wafadmin/ansiterm.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/ansiterm.py
 * installing tools/wafadmin/Configure.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Configure.py
 * installing tools/wafadmin/Utils.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Utils.py
 * installing tools/wafadmin/TaskGen.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/TaskGen.py
 * installing tools/wafadmin/Constants.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Constants.py
 * installing tools/wafadmin/Tools/libtool.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/libtool.py
 * installing tools/wafadmin/Tools/gcc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gcc.py
 * installing tools/wafadmin/Tools/compiler_d.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/compiler_d.py
 * installing tools/wafadmin/Tools/winres.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/winres.py
 * installing tools/wafadmin/Tools/cc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/cc.py
 * installing tools/wafadmin/Tools/compiler_cc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/compiler_cc.py
 * installing tools/wafadmin/Tools/cxx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/cxx.py
 * installing tools/wafadmin/Tools/misc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/misc.py
 * installing tools/wafadmin/Tools/__init__.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/__init__.py
 * installing tools/wafadmin/Tools/gxx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gxx.py
 * installing tools/wafadmin/Tools/ccroot.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/ccroot.py
 * installing tools/wafadmin/Tools/compiler_cxx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/compiler_cxx.py
 * installing tools/wafadmin/Tools/d.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/d.py
 * installing tools/wafadmin/Tools/intltool.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/intltool.py
 * installing tools/wafadmin/Tools/preproc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/preproc.py
 * installing tools/wafadmin/Tools/python.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/python.py
 * installing tools/wafadmin/Tools/dmd.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/dmd.py
 * installing tools/wafadmin/Tools/nasm.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/nasm.py
 * installing tools/wafadmin/Tools/xlc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/xlc.py
 * installing tools/wafadmin/Tools/ar.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/ar.py
 * installing tools/wafadmin/Tools/xlcxx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/xlcxx.py
 * installing tools/wafadmin/Tools/suncxx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/suncxx.py
 * installing tools/wafadmin/Tools/config_c.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/config_c.py
 * installing tools/wafadmin/Tools/suncc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/suncc.py
 * installing tools/wafadmin/Tools/gob2.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gob2.py
 * installing tools/wafadmin/Tools/unittestw.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/unittestw.py
 * installing tools/wafadmin/Tools/node_addon.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/node_addon.py
 * installing tools/wafadmin/Tools/gdc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gdc.py
 * installing tools/wafadmin/Tools/icc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/icc.py
 * installing tools/wafadmin/Tools/gnu_dirs.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gnu_dirs.py
 * installing tools/wafadmin/Tools/osx.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/osx.py
 * installing tools/wafadmin/Tools/icpc.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/icpc.py
 * installing tools/wafadmin/Tools/gas.py as /home/sai/.nvm/v0.4.12/lib/node/wafadmin/Tools/gas.py
 * installing build/default/tools/nodejs.pc as /home/sai/.nvm/v0.4.12/lib/pkgconfig/nodejs.pc
 * installing build/default/node as /home/sai/.nvm/v0.4.12/bin/node
 * installing build/default/src/node_config.h as /home/sai/.nvm/v0.4.12/include/node/node_config.h
Waf: Leaving directory `/home/sai/.nvm/src/node-v0.4.12/build'
'install' finished successfully (0.112s)
Now using node v0.4.12
/usr/bin/which: no npm in (/home/sai/.nvm/v0.4.12/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/sai/bin)
Installing npm...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7881  100  7881    0     0   7339      0  0:00:01  0:00:01 --:--:-- 48054
tar=/bin/tar
version:
tar (GNU tar) 1.15.1
install npm@1.0
fetching: http://registry.npmjs.org/npm/-/npm-1.0.106.tgz
0.4.12
1.0.106
cleanup prefix=/home/sai/.nvm/v0.4.12

All clean!
/home/sai/.nvm/v0.4.12/bin/npm -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
/home/sai/.nvm/v0.4.12/bin/npm_g -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
/home/sai/.nvm/v0.4.12/bin/npm-g -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
npm@1.0.106 /home/sai/.nvm/v0.4.12/lib/node_modules/npm
It worked

pythonのファイルがけっこう入ってきますね。

nvm useを実行。

$ nvm use v0.4.12
Now using node v0.4.12
$ node --version
v0.4.12

nodeが動作しているのと、バージョンまで確認できました。

npmのインストール

$ curl http://npmjs.org/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7881  100  7881    0     0   6843      0  0:00:01  0:00:01 --:--:-- 44275
tar=/bin/tar
version:
tar (GNU tar) 1.15.1
install npm@1.0
fetching: http://registry.npmjs.org/npm/-/npm-1.0.106.tgz
0.4.12
1.0.106
cleanup prefix=/home/sai/.nvm/v0.4.12

All clean!
/home/sai/.nvm/v0.4.12/bin/npm -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
/home/sai/.nvm/v0.4.12/bin/npm_g -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
/home/sai/.nvm/v0.4.12/bin/npm-g -> /home/sai/.nvm/v0.4.12/lib/node_modules/npm/bin/npm-cli.js
npm@1.0.106 /home/sai/.nvm/v0.4.12/lib/node_modules/npm
It worked

ejs, expressのインストール

$ npm install ejs express
ejs@0.6.1 ./node_modules/ejs
express@2.5.8 ./node_modules/express
├── mkdirp@0.3.0
├── mime@1.2.4
├── qs@0.4.2
└── connect@1.8.5

socket.ioもまとめて入れちゃいたいところですが、後述の理由でエラーになるのでまだ入れません。

tarのアップデート

CentOS 5.4のyumのアップデートできるtarのバージョンは、1.15までらしく、socket.ioのパッケージ解凍でコケるらしい。

tar-1.26をダウンロードしてきてインストール。
デフォルトで入っているtarはカーネル関連でのrpm依存関係があるため、デフォルトのtarのアンインストールはせずに、1.26をソースからインストールすることにしました('A`)rpmでの管理が好きな自分としては屈辱的…

$ wget http://ftp.gnu.org/gnu/tar/tar-1.26.tar.gz
$ tar xfz tar-1.26.tar.gz
$ cd tar-1.26
$ configure
$ make
$ sudo make install

socket.ioのインストール

$ npm install socket.io
socket.io@0.8.7 ./node_modules/socket.io
├── policyfile@0.0.4
├── redis@0.6.7
└── socket.io-client@0.8.7

あとは適当なsocket.ioの動作サンプルを作って動作確認。

$ node hogehoge.js

ロケット砲、グレネード、迫撃砲、爆弾、タンクローリー特攻、地対艦ミサイルっていうワルプルギスの夜戦のほむらちゃんコンボなみのインストール連発でした…