DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

VMWareFusion上のCentOS5.6でnode.js動かす

ちょっとハマったのでメモとして。

この前入れたVMWareFusion+CentOS5.6の環境でnode.jsを動かしてMac側からアクセスしたい。
じゃないと意味ないからね。

まずは普通にnode.jsのインストール
ちなみにインストールしたCentOSはほぼ最小構成で、Xが入ってるぐらいです。(VMWare Toolsのため)

なので、それ以外の要はインストール時の構成で、DNS/HTTP/DHCPとか何かいろいろあるのは全部抜いてあります。
まあ後は最初に

yum list
yum update
yum -y install gcc-c++ make rsync iptables
ぐらいはしてあります。

node.js のアーカイブを公式サイトからゲットして、普通にmakeします。(今日現在は0.4.8がstableでした)

CentOSの場合、node.js をインストールする前に OpenSSL と Python が必要とのこと。


yum -y install openssl-devel
yum -y install python

で、node.jsのインストール


cd /usr/local/src/
wget http://nodejs.org/dist/node-v0.4.8.tar.gz
tar zxvf node-v0.4.8.tar.gz
cd node-v0.4.8
./configure
make
sudo make install

インストールはすぐに終わるので、そのままnpmのインストールもしておく。
noveとかとりあえず今はいいや。


curl http://npmjs.org/install.sh | sh
後は適時必要になれば、npm install mysql などでモジュールを入れる。

でここまでは全く問題なくて、ハマったのはこの後。

適当に起動確認用の、.jsファイルを作ってアクセス。


vi /tmp/test.js

var http = require('http');
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
var ev = new EventEmitter();var url = require('url');
var path = require('path');

var server = http.createServer(function(req, res){
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}, 2000);
});

server.listen(8124);

※ポートはどこでもお好きに


node /tmp/test.js &
でバックグランドで起動。

本来はMac(CentOSの外部)からアクセスしたいので、穴開ける


sudo vi /etc/sysconfig/iptables

  • A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8124 -j ACCEPT

sudo /etc/rc.d/init.d/iptables restart

Macの方からとりあえずブラウザで確認する(出来ないと思わなかったので。。。)
ところが表示されない。


curl http://[centosのIP]:8124

            • -

curl: (7) couldn't connect to host
exit 7

ってなるので、おかしいな?と思ってFWの設定を確認

telnet [centosのIP] 8124

            • -

telnet: connect to address 192.168.1.104: Connection refused
telnet: Unable to connect to remote host
exit 1

ダメじゃん。。。

で、何かとりあえずCentOS側疑ってみるものの、CentOS側から127.0.0.1curlすると動くのでnodeの話じゃ
なさそうだと。
iptables stop して再度Mac側からやってみるも、やはりアクセス出来ず。

で、ググってみたけど多分キーワードが悪くてあんまりHitして来ない。。。
代わりにPortFowardする方法が載ってて、他の情報仕入れてラッキーみたいな
一応それも書いておく


Macのterminalにて
cd /Library/Application\ Support/VMware\ Fusion/vmnet8
lsするとこんなファイルがある
dhcpd.conf
nat.conf
nat.mac

これのnat.confに[incomingtcp]というセグメントがあるので、ここに以下のルールで記載する
ホストOS (Mac)側のポート = ゲストOS(CentOS)のIP:ゲストOS(CentOS)のポート
ex)8124 = 192.168.8.128:8124
そんなに難しい記載じゃないね。

/Library/Application\ Support/VMware\ Fusion/boot.sh --restart
VM自体の再起動

話を元に戻すと、いろいろキーワード変えながら調べた結果、どうやらVMWareFusionのネットワーク アダプタの設定方法が
NATだとダメみたいな記載をちらほら見つける。

なので、VMWareFusionの設定→ネットワーク→物理ネットワークに直接接続(ブリッジ)を選択して再起動
再度node立ち上げて、Mac側からcurlすると無事「Hello world」出来た!