LS-XHLでGenkidamaをリモート動作させてみた

OverlayWeaver(前回のエントリ)がLinkStation(arm-debian-lenny)上で動いた、というものだったので、今度はGenkidama(ニコ動キャッシュP2P共有ソフト)を動かしてみます。標準のバイナリ状態では動かなかったのでタスクトレイ関係と外部ホスト対応でちょっと改良をしてみました。


※ここで言及している修正事項は既にGenkidamaフォーラムでも議論になっている事で、現テスト時点でサポートされる事はないと思います。
http://sourceforge.jp/forum/message.php?msg_id=44825

Javaの設定

前日はgij-4.3.2じゃないと動作しなかったけど、今度はopenjdk6じゃないと起動しませんでした。

 $ update-alternatives --config java
 -----------------------------------------------
           1    /usr/bin/gij-4.3
           2    /usr/lib/jvm/java-gcj/jre/bin/java
 *+        3    /usr/lib/jvm/java-6-openjdk/jre/bin/java

ソースコードのチェックアウト

ソースを修正するのでリポジトリからソースを落とす

 $ svn checkout http://svn.sourceforge.jp/svnroot/genkidama/genkidama/tags/0.3.4

こんな感じで0.3.4タグのソースをチェックアウト

ソースの微修正+ビルド(ant)

Gnomeの無い環境のせいかタスクトレイ関係の部分で上手く動作せず、例外発生していたためタスクトレイに入れる処理をコメントアウトしてみました。Linuxでも動作実績があるのでGnomeとかX11が動いてる環境なら修正は必要ないかもしれません。

タスクトレイ機能を無効化

dareka.Main.javaのコノ行を

 // gui = new Chikarawo();
 // gui.openTray();

にする。

プロキシポート(8080)の外部端末接続許可修正

ついでにローカルホスト以外の端末がプロキシポートへアクセスできるように修正、(セキュリティの事情で制限してるのかも、修正には注意を)

dareka.Server.javaのコノ行を

    private void bindServerSocket() {
        try {
// 元々は↓の3行
//          serverSocket.bind(new InetSocketAddress(
//          InetAddress.getByName(null), Integer.getInteger(
//                  "listenPort").intValue()));
// それを↓の2行に
          serverSocket.bind(new InetSocketAddress(
        		  Integer.getInteger("listenPort").intValue()));
        } catch (Exception e) {

という感じにする。例外の時から薄々気付いてたけどパッケージ/クラス名すげぇ

ビルド(ant)

次に一旦ワークスペースをcleanしてから、antを実行すれば「dist/Genkidama-0.3.4.jar」ができるはず。本当はビルドまで全部CUI上でやりたかったんですが、noobなのでeclipse無しのant設定が良くわかりません。なのでi386-PC上のeclipseでant動作させました。これなら簡単です。

実行

 $ java -server -jar Genkidama-0.3.4.jar

ホストブラウザのプロキシ設定

proxyは「http://javaしてるhostのip:8080」に設定しておく

実行中の様子

ネットワークのモニタ
 $ netstat -all -t
 稼働中のインターネット接続 (サーバと確立)
 Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態
 略
 tcp        0      0 *:netbios-ssn           *:*                     LISTEN
 tcp        0      0 *:50000                 *:*                     LISTEN
 tcp        0      0 *:http-alt              *:*                     LISTEN
 tcp        0      0 *:www                   *:*                     LISTEN
 tcp        0      0 *:50001                 *:*                     LISTEN
 tcp        0      0 *:https                 *:*                     LISTEN
 tcp        0      0 *:microsoft-ds          *:*                     LISTEN
 略

http-alt(8080)の所が曲者で、「*:」でなく

 tcp        0      0 rasberry:http-alt       *:*                     LISTEN

とかになってると自端末からのアクセスしか受け付けない状態(修正が適用されてない)

実行ログ
$ java -jar Genkidama-0.3.4.jar
2009/09/19 8:55:05 dareka.Main mainBody
情報: Genkidama 0.3.4
2009/09/19 8:55:05 dareka.Main mainBody
情報: port=8080
略
2009/09/19 8:55:09 com.dokukino.genkidama.DHTServer connect
情報: DHT configuration:
  hostname:port:     秘密:50000
  transport type:    TCP
  routing algorithm: Kademlia
  routing style:     Iterative
  directory type:    VolatileMap
  working directory: .

結局LinkStationで動作したの?

とりあえずこんな感じで動いたような気がするんですがブラウザにプロキシ設定してもなかなか繋がらず(プログラムは起動してるんですが、重い気がする)。この状態だとopenjdk-6なのが悪いのか、arm環境なのが悪いのか、Linuxなのが悪いのか、現時点では問題の切り分けができませんね。

その後AspireOne-Ubuntu+openjdk-6の環境を持ってきて、カスタムGenkidama.jarを実行させてみたら問題なく動作する事を確認したので、arm環境である事(アーキテクチャの違い?演算能力不足?)が悪い気がします。もしLinkStation上で実行できるなら、省電力で常時起動しておけるのでいい気がするんだけどなあ。