Google Waveクローンをubuntuに入れる

2009年10月18日(日) 19:11 この記事をクリップ!

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で確認ね)

cat /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を編集する。正直何が書かれてるのかわからんぜ。

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)$'

django/django-registration/carrotのインストール

apt-getで入るDjangoは古すぎるので手で入れる。

$ sudo easy_install django
$ sudo easy_install django-registration
$ sudo easy_install carrot

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の代わりにするにはごっついな。


 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar