waveの招待がどうとか微妙な盛り上がりを見せている Google Wave ですが、数ヶ月前に クローンというかアレげなやつ が出ていたのを思い出して入れてみました。
VirtualBox上のubuntu9.04に入れたのですが、ちょいと癖があったのと日本語のインストール記述が見当たらなかったのでログを残してみます。
正しく入れられた自信はありませんが、Registerしてログインして複数人でWaveできるところまではできました。
ちなみに本物のGoogle Wave、私は mtsuyukiあっとgooglewave.com です。今のところInvitationもいくつか余ってたりします。
以下、インストールに関する記述。
PyGoWaveのインストールログと前提
実施日 2009/10/18
インストールに使ったOS ubuntu 9.04(日本語 Remix CD)
私はzshを使っています。
VirtualBox上のubuntuにはvboxという名前でアクセスできるようにした。OSXの/etc/hostsとubuntuの/etc/hostsに以下のエントリを追加した(ipはネットワークをブリッジした後に/sbin/ifconfigで確認ね)
/etc/hosts
xxx.xxx.xxx.xxx vbox #mac側
127.0.0.1 vbox #ubuntu側
ubuntuは2009/10/18の時点の最新に更新してある。また、OSXから参照できるようにVirtualBoxの仮想イメージ設定でネットワークをブリッジに変更してある。
基本的には ここ(PyGoWaveServerInstallation) を見ればいいんですが、いくつかはまりどころがあったりします。
まずは必要なものをバッツリ入れましょう。
どーんと入れる。なんどかMySQLのrootユーザパスワードを要求されるけど、ローカル専用なので何も入れずにエンター!でごまかした。もちろん入れてもいいけど、その場合は覚えておいてね。
$ sudo apt-get --quiet --quiet install mysql-server apache2 libapache2-mod-python libapache2-mod-proxy-html python-setuptools python-mysqldb python-twisted python-lxml python-imaging python-simplejson erlang subversion mercurial git-core
rabbitmq関連のインストール
rabbitmqのumbrellaを使ってがつんと取得
apt-getとかで入れるとどうしてよいのかよくわからなくなってしまうので、rabbitmq-public-umbrellaを使っていれる。
$ mkdir ~/tmp
$ cd ~/tmp
$ hg clone http://hg.rabbitmq.com/rabbitmq-public-umbrella
$ cd rabbitmq-public-umbrella
$ make co
$ make
rabbitmqの設定ファイルをごにょごにょする
rabbitmqの設定ファイルを作る
$ sudo mkdir /etc/rabbitmq
$ sudo touch /etc/rabbitmq/rabbitmq.conf
/etc/rabbitmq/rabbitmq.confを編集する。正直何が書かれてるのかわからんぜ。
/etc/rabbitmq/rabbitmq.conf
NODENAME=rabbit
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672
LOG_BASE=/var/log/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia
SERVER_START_ARGS='
-rabbit
stomp_listeners [{"0.0.0.0",61613}]
extra_startup_steps [{"STOMP-listeners",rabbit_stomp,kickstart,[]}]'
rabbitmq-stompプラグインを有効にする
プラグインディレクトリを用意して、rabbitmq-stompプラグインを配置後、pluginを更新する
$ cd ~/tmp/rabbitmq-public-umbrella/rabbitmq-server
$ mkdir plugins
$ ln -s ~/tmp/rabbitmq-public-umbrella/rabbitmq-stomp ~/tmp/rabbitmq-public-umbrella/rabbitmq-server/plugins
$ sudo ./scripts/rabbitmq-activate-plugins
$ sudo ./scripts/rabbitmq-server start
broker runningの次の行に starting STOMP Adapter (binding to [{"127.0.0.1",61613}]) ...done とか出てれば成功。
rabbitmqの設定をする
ユーザ作ったり権限設定したりしているようです。よくわかりません。 RANDOMって所はすきな文字列にしてください
$ cd ~/tmp/rabbitmq-public-umbrella/rabbitmq-server
$ sudo ./scripts/rabbitmqctl change_password guest RANDOM
$ sudo ./scripts/rabbitmqctl add_user pygowave_client pygowave_client
$ sudo ./scripts/rabbitmqctl add_user pygowave_server pygowave_server
$ sudo ./scripts/rabbitmqctl set_permissions pygowave_client '^[^.]+\.[^.]+\.waveop$|^wavelet.direct$' '^[^.]+\.[^.]+\.(waveop|clientop)$|^wavelet.topic$' '^[^.]+\.[^.]+\.(clientop|waveop)$|^wavelet.direct$'
$ sudo ./scripts/rabbitmqctl set_permissions pygowave_server '^[^.]+\.[^.]+\.waveop$|^wavelet_rpc_singlethread$|^wavelet\.(topic|direct)$' '^[^.]+\.[^.]+\.waveop$|^wavelet_rpc_singlethread$|^wavelet\.direct$' '^[^.]+\.[^.]+\.waveop$|^wavelet_rpc_singlethread$|^wavelet\.(topic|direct)$'
orbitedのインストールと設定
指示通りにやった。やってやった。
$ sudo easy_install orbited
$ sudo chown www-data /var/orbited
$ sudo touch /etc/orbited.cfg
/etc/orbited.cfgを編集する
[global]
reactor=epoll
pid.location=/var/run/orbited.pid
user=www-data
group=www-data
proxy.enabled=1
[listen]
http://localhost:9000
[access]
* -> localhost:61613
[logging]
debug=SCREEN,/var/orbited/debug.log
info=SCREEN,/var/orbited/info.log
access=SCREEN,/var/orbited/info.log
warn=SCREEN,/var/orbited/error.log
error=SCREEN,/var/orbited/error.log
enabled.default=info,access,warn,error
[loggers]
Daemon=info,access,warn,error
TCPConnection=info,access,warn,error
orbitedを起動する
$ sudo orbited
いよいよPyGoWaveを入れる
そろそろ面倒なので権限とか完全にローカル用です。ディレクトリ名とか変えない方が身のためです。
$ sudo mkdir -p /srv/http/pygowave_project
$ cd /srv/http/pygowave_project
$ sudo git init
$ sudo git pull git://github.com/p2k/pygowave.git refs/tags/v0.3
settings.pyをいじると幸せな気がして変更しました。
時間とか地域とかOrbitedの動作サーバ名を変更します。
diff --git a/settings.py b/settings.py
index 9b82257..50db36d 100644
--- a/settings.py
+++ b/settings.py
@@ -38,7 +38,7 @@ DATABASE_PORT = '' # Set to empty string for default. Not used with
DEFAULT_FROM_EMAIL = 'noreply@localhost'
# The domain used in wave URLs
-WAVE_DOMAIN = 'localhost'
+WAVE_DOMAIN = 'vbox'
LOGIN_URL = '/pygowave/accounts/login/'
LOGIN_REDIRECT_URL = '/pygowave/home/'
@@ -51,11 +51,11 @@ IS_LOCAL = True
# although not all choices may be available on all operating systems.
# If running in a Windows environment this must be set to the same as your
# system time zone.
-TIME_ZONE = 'Europe/Berlin'
+TIME_ZONE = 'Japan'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = 'ja'
LANGUAGES = (
('de', 'German - Deutsch'),
@@ -163,5 +163,6 @@ AMQP_PASSWORD = "pygowave_server"
AMQP_VHOST = "/"
# Orbited settings here
-ORBITED_SERVER = "p2k-i9400-arch"
-ORBITED_PORT = 80
+ORBITED_SERVER = "vbox"
+ORBITED_PORT =80
mysqlにpygowaveユーザと権限を作る
/etc/mysql/my.cnfを編集してmysqlの文字コードを変更する
[mysqld]セクションに追加
default-character-set=utf8
character_set_server=utf8
[mysql]セクションに追加
default-character-set=utf8
いったん再起動
$ sudo /etc/init.d/mysql restart
ユーザや権限やデータベースを作る
$ mysql -u root
mysql > CREATE DATABASE `pygowave`;
mysql > CREATE USER 'pygowave'@'localhost' IDENTIFIED BY 'pygowave';
mysql > GRANT ALL PRIVILEGES ON `pygowave`.* TO 'pygowave'@'localhost' WITH GRANT OPTION;
mysql > exit;
PyGoWaveのテーブルを作ったりします。
まぁ、いつも通りですね!ついでにいくつか権限も変えておきます。
$ python manage.py syncdb
$ sudo chown www-data ./media/* ./pygowave_client/cache locale pygowave_client/locale
carrotのバージョンによる問題を回避
PyGoWaveのサーバを起動する
$ sudo ./launch-pygowave-rpc
※ carrotの特定のバージョン以外ではエラーが出るようです。ImportError: cannot import name DefaultBackendとか出るまでやらなくてもよいです。
エラーが出たら、amqp_rpc_server.pyを少しいじります。緊急回避です。触っちゃいけないことになったものを触ったりとかとか、いろいろ。
diff --git a/amqp_rpc_server.py b/amqp_rpc_server.py
index 78d20e2..da70bbd 100644
--- a/amqp_rpc_server.py
+++ b/amqp_rpc_server.py
@@ -21,7 +21,7 @@ import logging.handlers
from carrot.connection import DjangoAMQPConnection
from carrot.messaging import Consumer, Publisher
-from carrot.backends import DefaultBackend
+from carrot.backends import DEFAULT_BACKEND as DefaultBackend
from django.core.exceptions import ObjectDoesNotExist
from pygowave_server.models import Participant, ParticipantConn, Gadget, GadgetElement, Delta
@@ -150,7 +150,7 @@ class PyGoWaveMessageProcessor(object):
self.publisher.send(message_data, routing_key=routing_key, delivery_mode=1)
def receive(self, message_data, message):
- rkey = message.amqp_message.routing_key
+ rkey = message._amqp_message.routing_key
participant_conn_key, wavelet_id, message_category = rkey.split(".")
if message_category != "clientop":
@@ -327,7 +327,8 @@ class PyGoWaveMessageProcessor(object):
# Re-open the channel if it was closed (this is a pyamqlib issue)
if self.publisher.backend.channel.connection == None:
- self.publisher.backend.channel = self.publisher.backend.connection.connection.channel()
+ #self.publisher.backend.channel = self.publisher.backend.connection.connection.channel()
+ self.publisher.backend.channe()
return qex
apache2の設定を書く
/etc/apache2/sites-enabled/000-defaultを修正します。
</VirtualHost>の直情に書く
<Location /pygowave>
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonOption django.root /pygowave
PythonDebug On
PythonInterpreter pygowave_django
PythonPath "['/srv/http/pygowave_project'] + sys.path"
</Location>
Alias /pygowave/media /srv/http/pygowave_project/media
<Location "/pygowave/media">
SetHandler None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Location>
<Location "/static">
SetHandler None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Location>
<Location "/tcp">
SetHandler None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Location>
ProxyRequests Off
ProxyPass /static http://localhost:9000/static
ProxyPass /tcp http://localhost:9000/tcp
md5じゃなくってhashlib使えっていわれたら、これまた緊急回避します。/usr/lib/python2.6/dist-packages/mod_python/importer.py
- import md5
+ from hashlib import md5
mod_proxyを有効にしてapacheを再起動する
まず、LoadModuleを追加します。/etc/apache2/mods-enabled/proxy_html.load
LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
へー
$ sudo a2enmod proxy
$ sudo /etc/init.d/apache2 restart
メール送信できるようにする
VirtualBoxからgmailを使ってメールを送ろうとしたらおこられた、面倒なのでdjblackholeを使う。間違っても表におかないように。
$ cd /srv/http
$ sudo svn co http://svn.coderepos.org/share/lang/python/djblackhole
$ cd djblackhole
$ sudo python manage.py syncdb
$ sudo python manage.py blackholesmtpd &
$ sudo python manage.py runserver 0.0.0.0:8000
アカウントを作ってログインしてWaveしてみる
http://vbox/pygowave/ にアクセスして、 Register? というリンクからユーザを作ってみる。
メールはどんなアドレスを入れていようとも http://vbox:8000/admin/maillog/loggedmail/ で見られる(djblackholeね)。
アクティベーションのリンクをブラウザでがつんと開けば、ログインしてWaveできちゃう。アクティベーションリンクのドメインがexample.comになっちゃってるのを直したい人は拙著を買ってくれていいですよ><
と、新しいWaveを作っても何も起きない?DebugとLeave Waveの下にチャットウィンドウが表示されない場合にはもう一度おまじない(zsh使おうぜ)。
$ sudo chown www-data /srv/http/pygowave_project/pygowave_client/cache/**
ほかにもいろいろやってるとエラー出たりするかもしれないけど知りません。
ユーザつくってOSXとubuntuで非同期チャットができちゃう!…ircの代わりにするにはごっついな。