Edited at

ngx_mrubyをnginx-buildのビルドに組み込む

More than 3 years have passed since last update.

nginx-buildっちゅう、nginxのビルドをラップしてくれるツールがあります。

広めの想定範囲内で柔軟に対応できて、環境依存度が比較的高めのライブラリを自動で取ってくるなど、ノウハウが詰まっててよいものです。

で、導入に少しコツがいる、ngx_mrubyを組み込む場合について書いておきます。

これを書いた時点の各々のバージョンはこちら。


  • nginx-build: v0.7.1

  • ngx_mruby: v1.17.0

本記事の内容は、このリポジトリで使ってます。 https://github.com/giraffi/docker-nginx-mruby-base


余談。ngx_mruby x nginx-buildはわりと背徳の香りがする組み合わせです。理解できる方はほんの一部でしょうが。。。



nginx-buildの3rdパーティーモジュール定義

nginx-buildはiniファイルに3rdパーティモジュールを定義します。

ngx_mrubyはこんな感じに、shprov指定による前処理がほぼ必須です。


modules3rd.ini

[ngx_mruby]

form=git
url=https://github.com/matsumoto-r/ngx_mruby.git
rev=v1.17.0
shprov=/config/mruby/wrap_build.sh

ここのformがどうやらformatのことで、fromと誤認してたまにハマる。


ngx_mrubyの(フックされる)前処理

前処理の内訳例です。nginxをビルドする前にこれらが終わっていないといけません。


  • mgemの塩梅を調節

  • mrubyをビルドする

ざっくりshellにして、shprov指定の内容がこちら。元のbuild.shを参考にしています。


wrap_build.sh

#!/bin/sh

set -xe

## 自前のbuild_config.rbに差し替えたい時
/bin/cp -f /config/mruby/build_config.rb ./
./configure --with-ngx-src-root=../nginx-$NGINX_VER

make build_mruby -j 2
make generate_gems_config -j 2 # これがほんとに必要かはちゃんと調べてない。



nginx-buildが使うconfigureへの仕込み

さて、ngx_mrubyでは指定バージョンのngx_devel_kit--add-moduleする必要がある(っぽい)。

これをiniで賄うのは面倒なので、configureのオプションに加えておきます。幸いパスは固定です。


configure.sh

./configure --with-debug \

--prefix=/usr/local/nginx \
--with-pcre-jit \

... (中略)

--add-module=../ngx_mruby/dependence/ngx_devel_kit


ngx_mruby本体のadd-modulenginx-buildが自動でつけてくれます。


nginx-build!

準備ができたら、ビルドします。

$ export NGINX_VER=1.9.12

$ ./nginx-build -verbose -v $NGINX_VER -d work -pcre -zlib -m modules3rd.ini -c configure.sh --clear


(nginx-build 0.7.2以前) しばらく眺めていればおわります。今のところshprov(provideShell)はexitが0以外でも容赦なく進んでいくようなので、-verboseをつけて経過を眺めておくのが無難でした。


v0.7.3以降のnginx-buildを使えば、shprovのexit_statusが0出ない場合Failするので安心です。(コメント参照)

あとはmake installするなりなんなりと。