ソースインストールのApacheにHeaderカスタマイズモジュール「headers_module」をapxsコマンドで追加する手順




投稿日:

ソースインストールされたApacheでは、条件さえクリアしていれば、あとから手動でモジュールを追加することも可能です。
今回は、headerカスタマイズに使うモジュールを例に取って、手順を見てみます。

もしこのモジュールがないまま Hearderの記述をした場合は以下のエラーとなります。

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration


【現状の確認】

$ /usr/local/apache2/bin/httpd -M 

headers_module

が含まれていない事を確認。 インストールが完了すると、これが入ります。

$ /usr/local/apache2/bin/httpd -l

mod_so.c がある事を確認。これがないとモジュールの追加はできません。
httpdを最初からインストールし直す事になります。


【対象のモジュール】

モジュール headers_module
詳細はこちら(http://httpd.apache.org/docs/current/ja/mod/mod_headers.html


【既存のバックアップ】

cp等で取っておくのが安全です。

ソースのバックアップ
# cp -rp /usr/local/src/httpd-2.2.21 /usr/local/src/httpd-2.2.21_20141016

httpd.confのバックアップ
# cp -rp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.2014101601

では、モジュール追加と行きましょうか!


【コンパイル】

対象モジュールを探します。通常、module配下にあるので探しましょう。

移動して、

cd /usr/local/src/httpd-2.2.21/modules/metadata/

apxsコマンドです。

ちなみに、オプションは以下です。

Usage: apxs -g [-S <var>=<val>] -n <modname>
       apxs -q [-S <var>=<val>] <query> ...
       apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]
               [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]
               [-Wl,<flags>] [-p] <files> ...
       apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...
       apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...

これで実行。

/usr/local/apache2/bin/apxs -c mod_headers.c

/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache2/include  -I/usr/local/apache2/include   -I/usr/local/apache2/include   -c -o mod_headers.lo mod_headers.c && touch mod_headers.slo
/usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_headers.la  -rpath /usr/local/apache2/modules -module -avoid-version    mod_headers.lo

完了。


【インストール】

以下を実行します。

/usr/local/apache2/bin/apxs -ian headers mod_headers.la

結果

〜略〜

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/local/apache2/modules/mod_headers.so
[activating module `headers' in /usr/local/apache2/conf/httpd.conf]

自動でhttpd.confにモジュールも追加してくれた模様。

# diff /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.2014101601
55d54
< LoadModule headers_module     modules/mod_headers.so

diffするとありました。

【設定ファイルの読み込み】

# /etc/init.d/httpd graceful

【インストールの確認】

$ /usr/local/apache2/bin/httpd -M

headers_module (shared) が入ったのを確認!