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

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

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

2011/04/10 21:09 by uzenakost
PyGoWaveをどうしても自分のものにしたくって、こちらにたどり着きました。。。
Ubuntuへのrabbitmq-stomp設定がうまくできずに困っています。。。
コマンドに
./scripts/rabbitmq-activate-plugins
とありますが、このスクリプトはどこから手に入れるのでしょう・・・?
2011/04/16 02:35 by makoto
こんにちは。今試しにビルドしてみたところ、rabbitmq-activate-pluginsというスクリプトは生成されないようですね。
rabbitmqのプラグイン開発ページを見たところ、単にpluginsディレクトリを掘ってそこにおけばいいという記述になっています。いくつかのプラグインのREADMEにはrabbitmq-activate-pluginsの記述が残っていますが、おそらくおけば認識されるようになったのでしょう(最後までは試していませんが)。
None

Prev Entry

Next Entry