UbuntuにGoogle Waveを入れてみた

Google Waveってインストールできるんだ?!ここでインストールされるのはwave-protocolというGoogle Waveのドラフト仕様的なものの実装らしい。そして、簡単なクライアントサーバのサンプルがついている。最終的には、2つコンソールをあげてチャット見たいなことが出来るようになる。

id:technohippyさんの日記にMacOSXようのインストール記事があったのでそれを参考にしています。
もろにゲリラ豪雨食らった - ずっと君のターン
あと、本家のインストール手順。
Google Code Archive - Long-term storage for Google Code Project Hosting.
私の場合、UbuntuにインストールするのでMacOSXの場合よりも多少簡単だった気がします。

いるもの

OpenfireっていうXMPPサーバがあって、その拡張としてwave-protocolをインストールするような感じ。XMPPというプロトコルXMLベースのメッセージ交換プロトロルっていうところなのかな、メッセージをプッシュするのに向いているらしいので、Google Waveのようなリアルタイムな共同作業を行うアプリにうってつけってことだったんだろうね。
XMPPはクラウドサービスの将来像か?

JRE6のインストール

OpenJDK入ってるからいらないや、と思ってたんだけど、Openfire入れるときにsun-java6-jreがいるよって怒られたので仕方なくインストール。

sudo apt-get install sun-java6-jre

Openfireのインストール1

以下の場所から、Ubuntu用のパッケージ「openfire_3.6.4_all.deb」をダウンロードして、ダブルクリックでインストール。簡単。
http://www.igniterealtime.org/downloads/index.jsp

インストール出来たら既に起動までしてるみたい。ここで一回再起動しておくらしい。

sudo /etc/init.d/openfire restart

Openfireのセットアップ

ここからは、ブラウザからアクセスしてOpenfireの初期設定をすることになる。以下のURLへアクセス。
http://localhost:9090
1.言語を選択。残念ながら日本語はない。

2.ドメインかIPを選択。らしんだけど、ドメインとかないので、とりあえずホスト名を入れておく。私の場合は「ari」

3.データベースを選択。ここでは、Embeddedを選択しておく

外部のDBを使う場合は、「Standard Database Connection」を選ぶと次の画面で外部のDBに接続するための設定がある。

4.Defaultを選択

5.Administratorのアカウント追加画面らしけど、この設定は適当でよいのかな。このあとどこでも使わなかったよ。

6.お、完了。

さて、ここで、Login to the admin consoleをクリックしたい所だけど一旦再起動

sudo /etc/init.d/openfire restart

そしてまた、http://localhost:9090にアクセス
ログイン画面が現れるのでユーザ名とパスワードを入れてログイン。ユーザ名は上で登録したメールアドレスではないとのことなので注意。

  • ユーザ名:admin
  • パスワード:admin

ここからまた、設定を行っていく

1.Server>Server Settings>External Componentと選択。Enabledにチェックを入れ、Default shared secretに「himitu」と入れて(これは、なんでもいいんだと思う。)「Save Settings」を押して保存。

2.すると、下の方に「Allowed to Connect」という部分が現れるので、Subdomainに「wave」、Shared secretに上で入力した文字「himitu」を入力。「Add component」を押して追加。これで、Openfireからwave-protocolを利用するための設定ができた。

3. 次にセキュリティの設定を行う。
Server>Server Settings>Security Settingsを選択。
Server Connection Securityの「Custom」を選択し、Server Dialback:が「Available」になっているのを確認、「Accept self-signed」にチェックを入れる。(これはあとで、自己証明書を使うための設定だと思う。)

4.Server>Server Settings>Registration Settingsを選択。すべて、Disabledにしておく。

5.Server>Server Settings>Compression Settingsを選択。Server Compression PolicyのAvailableにチェック。Server-Server間の通信を圧縮するようにするのかな。

6.Server>Server Settings>File Transfer Proxy Settingsを選択。Disabledにしておく。

ここまでで、Openfireの初期設定は完了。次は、自己証明書を作成するんだけど、以下のWikiに簡単に証明書を作るためのスクリプトがあるのでそれを利用する。
Google Code Archive - Long-term storage for Google Code Project Hosting.

