2010年2月22日月曜日

mod_websocket for Lighty:インストール編

前回はRev.75でのWebSocket Protocolの概要と、一般的な動作を記述させていただきました。今回は、lighttpd(lighty)用のWebSocketモジュールについて、まずは簡単なインストール方法と設定方法、そしてどのように動いているかと、その利点について記述してみますね。

# と、思ったのですが、インストール方法&設定方法が以外に長くなっちゃったので、mod_websocket for lightyの動作概要についてはまた別のエントリで…

まず、MAC OSへのインストールについては、@tnantokaさんが詳細に紹介してくださっています(ありがとうございました!)ので、そちらをご参照ください。
http://blog.bornneet.com/
http://blog.bornneet.com/Entry/271/

また、解決にあたっては、@nmiyoさん(http://blogger.tempus.org/ )に多大なご協力を頂いたことにお礼を…こんなところで申し訳ないのですが。

  • Lighttpdをソースからインストール
    mod_websocket.cを利用する場合、connections.c他に少し手を加えます。その為、portsやyum、aptなどでインストールした状態では使えません。申し訳ありませんが、ソースファイルからmakeを行ってください。
  • Lighttpdを改変せずにmake出来るかどうかを確認
    まずは、お手元の環境でlighttpdがmake出来るかどうかを確認してください。http://www.lighttpd.net/download/ から1.4系のソースコードをダウンロード、

    $ tar xzvf lighttpd-1.4.x.tar.gz

    として、ソースコードを展開、展開したディレクトリに入り、以下のコマンドを実行してみてください。

    $ ./autogen.sh

    ここでエラーが出る場合、あなたの環境にはautotoolsが入っていませんorバージョンが古いかもしれません。

    autotoolsとはソースコードのmakeやtestを楽にするツール群の総称なのですが、時々バージョン毎に大変更があったり、またちょっとしたBUG…と言って良いのかは不明ですが、今まで許されていた記法が許されなくなったりしてて、それまでのconfigure.inとかMakefile.amではconfigureが通らない場合が時々あります。ですので、autotoolsは出来るだけ最新のバージョン、かつstableなものを使うのが良いでしょう。
    また、autotoolsに含まれる、autoconf、automake、libtoolは相互に依存関係が発生しますので、autotoolsをソースからインストールされる方は、インストール順にもご注意ください。(autotoolsをソースからインストールされる方にそんな心配はいらないと思いますけれど...(^-^;

    Ubuntu上では、INSTALLの通り、以下の用にコマンドを実行します。

    $ sudo apt-get install automake-1.x
    $ sudo apt-get install libtool

    このコマンドを実行すると、automake 1.x、及び依存するツール群が自動的にインストールされます。ただし、Ubuntuだと、何故かlibtoolだけはインストールされない(まぁ、automakeには依存してないけれども…)ので、別途インストールしてあげる必要があります。

    なお、他のOSをお使いの方は、以下のコマンドを含むパッケージをインストールしてみるとよろしいかと思います。

    $ autoheader
    $ autoconf
    $ automake
    $ libtoolize

    さて、ここまでが終わると、次はlighttpdをインストールするために必要なライブラリの入手です。
    1. pcre lib( http://www.pcre.org/ )
      自身のconfigファイルのparseに用いています。パッケージもしくはソースからライブラリをmakeし、インストールしておきましょう。
    2. 圧縮アルゴリズムライブラリ
      configure時に、option指定することによって回避は出来るのですが、zip/bzip2など圧縮アルゴリズムライブラリは入れておいても損は無いので入れておきましょう。
    3. openssl
      SSLを利用する際には必須となるライブラリです。INSTALLに記載し忘れていますが、$ssh-keygenコマンドなども叩かないといけないので、通常のopensslパッケージも必要となります。(記載しておこう…(^ー^;)

      以上があれば、lighttpdのconfigure/makeは出来るようになっているはずです。確かめてみましょう。

      $ ./autogen.sh
      $ ./configure --with-your-options
      $ make

      ここで、--with-your-optionsを指定することによって、あなたが利用したいオプションの取捨選択、またインストール先などを決定することが出来ます。詳しい使い方は、

      $ ./configure --help

      これで一覧が出てきますので、確認してから指定してみると良いでしょう。さぁ、これでlighttpdがmake出来るようになりました。次は、いよいよmod_websocketのmakeです。
  • mod_websocketのmake
    まずはpatch当てとなります。mod_websocketをgithubから取得してください。

    $ git clone git://github.com/nori0428/mod_websocket.git

    ここで取得した、src/mod_websocket.patchを先にダウンロード、展開したlighttpdに適用することになります。
    ここは、INSTALLの手順どおり、lighttpdを展開したディレクトリに移動しpatchを当ててください。

    $ cd lighttpd-1.4.x
    $ patch -p1 < mod_websocket.patch

    なお、patchコマンドで何をしているのか、については、$man patchを参照してくださいね:)

    さて、最後に再度lighttpdのmakeとなります。INSTALLに記された手順どおりに、mod_websocket.cをコピーします。

    $ cd lighttpd-1.4.x
    $ cp /path_to/mod_websocket.c src/

    その後、もう一度、autogen.shを実行してください。

    $ ./autogen.sh

    なおこれは、src/Makefile.amにpatchを当てたため、もう一度automakeコマンドを実行する必要があるためです。
    autogen.shが正常に終わったら、configure, makeとなります。

    $ ./configure --with-your-options
    $ make

    さて、どうでしたでしょうか?configure, makeが正常に終了し、lighttpd-1.4.x/src/.libs/の配下にmod_websocket.soが出来ていれば成功です。
    出来ていない場合、もしくはconfigureなどでエラーが出ている場合は、今までの手順をもう一度見直してください。
    それでも駄目な場合は、ここのコメント欄や私宛のメールでお気軽にご相談ください
  • 起動方法について
    lighttpdソースを解凍した場合、lighttpd-1.4.x/docの下に、lighttpd.confと言うファイルがあるかと思います。これが、lighttpdを起動する際に必要となる設定ファイルとなります。
    なお、詳しい設定方法については、WEB上に多くの方が公開してくださっていますので、

    http://www.kozupon.com/lighttpd/

    書き換えるポイントだけ少し。

  • server.modules
    lighttpdで利用するモジュールを指定します。つまり、mod_websocketを利用する際は、ここに追記が必要です。
  • server.document-root
    lighttpdがhtmlファイルを公開するディレクトリです。通常だと'/var/www/htdocs'とかでしょうか。なお、このディレクトリはlighttpdを起動するユーザ(例えばnobody)に対して読み取り/実行権限が無いといけません。
  • server.errorlog
    lighttpdがエラーログを記録するファイルです。このファイルはlighttpdを起動するユーザ(例えばnobody)に対して書き込み権限が無いといけません。
  • accesslog.filename
    lighttpdがアクセスログを記録するファイルです。このファイルはlighttpdを起動するユーザ(例えばnobody)に対して書き込み権限が無いといけません。
  • server.port
    lighttpdが起動するポート番号です。コメントアウトされていると80番を利用します。
  • websocket.server = (
    "/chat" => ( "host" => "127.0.0.1" , "port" => 9001 )
    )
    パス'/chat'を、websocketリソースとして規定します。

    http://lighttpd_addr:lighttpd_port/chat へアクセスされた場合、WebSocket handshake等を行ったのち、host:portへパケットを転送します。hostはIPアドレスもしくはFQDNを表す文字列です。ローカルループバック以外も使えます。portはbackendのサーバが待ち受けるport番号を表す数値です。stringだと思って””で囲むと寂しいことになりますのでご注意を。

    注意
    現状、allowed origin/sub-protocolが扱えないのですが、扱えるようになった場合、websocket.serverの記法が変わります。(確実に変わります)
以上、無事にWebSocketがご利用できる環境がセットアップできる事を祈ります。ではでは。

0 件のコメント:

コメントを投稿