Help us understand the problem. What is going on with this article?

FreeBSD 上で Nginx の pkg を使う場合のメモ 応用編

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がインストールされます
nginx options
※依存関係にあるパッケージも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みたいに別パッケージで提供されるようになるといいなぁ...

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away