mysql-buildやxbuildのnginx版みたいなものをGoで書いてみた。
nginx単体のビルドは大して難しいものではないんだけど、
サードパーティモジュールやzlib、PCRE、OpenSSLといった依存ライブラリを静的に組み込もうとすると色々と面倒になってくるので、そのあたりを自動化したいと思ったのが開発の動機。言語がGoなのは完全に趣味。最初は頑張ってシェルスクリプトで書こうとしたが、完成形が定まっていないプロトタイピングの段階で生産性の低いツールを使うのはしんどかったのでやめた。
インストール
nginx-buildはGoで書かれているのでまずはGoが必要。Goがインストールされていれば以下のコマンドでインストールは完了する。
$ go get -u github.com/cubicdaiya/nginx-build
nginx-buildでnginxをビルドする
では早速nginx-buildでnginxをビルドしてみよう。
$ uname
Darwin
$ nginx-build -v 1.9.7 -d work
nginx-build: 0.6.2
Compiler: gc go1.5.2
2015/12/08 04:55:03 Download nginx-1.9.7.....
2015/12/08 04:55:05 Extract nginx-1.9.7.tar.gz.....
2015/12/08 04:55:05 Generate configure script for nginx-1.9.7.....
2015/12/08 04:55:05 Configure nginx-1.9.7.....
2015/12/08 04:55:12 Build nginx-1.9.7.....
2015/12/08 04:55:16 Complete building nginx!
nginx version: nginx/1.9.7
built by clang 7.0.0 (clang-700.1.76)
configure arguments: --with-cc-opt=-Wno-deprecated-declarations
2015/12/08 04:55:16 Enter the following command for install nginx.
$ cd work/nginx/1.9.7/nginx-1.9.7
$ sudo make install
実行経過を詳細に出力するには-verbose
オプションを使う。
nginx-build -v 1.9.7 -d work -verbose
nginx-buildでnginxのビルドオプションを指定する
nginx-build
でnginxのconfigure
に付加するオプションを変更するにはまず自前のconfigure
を実行するシェルスクリプトファイルを用意する。
myconfigure.sh
#!/bin/sh
./configure \
--with-http_gunzip_module \
-c
でこのファイルを指定して再度実行する。
nginx-build -v 1.9.7 -d work -c myconfigure.sh
nginx-build: 0.6.2
Compiler: gc go1.5.2
2015/12/08 04:57:52 Download nginx-1.9.7.....
2015/12/08 04:57:54 Extract nginx-1.9.7.tar.gz.....
2015/12/08 04:57:54 Generate configure script for nginx-1.9.7.....
2015/12/08 04:57:54 Configure nginx-1.9.7.....
2015/12/08 04:58:01 Build nginx-1.9.7.....
2015/12/08 04:58:05 Complete building nginx!
nginx version: nginx/1.9.7
built by clang 7.0.0 (clang-700.1.76)
configure arguments: --with-http_gunzip_module
2015/12/08 04:58:05 Enter the following command for install nginx.
$ cd work/nginx/1.9.7/nginx-1.9.7
$ sudo make install
ゆくゆくはこれをベースにnginxenvとか作れるといいのかもしれない。