オープンソースパーティ2007
本日(2007/05/27)24:00締め切りです。都合が付けば行きたいなぁ :-)
今年もLinux Worldが5月30日(水)〜6月1日(金)の3日間、東京ビッグサイトで開催されます。
これに合わせて、例年通りオープンソース関係者が一同に集える大宴会を企画しましたので、ご案内いたします
:
記
●日時:2007年6月1日(金) 19:00-21:00 (18:30 受付開始)
●会費:4,000円(飲み放題コース・当日会場受付にて・ドタキャン禁止)
●会場:T.G.I.フライデーズ 銀座8丁目店 http://r.gnavi.co.jp/g572202/
●交通:JR新橋駅 徒歩7分
●住所:中央区銀座8-9-4 銀座たあぶる館1〜2F
(中央通り 三菱東京UFJ銀行裏)
●TEL :03-5537-5955
自習メモ〜分散プログラミング(ping/1とnodes/0)
公開されているpdfをやってみるシリーズ(?)の分散プログラミング。
マジッククッキー*1を作ったあと、net_adm:ping/1を使って疎通確認。今回はVMwarePlayer上のCentOS4.5にErlangをインストールして、Windows-CentOS間で試してみました。
まずは、Windows・CentOSそれぞれのhostsファイルにテスト用FQDNを追加。Windows側には2つ用意してみました。
192.168.52.1 win.xxx.yyy test.xxx.yyy 192.168.52.128 centos.xxx.yyy
ノード名(任意の名前@ホスト名)を指定して分散ノードを起動。まずはWindows側。
D:\home\shimooka\erlang>erl -name shimooka@win.xxx.yyy Eshell V5.5.4 (abort with ^G) (shimooka@win.xxx.yyy)1>
次にCentOS側を起動し、net_adm:ping/1を実行。「pong」と返ってくれば成功です。
[root@centos ~]# erl -name root@centos.xxx.yyy Erlang (BEAM) emulator version 5.5.4 [source] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.5.4 (abort with ^G) (root@centos.xxx.yyy)1> net_adm:ping('shimooka@win.xxx.yyy'). pong (root@centos.xxx.yyy)2>
今度はWindows側からCentOSへのnet_adm:ping/1。
(shimooka@win.xxx.yyy)1> net_adm:ping('root@centos.xxx.yyy'). pong (shimooka@win.xxx.yyy)2>
うまくいったようです :-)
続いて、片方を終了させたあとに
(shimooka@win.xxx.yyy)2> q(). D:\home\shimooka\erlang>
再度pingをすると接続失敗「pang」が返ってきます。
(root@centos.xxx.yyy)3> net_adm:ping('shimooka@win.xxx.yyy'). pang (root@centos.xxx.yyy)4>
また、分散ノード名で識別されるようなので、test.xxx.yyyでのnet_adm:ping/1はpangになりました。
(root@centos.xxx.yyy)4> net_adm:ping('shimooka@win.xxx.yyy'). pong (root@centos.xxx.yyy)5> net_adm:ping('shimooka@test.xxx.yyy'). pang (root@centos.xxx.yyy)6>
最後に、nodes/0で繋がっているノードを確認してみました。net_adm:ping/1をしたあとじゃないと空のリストが返ってきます。
(root@centos.xxx.yyy)6> q(). ok (root@centos.xxx.yyy)7> [root@centos ~]# [root@centos ~]# erl -name root@centos.xxx.yyy Erlang (BEAM) emulator version 5.5.4 [source] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.5.4 (abort with ^G) (root@centos.xxx.yyy)1> nodes(). [] (root@centos.xxx.yyy)2> net_adm:ping('shimooka@win.xxx.yyy'). pong (root@centos.xxx.yyy)3> nodes(). ['shimooka@win.xxx.yyy'] (root@centos.xxx.yyy)4>
ちなみに、公開されているpdfではnet_adm:ping/1の引数に「'」が付いていませんが、Windows・CentOSの両方とも「'」を付けないと
(root@centos.xxx.yyy)5> net_adm:ping(shimooka@win.xxx.yyy). =ERROR REPORT==== 25-May-2007::23:57:08 === Error in process <0.37.0> on node 'root@centos.xxx.yyy' with exit value: {badarith,[{erl_eval,eval_op,3},{erl_eval,expr_list,6},{erl_eval,expr,5},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {badarith,[{erl_eval,eval_op,3}, {erl_eval,expr_list,6}, {erl_eval,expr,5}, {shell,exprs,6}, {shell,eval_loop,3}]} ** (root@centos.xxx.yyy)6>
となりました。実はこれでずっとはまってました。。。orz
あと、FQDNでない場合、以下のようなエラーになります。
(root@centos.xxx.yyy)6> net_adm:ping('shimooka@win'). =ERROR REPORT==== 25-May-2007::23:59:26 === ** System running to use fully qualified hostnames ** ** Hostname win is illegal ** pang (root@centos.xxx.yyy)7>
CentOS上でのbuild
おまけ ;-D
configureを使った極々一般的(?)な手順でインストールできます。
$ wget http://www.erlang.org/download/otp_src_R11B-4.tar.gz $ tar zxf otp_src_R11B-4.tar.gz $ cd otp_src_R11B-4/ $ ./configure $ make # su - # make install #
ただし、結構時間がかかるみたいです。CF-R4+WindowsXP(SP2)+VMwarePlayer+CentOS4.5な環境で、makeだけで1時間程度かかりました。
自習メモ〜分散プログラミング(リモートノードへのモジュールロード)
公開されているpdfをやってみるシリーズ(?)の分散プログラミング。
「とあるノードにあるモジュールをリモートノードへロードする」を確認しました。環境は前のエントリの通り、WindowsXP-CentOSの組み合わせです。
まずはそれぞれの分散ノードを起動し、net_adm:ping/1による疎通確認。手順は省略(^^;
続いて片側にしかないモジュールのバイナリコードをcode:get_object_code/1で読み込み。
(shimooka@win.xxx.yyy)3> {Module, Binary, Filename} = code:get_object_code(sample). {sample,<<70,79,82,49,0,0,1,216,66,69,65,77,65,116,111,109,0,0,0,68,0,0,0,7,6, 115,97,...>>, "d:/home/shimooka/erlang/sample.beam"} (shimooka@win.xxx.yyy)4>
この時点でCentOS側にはまだモジュールはロードされてませんので、m(sample)で確認するとエラーになるはずです。
(root@centos.xxx.yyy)2> m(sample). =ERROR REPORT==== 27-May-2007::17:50:36 === Error in process <0.77.0> on node 'root@centos.xxx.yyy' with exit value: {undef,[{sample,module_info,[]},{c,m,1},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {undef,[{sample,module_info,[]}, {c,m,1}, {erl_eval,do_apply,5}, {shell,exprs,6}, {shell,eval_loop,3}]} ** (root@centos.xxx.yyy)3>
予定通りのエラー。ここで、rpc:call/4を使ってWindows側からCentOS側へモジュールをロードさせてみます。RPC経由でcode:load_binary/3をコールすることになるようです。
(shimooka@win.xxx.yyy)3> rpc:call('root@centos.xxx.yyy', code, load_binary, [Module, Filename, Binary]). {module,sample} (shimooka@win.xxx.yyy)4>
再度、CentOS側でm(sample)してみます。
(root@centos.xxx.yyy)4> m(sample). Module sample compiled: Date: May 27 2007, Time: 08.44 Compiler options: [] Object file: d:/home/shimooka/erlang/sample.beam Exports: hello_world/0 module_info/0 module_info/1 ok (root@centos.xxx.yyy)5> sample:hello_world(). Hello, World! ok (root@centos.xxx.yyy)6>
おお!うまくいきました。なんか気持ち悪い感じもしなくもないですが、なんかすごい :-)
しかし、code:get_object_code/1で返ってくるタプルの順番とcode:load_binary/3のリストで指定する順番が微妙に違うのが気になる。。。