FedOneサーバをインストールしてみよう

Google Waveはそのサーバの実装がオープンソースで開発されています。オープンソースで開発されているため、あなたもサーバプログラムをダウンロードし、インストールする事でGoogle Waveのネットワークを拡張する事が出来ます。このページではGoogle Waveのプロトタイプ実装であるFedOneサーバをインストールしてみます。

環境

OS Ubuntu9.10

各種ツールのインストール

Javaのインストール

FedOneはJavaで書かれていますので、Javaの環境をインストールします。

$ sudo apt-get install sun-java6-jdk

Apache Antのインストール

JavaのビルドツールであるApache Antをインストールします。

$ sudo apt-get install ant

Mercurial

FedOneサーバはMercurialでバージョン管理されていますので、Mercurialをインストールします。

$ sudo apt-get install mercurial

Openfireのインストール

Google WaveはXMPPを用いてサーバ同士で通信を行います。XMPPはメッセンジャーの用にメッセージを交換するためのプロトコルで、OpenfireはそのXMPPのサーバです。なぜOpenfireを用いるかというと、FedOneはOpenfireの拡張機能として実装されているからです。

下の図は、Google Waveの通信構成図です。緑の部分がOpenfireに相当し、青の部分がFedOneとなります。(Google Wave Federation Protocolから引用)

Openfireはapt-getでインストールする事が出来ません。よって公式ページからダウンロードします。

環境はUbuntu 9.10ですが、Debian用のパッケージを用いてインストールする事が出来ますので、openfire_3.6.4_all.deb Debian package, no Java JREをダウンロードします。

$ wget "http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_3.6.4_all.deb"

$ sudo dpkg -i openfire_3.6.4_all.deb

これでOpenfireのインストールは完了です。次はOpenfireの設定をしましょう。

Openfireの設定

まずOpenfireサーバを起動しましょう。

$ sudo /etc/init.d/openfire start

OpenfireはWebブラウザを用いて設定を行います。Openfireをインストールしたサーバの9090番ポートにブラウザでアクセスする事で設定画面を開く事が出来ます。

http://localhost:9090/

Welcome to Setupの画面が開きましたでしょうか。開いたらセットアップを開始しましょう。

 

Choose Language
English(en)を選択します。

Server Settings
Domain : wave.rainbowdevil.jp
Admin Console Port : 9090 (default)
Secure Admin Console Port : 9091 (default)

Database Settings
Embedded Databaseを選択します。



Profile Settings
Default を選択します。

Administrator Account
管理者のメールアドレス(管理者はあなたなのであなたのアドレス)とパスワードを設定します。

Setup Complete! と表示されれば完了です。でももうちょっと設定が続きます。

一度Openfireサーバを再起動します。再起動しないとログインできないので注意!

$ sudo /etc/init.d/openfire restart

続いてログイン画面を開き、管理者としてログインします。

Administration Consoleから、username admin , password 管理者のパスワード(さっき設定したパスワード)を入力します。

ログインに成功したら、次の設定を行います。

 

Wave拡張の接続設定

Server -> Server Settings -> External Components
Enabled を選択します。
Default shared secret に 秘密のパスワードを入力します。このパスワードは後でWaveサーバの設定で使用します。

続いてAllowed to Connect で Whitelist を選択します。
subdomainにwaveを入力し、Shared secretに秘密のパスワードを入力しAdd Componentボタンを選択します。

 

XMPP接続設定

Server -> Server Settings -> Security Settings
Client Connection SecurityでCustomを選択します。

Old SSL method : Available
TLS method : Optional





Server Connection Security でCustomを選択します。


Server Dialback で Available を選択します。
TLS method で Optional  を選択します。

Accept self-signed certificates. Server dialback over TLS is now available. にチェックを入れます。このチェックを入れる事でオレオレ証明書で使う事が出来ます。


 

ユーザ登録設定

次に、セキュリティ強化のための設定を行います。
この項目は外部にWaveサーバを公開しないのであれば必要ありません。
Server -> Server Settings -> Registration & Login Settings で次の3つの項目をDisabledにします。
Inband Account Registration , Change Password , Anonymous Login

 

通信内容圧縮設定

Server -> Server Settings -> Compression Settingで次の2つの項目をAvilableにします。
Client Compression Policy , Server Compression Policy

 

ファイル通信設定

Server -> Server Settings -> File Transfer Settings を Disabled にします。

以上でOpenfireの設定は完了です。

FedOneのインストール

ではFedOneをダウンロードしましょう。リポジトリからMercurialを使って直接取得します。

次のコマンドでダウンロードが可能です。

$ hg clone https://wave-protocol.googlecode.com/hg/ wave-protocol

ダウンロードが完了したら、コンパイルしてみましょう。

$ cd wave-protocol

$ ant

正常にコンパイルが完了すればOKです。

FedOneの設定

次にWaveサーバであるFedOneの設定を行います。今回は自己署名証明書(オレオレ証明書)で作成します。
自己署名証明書を簡単に作る事が出来るスクリプトがGenerating Federation Certificatesにありますので、それを利用します。

もし、WaveSandbox.comにこのサーバを接続(federate)したいのであれば、自己署名証明書ではできません。

上記のページの「Hera's a script」と書かれている部分のスクリプトをmake-cert.shとして、wave-protocolディレクトリに保存しましょう。

そしてスクリプトを実行します。引数はwave+ドメイン名です。ここではwave.rainbowdevil.jpとして作成します。

