エンジニアですよ!

頑張れ俺くん、巨匠と呼ばれるその日まで

nginx + ngx_mruby を homebrew でインストールしたかった

結論からいうとできたんだけど、ちょっとハマった。

ちょっと、本当にちょっとだけ ngx_mruby 試してみたくて、簡単に入ればいいなーと思って、探して↓を見て喜々として試したわけだけど

ngx_mrubyがHomebrewで超簡単にインストールできるようになった - 人間とウェブの未来

既に issue を上げてる人がいたけど、今 brew install nginx-full --with-mruby-module としても一発でインストールできない。

こんな感じで。どう考えても書き込み権限あるディレクトリに書き込めなくて死ぬ。

brew install nginx-full --with-mruby-module
==> Installing nginx-full from homebrew/nginx
==> Downloading https://nginx.org/download/nginx-1.12.1.tar.gz
######################################################################## 100.0%
==> git init
Last 15 lines from /Users/xxx/Library/Logs/Homebrew/nginx-full/01.git:
2017-08-13 15:21:22 +0900
git
init
error: could not lock config file /usr/local/Cellar/mruby-nginx-module/1.20.0/share/mruby-nginx-module/.git/config: Operation not permitted
fatal: could not set 'core.repositoryformatversion' to '0'

原因は --verbose するとわかるけど homebrew は sandbox-exec を使って sandbox 下でビルドするようになってて、それを想定していないこの formula がおかしくなってしまった様子。

homebrew の 1.0.0 が出たのが2016年9月で、1.0.0 から sandbox を使うようになったから恐らくそれからインストールできなくなってしまったんだろう。(きっと)

mruby の install スクリプトgit 管理されていることを想定されているとかコメントに書かれていたりするし homebrew のことも mruby のことも何も知らないので自分がちょっと調べて直せるってことはなさそうだったので、とりあえず今回は --no-sandbox オプションで回避した。

これでイケると思ったんだけど、まだうまくいかず。

ld でエラーが出てどうも openssl あたりのリンクがうまくいかない。

これもどうすればうまくいくのかわからなかったので、 forkしてオプションを追加してbrew edit してしまうというイケてない方法で回避した。

ちゃんと読んでないけど LIBS で -lcrypto は普通に指定されているような気がするので、これは自分の環境が悪いのかもしれないし、ちょっと今試したいだけで特に真面目にそこを調べるほど時間掛けたくはないのでとりあえず無視…

また使うことがあれば調べる。

あと今回は自宅の mac 上で使いたかったから brew で入れたかったんだけど普通に ngx_mruby 試すだけなら docker とかあるしそっち使うほうがいいだろうね。(というか mac 上でとはいえ docker でできない理由はなかった)