ビルド
このページでは、ngx_mrubyのビルドの組み立て、./configureとbuild.shのオプション、デフォルトのビルドに入るmrbgems、CIがビルドしてテストするバージョンを説明します。手順はインストールにあります。
ビルドの組み立て
Section titled “ビルドの組み立て”./configureがconfig.inとMakefile.inからconfigとMakefileをmakeがbuild_config.rbとrakeをlibmruby.aをmakeが、mrbgems_configをmrbgems_config_dynamicnginxのngx_mrubyと実行する。動的なビルドでは従って使う。読む
configureを、--add-moduleのngx_devel_kitで--enable-dynamic-moduleに--add-dynamic-moduleをconfigはmrbgems_configをnginxのngx_mrubyを組み込んだnginxか、nginxが読み込むモジュールのファイルを作る
makeが、その中にあるもの:nginxのstreamモジュールがあるときのngx_mrubyのupstreamのkeepaliveを扱うモジュール
ngx_http_mruby_module、ngx_stream_mruby_module、./configureとmakeが実行する順に示します。ngx_mrubyのソースの次の行から描きました。2026-10-19のコミットc35606b0eの行です。configure.inの53行から62行、190行から194行Makefile.inの27行から28行、87行、98行から119行config.inの48行から81行build_config.rbの81行から153行build.shの103行、107行
./configureは、config.inとMakefile.inからconfigとMakefileを書きます。--enable-dynamic-moduleを付けると、Makefileはngx_mrubyを、--add-moduleではなく--add-dynamic-moduleでnginxのconfigureに渡します。dependence/ngx_devel_kitは、いつも--add-moduleで渡します。mruby_setは、そのset_varの部分を使います。makeは、最初にmrubyをビルドします。mruby/の中で、rakeはbuild_config.rbとbuild_config.rb.lockを読みます。build_config.rbにはコアのgemとサードパーティのmrbgemsが書いてあり、build_config.rb.lockはサードパーティの各mrbgemのコミットを固定します。結果は、gemを含むライブラリのlibmruby.aと、gemが要るコンパイラとリンカのフラグを書いたlibmruby.flags.makです。makeは、このファイルを元にmrbgems_configを書きます。動的なビルドではmrbgems_config_dynamicを書きます。- 次に
makeは、nginxのソースツリーでnginxのconfigureとmakeを実行します。configはmrbgems_configを読み、libmruby.aをnginxにリンクします。動的なビルドでは、モジュールのファイルにリンクします。モジュールには、ngx_http_mruby_moduleと、ngx_mrubyがupstreamとの接続を保つためのモジュールが入ります。そのモジュールのディレクティブがmruby_upstream_keepaliveです。nginxのstreamモジュールを含むビルドでは、ngx_stream_mruby_moduleも入ります。 build.shは、自分でダウンロードしたnginxのソースで./configureを実行し、続いて、makeを実行します。
configureのオプション
Section titled “configureのオプション”| オプション | 設定するもの | デフォルト |
|---|---|---|
--with-ngx-src-root=DIR |
nginxのソースツリー | 無し。configureは、指定が無いと止まる |
--with-ngx-config-opt=OPT |
makeがnginxのconfigureに渡すオプション |
無し |
--enable-dynamic-module |
動的モジュールとしてビルドする | 静的なモジュール |
--with-build-dir=DIR |
make clobberが消すビルドのディレクトリ。build.shはbuildかbuild_dynamicを渡し、そこにnginxのソースを置いておく |
build |
--with-openssl-src=DIR |
nginxが一緒にビルドするOpenSSLのソースの場所。nginxの--with-opensslの指定にあたる |
システムのOpenSSL |
--with-openssl-opt=OPTIONS |
OpenSSLのビルドに足すオプション。nginxの--with-openssl-optにあたる |
無し |
--with-mruby-root=DIR |
ビルドするmrubyのソースツリー | このリポジトリのmruby/ |
--with-mruby-incdir=DIR |
mrubyのインクルードのディレクトリ | src、include、build/host/include。どれもmrubyのツリーの中にある |
--with-mruby-libdir=DIR |
libmruby.aを置いたディレクトリ |
build/host/lib。mrubyのツリーの中にある |
--with-ndk-root=DIR |
使うngx_devel_kitのソースツリー |
dependence/ngx_devel_kit |
ビルドの環境変数
Section titled “ビルドの環境変数”| 変数 | 読むもの | 働き |
|---|---|---|
NGINX_CONFIG_OPT_ENV |
build.sh |
nginxのconfigureのオプションの全部。デフォルトのオプションの代わりに使う。デフォルトは、プレフィックスのbuild/nginxと、--with-http_stub_status_module、--with-stream、--without-stream_access_module、--with-cc-opt=-fno-common。動的なビルドのプレフィックスはbuild_dynamic/nginx |
NGINX_SRC_ENV |
build.sh |
nginx_versionのバージョンをダウンロードする代わりに使う、nginxのソースツリー |
BUILD_DYNAMIC_MODULE |
build.sh |
値があれば、build_dynamic/に動的なモジュールをビルドする |
NUM_THREADS_ENV |
build.sh |
makeのジョブの数。デフォルトはプロセッサの数の半分 |
OPENSSL_SRC_VERSION |
build.sh |
そのバージョンのOpenSSLをダウンロードし、nginxと一緒にビルドする |
NGX_MRUBY_ALLOW_MISSING_CORE_GEMS=1 |
build_config.rb |
NGX_MRUBY_CORE_GEMSの名前のうち、ビルドするmrubyに無いものを、通知を出して読み飛ばす |
NGX_MRUBY_CFLAGS、NGX_MRUBY_LDFLAGS、NGX_MRUBY_LIBS |
build_config.rb |
mrubyのビルドに足すコンパイラのフラグ、リンカのフラグ、ライブラリ |
デフォルトのmrbgems
Section titled “デフォルトのmrbgems”デフォルトのbuild_config.rbは、NGX_MRUBY_CORE_GEMSが挙げるmrubyのコアのgemに加えて、次のmrbgemsをlibmruby.aに入れてビルドします。コアのgemの説明はコアのgemにあります。build_config.rb.lockは、サードパーティの各gemのコミットを固定します。詳しくはgemのコミットにあります。
iij/mruby-env:ENViij/mruby-digest:Digest。MD5、RMD160、SHA1のハッシュと、SHA256、SHA384、SHA512のハッシュとHMACを計算しますiij/mruby-process:Processmattn/mruby-json:JSONmattn/mruby-onig-regexp:正規表現のOnigRegexpmatsumotory/mruby-redis:Redis。Redisのサーバの応答を、ワーカーの中で1つずつ待つクライアントです。このgemのビルドは、hiredisのライブラリをタグv1.5.0でクローンし、そのコミットを確かめて静的にリンクします。また、このgemが依存するmatsumotory/mruby-pointerもクローンします。Redisを呼ぶスクリプトには、動いているRedisのサーバが要ります。matsumotory/mruby-vedis:Vedismatsumotory/mruby-userdata:クラスのUserdatamatsumotory/mruby-uname:Unamematsumotory/mruby-mutex:Mutexmatsumotory/mruby-localmemcache:Cachemonochromegane/mruby-secure-random:SecureRandommrbgems/ngx_mruby_mrblib:ngx_mrubyのクラスのうち、Rubyで書いた部分mrbgems/rack-based-api:Rackと互換のAPIのrun
チェックのsite/scripts/check-reference.mjsは、この一覧を、build_config.rbのhostのビルドにあるconf.gemの行のうち、コメントでなく条件も無い行と比べます。コメントの行には、mruby-discountやmruby-memcachedのような、デフォルトのビルドが入れないgemの名前があります。そのどれかを入れてビルドするには、その行のコメントを外し、mruby/buildを消してください。
CIがビルドしてテストするバージョン
Section titled “CIがビルドしてテストするバージョン”ワークフローの.github/workflows/test.ymlは、すべてのプルリクエストで、次の組み合わせごとにngx_mrubyをビルドし、test.shを実行します。
| nginx | モジュール | OpenSSL | nginxを動かす環境 |
|---|---|---|---|
| 1.31.8, 1.30.6, 1.28.3, 1.26.3 | 静的と動的 | インストールした1.1.1wと、--with-openssl-srcでnginxに組み込んだ1.1.1w |
valgrind |
| 1.31.8 | 静的 | システムにインストールした1.1.1w | AddressSanitizerとUndefinedBehaviorSanitizer |
- ランナーは、GCC 11のUbuntu 22.04です。同梱のmrubyは4.0.0です。バージョンは
build_config.rb.lockにあります。 nginx_versionはbuild.shとtest.shがダウンロードするバージョン1.31.8を指定します。