はちゅにっき

こっちのブログはまったり更新

新年早々 nginx_tcp_proxy_module を組み込んだ deb パッケージを作ってみる

昨年は本当に細々と更新してきましたが、今年も細々と更新していきたいと思います。本年もよろしくお願いいたします。
ということで、さっそく本題。

新年早々 WebSocket で遊んでみたいなぁと思ったので、nginx で WebSocket を Proxy する場合に有名という、nginx_tcp_proxy_module を組み込んで Debian/Wheezy にインストールすることに。
nginx のソースコード持ってきてコンパイルすればいいんだけど、dpkg でパッケージ管理をしたいこともあり deb パッケージを作成することにしました。

nginx_tcp_proxy_module をダウンロード

以下の配布ページよりダウンロード

nginx_tcp_proxy_module
http://yaoweibin.github.com/nginx_tcp_proxy_module/

せずに、なんとなく上記ページにも記載のある github からもってきました。

yaoweibin / nginx_tcp_proxy_module
https://github.com/yaoweibin/nginx_tcp_proxy_module
# git clone https://github.com/yaoweibin/nginx_tcp_proxy_module.git
# rm -rf nginx_tcp_proxy_module/.git*

普通にダウンロードすればいい気がしますね。

nginx のソースコードをダウンロードする

aptitude で source を入手する方法が分からなかったので *1 昔ながらの apt-get を使ってソースコードを入手しました。

# apt-get source nginx

Build ルールを編集する

展開された nginx のソースコードディレクトリに、configure する際のルールが記載されたファイルがあるため、これを編集して nginx_tcp_proxy_module が組み込まれるようにします。

--- rules       2013-01-01 17:51:47.218259979 +0900
+++ nginx-1.2.1/debian/rules    2013-01-01 18:04:33.386259773 +0900
@@ -88,6 +88,7 @@
            --add-module=$(MODULESDIR)/nginx-echo \
            --add-module=$(MODULESDIR)/nginx-upstream-fair \
            --add-module=$(MODULESDIR)/nginx-dav-ext-module \
+           --add-module=$(MODULESDIR)/nginx_tcp_proxy_module \
             $(CONFIGURE_OPTS) >$@
        touch $@
 
@@ -119,6 +120,7 @@
            --without-http_userid_module \
            --without-http_uwsgi_module \
            --add-module=$(MODULESDIR)/nginx-echo \
+           --add-module=$(MODULESDIR)/nginx_tcp_proxy_module \
             $(CONFIGURE_OPTS) >$@
        touch $@
 
@@ -168,6 +170,7 @@
            --add-module=$(MODULESDIR)/nginx-upload-progress \
            --add-module=$(MODULESDIR)/nginx-upstream-fair \
            --add-module=$(MODULESDIR)/nginx-dav-ext-module \
+           --add-module=$(MODULESDIR)/nginx_tcp_proxy_module \
             $(CONFIGURE_OPTS) >$@
        touch $@
 
@@ -196,6 +199,7 @@
            --add-module=$(MODULESDIR)/nginx-upstream-fair \
            --add-module=$(MODULESDIR)/nginx-cache-purge \
            --add-module=$(MODULESDIR)/naxsi/naxsi_src \
+           --add-module=$(MODULESDIR)/nginx_tcp_proxy_module \
            $(CONFIGURE_OPTS) >$@
        touch $@
 

nginx_tcp_proxy_module のソースコードを deb パッケージに配置する

nginx のソースコードのディレクトリに、nginx_tcp_proxy_module をコピーします。

# cp -R nginx_tcp_proxy_module/ nginx-1.2.1/debian/modules/ 

patch を適用する

nginx_tcp_proxy_module を有効にするにはソースコードに patch をあてる必要があるため、Build 時に適用されるよう編集します。
patch 適用には quilt を利用しましたが、patch コマンドで適用するだけでいい気がします。

# cd nginx-1.2.1
# quilt new tcp.patch
# quilt add src/core/ngx_log.c
# quilt add src/core/ngx_log.h
# quilt add src/event/ngx_event_connect.h
# patch -p1 < debian/modules/nginx_tcp_proxy_module/tcp.patch
# quilt refresh

パッケージを再生成する

dpkg-builder でパッケージを再生成します。

# cd nginx-1.2.1
# dpkg-builder -b

完成

Build が完了すると、deb パッケージがたくさん生成されるので、あとは必要に応じて deb パッケージを dpkg を使ってインストールすれば OK ですね。
ということで、次は実際に作成した nginx のパッケージで WebSocket アプリを Proxy してみたいと思います。

ひとまず無事インストール完了ということで、わーい。

*1:知ってる方教えてください。