コンテンツにスキップ

ビルド

このページでは、ngx_mrubyのビルドの組み立て、./configureとbuild.shのオプション、デフォルトのビルドに入るmrbgems、CIがビルドしてテストするバージョンを説明します。手順はインストールにあります。

ビルドのステップを、./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を実行します。
オプション 設定するもの デフォルト
--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
変数 読むもの 働き
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のビルドに足すコンパイラのフラグ、リンカのフラグ、ライブラリ

デフォルトのbuild_config.rbは、NGX_MRUBY_CORE_GEMSが挙げるmrubyのコアのgemに加えて、次のmrbgemsをlibmruby.aに入れてビルドします。コアのgemの説明はコアのgemにあります。build_config.rb.lockは、サードパーティの各gemのコミットを固定します。詳しくはgemのコミットにあります。

チェックの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を指定します。