うちのOSXでGoogle Waveが動いた

http://code.google.com/p/wave-protocol/

Waveサーバの参照実装が先月末に公開されてて、気になってたので試してみたらすごく簡単だった。Google Codeの資料がとても親切。正直それ以上特に付け加えることもないんだけど、一応自分の作業ログとしてやったことをメモっとく。

Java6インストール

http://developer.apple.com/java/download/

もしかしたらJava5でもいけるのかも知れないけど、とにかくGoogle Codeにそう書いてあったのでインストール。ただ、リンクをクリックしたらログイン画面に飛ばされたので、もしかしたらMacでJava6はApple Developer Connection(ADC)の登録必須なのかも。もしそうならADC未登録の人は諦めてJava5で試すか、Java6の正式版が出るまで待つか、1万円払ってADCに登録するかの3択かな。

ログインしたら右サイドバーのDownloadsからJavaを選択して最新版をDL&インストール。

インストールが終わったら最新のJavaを使用するように.bashrcなりなんなりに環境変数を設定。

JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
PATH=$JAVA_HOME/bin:$PATH

確認

$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-223)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-92, mixed mode)

OK

Openfire(XMPPサーバー)インストール

http://www.igniterealtime.org/downloads/index.jsp

Google Codeに上がってるWaveサーバーはOpenfireというJavaXMPPサーバーの拡張機能として実装されてる模様。なのでまずこれをインストールしないと始まらない。インストールについては上のリンクをクリックしてdmg落としたら後は指示に従うだけ。

Openfire初期設定

Openfireの設定はブラウザ上で全部できるみたい。インストールが終わったらいつの間にかOpenfireが起動してるので好きなブラウザで http://localhost:9090 にアクセス。設定画面はキャプチャしてないけど、Google Codeにあるので参考のこと。自分の設定内容はこんな感じ。ほぼ全てGoogle Codeの指定通り。

  • Language Selection
    • English
    • 言語設定。日本語がないので仕方なく英語で
  • Server Settings
    • Domain: ando-2.local
    • Admin Console Port: 9090
    • Secure Admin Console Port: 9091
    • ドメイン名とかポート番号とか。ドメイン名はMacに最初から付いてる奴。ポート番号はデフォルト
  • Database Settings
    • Embedded Database
    • データベース。テスト用なら組込みのDB使った方が設定なしなので楽だと思う
  • Profile Settings
    • Default
  • Administrator Account

で、この後Openfireを再起動するらしいんだけど、Google Codeの指示通り・・・にはできなかったので、なんかそれっぽくやろうとしたんだけど

$ sudo bash
# cd /usr/local/openfire
# chmod +x bin/openfire.sh
# bin/openfire.sh stop
# bin/openfire.sh start

SQLコネクションがどうこう言われて弾かれたので、Macごと再起動。なんかOpenfire Mac版ってファイルの権限とかオーナーとかおかしいような気が。

Wave拡張が使う自己署名証明書作成

http://code.google.com/p/wave-protocol/wiki/Certificates

これもGoogle Codeに書いてある通りやればOK。わざわざ簡単なシェルスクリプトまで書いてくれてて多謝。

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

証明書名を指定して実行。質問はCommon Name以外は全部EnterでOK。Common NameはServer Settingsで指定したDomain名にすること。

$ chmod +x make-cert.sh
$ ./make-cert.sh test
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) []:ando-2.local
Email Address []:

Wave拡張用のOpenfire設定

先の初期設定を完了すると管理画面にログインできるようになるのでまたブラウザで http://localhost:9090 にアクセス。管理画面にアクセスするときのユーザー名はメールアドレスじゃなくて「admin」に固定されてるみたいので注意。

管理画面に入ったら上の方にある「Server Settings」タブを選んで、次のように設定。(Google Code通り)

  • External Components
    • Service Enabled
      • Enabled
      • Port: 5275
      • Default shared secret: foobar

と設定して Save Settings

  • External Components
    • Allowed to Connect
      • Whitelist
      • Subdomain: wave
      • Shared secret: foobaa

と設定して Save Settings

  • Security Settings
    • Client Connection Security
      • Optional
    • Server Connection Security
      • Custom
        • Server Dialback: Available
        • TLS method: Optional
        • [checked] Accept self-signed certificates. Server dialback over TLS is now available.

と設定して Save Settings

Google Codeに寄るとこれ以外にもオススメの設定があるみたいだけど、必須じゃないようなのでとりあえず無視。

Wave拡張インストール

Google CodeのWave拡張はmercurialで取ってこないとダメだったのでそれもインストール。人によって必要なものが違うかもしれないのでまぁ参考程度に。

$ sudo port install mercurial # -> 失敗
$ sudo port install python_select
$ sudo port python_select pytyon25
$ sudo port install mercurial
$ hg clone https://wave-protocol.googlecode.com/hg/ wave-protocol # -> 失敗
$ sudo port install py25-socket-ssl
$ hg clone https://wave-protocol.googlecode.com/hg/ wave-protocol

さっき作った自己署名証明書をwave-protocolディレクトリ直下にmvした後、サーバー設定ファイルを編集。

$ mv make-cert/test.* wave-protocol/
$ cd wave-protocol
$ vim 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=ando-2.local

コンパイル&配備&実行

$ ant dist
$ run-server.sh

CUIベースのクライアントで動作確認

http://code.google.com/p/wave-protocol/wiki/ConsoleClient

クライアントスクリプトを一部修正。修正したとこだけ抜き出すと、以下。

#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_DOMAIN_NAME=ando-2.local

んで、実行。

$ run-client.sh admin

別のターミナルでもう一つ実行。

$ run-client.sh yasushi

adminのターミナルで以下のように入力。

admin@ando-2.local> /new
admin@ando-2.local> /open 0
admin@ando-2.local> hello
admin@ando-2.local> world
admin@ando-2.local> isn't this nice?
admin@ando-2.local> /add yasushi@ando-2.local

yasushiのターミナルに次の用に表示されてればOK

0) (w+HXR8VSmoyIjv) helloworldisn't this nice?hogehogef

もちろんyasushiのターミナルで入力した内容はadminにも表示される。

サーバーを起動してるターミナルにはやり取りの内容が全部表示されてるのでプロトコルの確認もできる。

まだ上に書いたようなことしてやってなくて、正直何ができるかはよく分かってない。でもとりあえずGoogle Codeの指示通りに作業を進めるとここまでほとんど引っかかるところはないというのは分かった。Google Waveの中身に興味がある人は試してみるべきではないかと。