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とかとりあえず今はいいや。
後は適時必要になれば、npm install mysql などでモジュールを入れる。
curl http://npmjs.org/install.sh | sh
でここまでは全く問題なくて、ハマったのはこの後。
適当に起動確認用の、.jsファイルを作ってアクセス。
※ポートはどこでもお好きに
vi /tmp/test.jsvar 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
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.1でcurlすると動くので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」出来た!