LoginSignup
10
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-03

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するなりなんなりと。

10
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8