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が動いてる環境なら修正は必要ないかもしれません。
プロキシポート(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) {
という感じにする。例外の時から薄々気付いてたけどパッケージ/クラス名すげぇ
実行
$ 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上で実行できるなら、省電力で常時起動しておけるのでいい気がするんだけどなあ。