自己証明書のインストール

まず、上のWikiにあるスクリプトをコピーして「make-cert.sh」ファイルを作成

#!/bin/bash                                                                       

NAME=$1

if [ "$NAME" == '' ]
then
  echo "$0 <certificate name>" 1>&2
  exit 1
fi
openssl genrsa 1024 | openssl pkcs8 -topk8 -nocrypt -out $NAME.key
openssl req -new -x509 -nodes -sha1 -days 365 -key $NAME.key -out $NAME.cert

実行権限をつけて、

chmod +x make-cert.sh

以下のように実行する

./make-cert.sh test
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]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ari
Organizational Unit Name (eg, section) []:Sys
Common Name (eg, YOUR name) []:ari
Email Address []:

Common Nameは「ari」(ホスト名)としておく。これは初期設定のDomainの所で入力したものと一緒にしとかないといけないみたい。
するとtest.keyとtest.certという2つのファイルが作成される。
証明書の内容を確認

openssl x509 -text -in test.cert 

証明書とキーが一致するか確認。出力された文字列が同じだとOKってことかなー。

openssl x509 -modulus -in test.cert -noout
openssl rsa -in test.key -modulus -noout

確認できたら、自己証明書は完成。

wave-protocolをインストール

ようやく、waveにきた。こいつは、mercurialを使ってチェックアウトしてきてから、Antでコンパイルする必要があるっぽい。mercurialとAntをインストールしておく。

sudo apt-get install mercurial
sudo apt-get install ant

ソースをチェックアウト

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

すると、wave-protocolってディレクトリが出来ているはず。ここにソースコードが入ってる。
先ほど作成した「test.key」と「test.cert」を移動しておく。例えば以下のような感じ。

mv test.* ./wave-protocol

次に、run-server.shの設定を変更。(変更部分のみ抜粋)

#echo "You need to edit the run-server.sh script" ; exit 0

#PRIVATE_KEY_FILENAME=your_private_keyfile.key
#CERTIFICATE_FILENAME_LIST=certificate_file.cert
#CERTIFICATE_DOMAIN_NAME=yourdomainnamehere

PRIVATE_KEY_FILENAME=test.key
CERTIFICATE_FILENAME_LIST=test.cert
CERTIFICATE_DOMAIN_NAME=ari

ここでは、作成した証明書、秘密鍵、初期設定で指定したDomain名を設定する。
そして、Antでコンパイル

ant dist
・・・略
BUILD SUCCESSFUL
Total time: 1 minute 9 seconds

BUILD SUCCESSFULと出たらビルドせいこー。
以下の様にしてサーバを起動しておく。

./run-server.sh

クライアントを動かしてみる

もろにゲリラ豪雨食らった - ずっと君のターン
id:technohippyさんの所にあるようにCUIのサンプルプログラムを動かしてみる。
wave-protocolディレクトリ内に「run-client.sh」ファイルがあるのでこれを以下のように修正

#echo "You need to edit the run-client.sh script" ; exit 0

# Use the same flag for the domain name as CERTIFICATE_DOMAIN_NAME in
# run-server.sh.
#WAVE_SERVER_DOMAIN_NAME=yourdomainnamehere
WAVE_SERVER_HOSTNAME=127.0.0.1
WAVE_SERVER_PORT=9876

WAVE_SERVER_DOMAIN_NAME=ari

ここで、Domain名を同様に「ari」に変更しておく。これで設定は完了。
端末を2つあげておき、一方で

./run-client.sh admin

もう一方で、

./run-client.sh hironemu

としてクライアントを起動する。
そして、id:technohippyさんの例と同じようにadminの方の端末で以下のように入力。

admin@ari> /new
admin@ari> /open 0
admin@ari> hello
admin@ari> world
admin@ari> isn't this nice?
admin@ari> /add hironemu@ari

と入力すると、hironemuで起動したクライアントの方にもメッセージが送信されている。って、感じ。
で、これが何なのかっていうと、何なんだろうね。それはこれから調べるんだよ。できたよ、id:stokiwaくん。あとはよろしく。

いかん、やりすぎた。同じようにインストール手順書くだけでこんなに大変だとは(_ _)zzz