FreeBSD上でNginxのpkgを使う場合のメモです。応用編
nginxパッケージで対応しているモジュールを確認
nginxのportsでどのオプションが対応しているかはMakefileなどを見ればわかります
https://github.com/freebsd/freebsd-ports/tree/master/www/nginx
portsがインストールされていればmake showconfigで見れるようです
http://d.hatena.ne.jp/littlebuddha/20110524/1306224902
nginxのhttp_image_filter_moduleを使いたい場合
nginxをpkgで管理したい場合2つの選択肢が考えられます。
nginx-fullパッケージをインストール
この方法が1番楽ですが、http_image_filter_moduleを使いたいだけなのに
依存パッケージがたくさんインストールされてしまうのが個人的に嫌なので
# pkg install nginx-full
ちなみにhttp_image_filter_moduleはdynamicモジュールなので設定ファイルに下記の追記が必要です
load_module /usr/local/libexec/nginx/ngx_http_image_filter_module.so;
portsを使ってnginxをインストール
個人的にはこの方法を利用しています
依存パッケージがたくさんあるなどの理由からnginx-fullはちょっと...という場合は
portsから自分でビルドすると自分用のnginxをインストールすることができます
portsが展開されていない場合はダウンロードする必要があります
# portsnap fetch && portsnap extract
nginxのディレクトリに移動してmakeします
# cd /usr/ports/www/nginx/
# make install clean
初めてmakeする時は下記のような画面でオプションを選択できるので
HTTP_IMAGE_FILTER を[x]にしてOKして進めると
http_image_filter_module 付きのnginxがインストールされます
※依存関係にあるパッケージもportsからのインストールになるので注意
オプションのダイアログが面倒な場合は下記でOK(依存パッケージも全部ダイアログ無しになる)
# make OPTIONS_FILE_SET+=HTTP_IMAGE_FILTER BATCH=yes install clean
portsでインストールしたnginxを他ホストでも使いたい場合
カスタムしてインストールしたnginxパッケージを複数台のホストに入れる場合、
毎回portsでビルドをするのは面倒なのでビルドしたホストでpkgを作成し
ファイルからインストールさせることができます
# pkg create nginx
pkg createするとnginx-1.14.2,2.txzがカレントディレクトリに生成されるので
他ホストでpkg addするとインストールできます(指定するファイルはHTTP経由でも大丈夫)
# pkg add nginx-1.14.2,2.txz
※ファイルからのインストールはコマンドがinstallではなくaddになるので注意
これでサーバが複数台あっても楽勝です
portsに登録されていないモジュールを使いたい場合
portsのnginxに登録されてないモジュール(例えばnginx-http-concat)を使いたい場合は
portsを修正してインストールします(nginxをpkgで管理したいため)
portsの修正方法その1
力技で無理やり組み込むパターンです
gitでnginx-http-concatのソースをダウンロードし、
configureの引数を追加するためのMakefile.localを作成してmake installするだけです
http://q.hatena.ne.jp/1144785941
# cd /tmp; git clone https://github.com/alibaba/nginx-http-concat
# cd /usr/ports/www/nginx
# echo 'CONFIGURE_ARGS+=--add-module=/tmp/nginx-http-concat/' > Makefile.local
# make BATCH=yes install clean
これでhttp-concatが使えるnginxがインストールされます
portsの修正方法その2
こちらは一応スマートなやり方?です
用意されている書き方でMakefile.localを作成することで
ソースコードのダウンロードなども自動でやらせます
OPTIONS_GROUP_HTTPGRP+= HTTP_CONCAT
HTTP_CONCAT_GH_TUPLE= alibaba:nginx-http-concat:1.2.2:concat
HTTP_CONCAT_CONFIGURE_ON= --add-module=${WRKSRC_concat}
Makefile.localを作成したらオプションを指定してインストールします
# make OPTIONS_FILE_SET+=HTTP_IMAGE_FILTER BATCH=yes NO_CHECKSUM=yes install clean
本来ファイルのchecksumを行いますがNO_CHECKSUM=yesでchecksumを行わないようにしています
もうちょっと真面目にやる場合はdistinfoを更新してからchecksumを行うようにしてインストールします
# make OPTIONS_FILE_SET+=HTTP_CONCAT BATCH=yes makesum
# make OPTIONS_FILE_SET+=HTTP_CONCAT BATCH=yes NO_CHECKSUM=yes install clean
但しこの方法でmakesumするとdistinfoが上書きされてしまい、
今回使うファイル(nginx-1.14.2.tar.gz, alibaba-nginx-http-concat-1.2.2_GH0.tar.gz)のみのdistinfoになってしまいます
※元々のdistinfoは全モジュールの必要なファイルが記述されているので他オプションを指定するときに使用されます
portsの修正方法その3
その2で書いた内容をMakefile、Makefile.extmodなどにマージしてsend-prしましょう
https://www.freebsd.org/ja/support/bugreports.html
取り込まれればportsの修正不要でインストール可能になります!
本気でやる場合は https://bugs.freebsd.org/bugzilla/query.cgi (検索すると重い)で
取り込まれ済みのprを見ると参考になります
おわりに
dynamicモジュールはapacheみたいに別パッケージで提供されるようになるといいなぁ...