$ chmod +x make-cert.sh
$ ./make-cert.sh wave.rainbowdevil.jp
Generating RSA private key, 1024 bit long modulus
........++++++
.............................++++++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

とりあえず全部デフォルトでOKなので、全部エンターで完了します。
次のファイルが作成されている事を確認します。
wave.rainbowdevil.jp.crt
wave.rainbowdevil.jp.key

設定ファイルの作成

waveサーバの設定ファイルを作成します。
サンプルが用意されているので、それを修正して作成しましょう。

$ cp run-config.sh.example run-config.sh

11行目 サンプルをコピーしただけでは動作しないよう、終了するコードがありますので、それを削除します。

echo "You must configure the run-config.sh script" ; exit 1

17行目 Waveサーバのドメイン名を設定します。
WAVE_SERVER_DOMAIN_NAME=wave.rainbowdevil.jp

20行目 Waveサーバを立てるIPアドレスとポート番号を設定します。
別のマシンからアクセスする場合、HOSTNAMEを0.0.0.0に設定しすべてのIPアドレスに対しLISTENにする必要があります。
WAVE_SERVER_HOSTNAME=localhost
WAVE_SERVER_PORT=9876

30行目 秘密のパスワードを設定します。これはOpenfireの設定でShared secretに指定したパスワードと同じパスワードを指定します。
XMPP_SERVER_SECRET=opensesame

31行目 先ほど作成した鍵を指定します。鍵の作成に使用したドメイン名と、WAVE_SERVER_DOMAIN_NAMEに指定したドメイン名が同じであれば変更する必要はありません。
PRIVATE_KEY_FILENAME=${WAVE_SERVER_DOMAIN_NAME}.key

37行目 先ほど作成した証明書を指定します。証明書の作成に使用したドメイン名と、WAVE_SERVER_DOMAIN_NAMEに指定したドメイン名が同じであれば変更する必要はありません。
CERTIFICATE_FILENAME_LIST=${WAVE_SERVER_DOMAIN_NAME}.crt

以上で完了です。

ドメイン名とIPアドレスを対応づける

FedOneのデフォルトの設定では、XMPPサーバ(Openfire)はWAVE_SERVER_DOMAIN_NAMEで指定したサーバに接続しようとします。
wave.rainbowdevil.jpでローカルホストに接続できるよう、/etc/hosts に設定を追加します。

127.0.0.1       wave.rainbowdevil.jp

サーバを起動する

次のコマンドを実行し、サーバを起動します。

$ ./run-server.sh
2010/01/28 3:03:42 org.waveprotocol.wave.examples.fedone.waveserver.WaveServerImpl <init>
情報: Wave Server configured to host local domains: [wave.rainbowdevil.jp]
2010/01/28 3:03:42 org.waveprotocol.wave.examples.fedone.ServerMain$RpcInetSocketAddressFactory <init>
情報: Starting client frontend on host: localhost port: 9876
couldn't connect to XMPP server:org.xmpp.component.ComponentException: java.net.UnknownHostException: wave.rainbowdevil.jp
2010/01/28 3:03:52 org.waveprotocol.wave.examples.fedone.ServerMain run
情報: Starting server

起動に成功すると、上記のようなログが出力されます。

 

起動時のエラー


Unable to access jarfile dist/fedone-server-0.2.jar

コンパイルをまだしていないか、何らかの理由でコンパイルが失敗している可能性があります。コンパイルを再度行い、ログを確認してください。


Exception in thread "main" com.google.inject.ProvisionException: Guice provision errors:
1) could not read private key

鍵を読み込む事が出来ません。鍵の作成が完了しているか、また設定ファイルの鍵の設定が正しくファイルを指し示しているか確認してください。


致命的: Failed to add our own signer info to the certificate store
org.waveprotocol.wave.crypto.SignatureException: Certificate validation failure

openfireで入力したパスワードと、run-config.shに設定したパスワードが一致しているか確認してください。


 

テストクライアントでの接続

では次に今建てたFedOneサーバに接続してみましょう。

$ ./run-client-console.sh test1

上記コマンドで、test1@wave.rainbowdevil.jpとしてログインする事が出来ます。
ただ、Waveはまだ作成していないので画面は真っ暗です。

 

次に、Waveを作成してみましょう。/new コマンドでWaveを作成する事が出来ます。
画面はすごく地味ですが、Waveを作成する事が出来ました!

では作成したWaveを、/open 0 コマンドで開きましょう。0はWaveの番号を示しています。
画面はすごく(ry


 

作ったWaveに発言してみます。コマンドラインにメッセージを入力してエンターキーを押します。
おおっ!投稿できましたね。

Waveの本領はコラボレーションです。もう一つ端末を開き、FedOneにログインします。
もう一つのユーザはtest2とします。
$ ./run-client-console.sh test2

test1のユーザで、次のコマンドを実行し、Waveの参加者としてtest2を追加します。
/add test2@wave.rainbowdevil.jp

test2のユーザからもWaveが見えるようになりました。
test2のコマンドラインから/open 0を入力し、Waveを開きます。そしてメッセージを投稿します。

おおっ!test1ユーザからリアルタイムに変更が見えますね。

と言う事で自分でWaveサーバを建てる事が出来ました!

 

 


 

No TrackBacks

TrackBack URL: http://rainbowdevil.jp/mt5/mt-tb.cgi/11

Leave a comment