ApacheのモジュールをDebian上でもRHEL/CentOS上でもビルドできるようにする
Apacheのモジュールを作るときは、Debian上でapxsコマンドでテンプレートを 生成して使っている。だけど、使ってくれる人はRHEL/CentOSを使っていることが 多かったり。
DebianからRHEL/CentOSに持っていく時はMakefileの書き換えが必要なのだが、 それも面倒なので、apxsコマンドが生成したMakefileを使って、Debian上でも RHEL/CentOS上でもビルドできるようにする補助Makefileを作ってみた。
何ができるようになるか?
- DebianとRHEL/CentOSでのApache httpdのディレクトリ構成の差異を 吸収してApacheのモジュールがビルドできる。
- DebianとRHEL/CentOS 6.x以下とRHEL/CentOS 7の設定ファイルの
管理方法に合わせて、LoadModuleをする設定ファイルを、
モジュール名を自動判別しながらインストールする。
(disable状態でインストールされる)
- Debianの場合: /etc/apache2/mods-available/your_module.load
- RHEL/CentOS 7の場合: /etc/httpd/conf.module.d/99-your_module.conf-
- RHEL/CentOS 6.x以下の場合: /etc/httpd/conf.d/your_module.conf-
- apxsコマンドが生成したMakefileを数行書き換えるだけで使えるようになる。
補助Makefile (distro_support.mk)
この distro_support.mk を、apxsが生成したディレクトリに配置する。
module_name=$(patsubst mod_%,%,$(shared:%.la=%))
ifneq ($(wildcard /etc/debian_version),)
# Debian/Ubuntu
top_srcdir=/usr/share/apache2
top_builddir=/usr/share/apache2
include /usr/share/apache2/build/special.mk
loader_file=/etc/apache2/mods-available/$(module_name).load
loader_lines=LoadModule $(module_name)_module $(libexecdir)/mod_$(module_name).so
else ifneq ($(wildcard /etc/redhat-release),)
# RHEL/CentOS
top_srcdir=/etc/httpd
ifneq ($(wildcard /usr/lib64),) # 64bit
top_builddir=/usr/lib64/httpd
include /usr/lib64/httpd/build/special.mk
else
top_builddir=/usr/lib/httpd
include /usr/lib/httpd/build/special.mk
endif
ifneq ($(wildcard /etc/httpd/conf.modules.d),) # CentOS7
loader_file=/etc/httpd/conf.modules.d/99-$(module_name).conf-
else
loader_file=/etc/httpd/conf.d/$(module_name).conf-
endif
loader_lines=LoadModule $(module_name)_module modules/mod_$(module_name).so
else
$(error unsupported platform)
endif
install-loader-config:
echo -e "$(loader_lines)" > $(loader_file)
chmod 644 $(loader_file)
install: install-modules-yes install-loader-config
https://gist.github.com/paoneJP/cfa8650e20b33e4506d4 にも同じものを貼っておく。
補助Makefileを使う
distro_support.mkを使うように、apxsが生成したMakefileの先頭部分を 次のとおり書き換える。
変更前
##
## Makefile -- Build procedure for sample your_module Apache module
## Autogenerated via ``apxs -n your_module -g''.
##
builddir=.
top_srcdir=/usr/share/apache2
top_builddir=/usr/share/apache2
include /usr/share/apache2/build/special.mk
# the used tools
...
変更後
##
## Makefile -- Build procedure for sample your_module Apache module
## Autogenerated via ``apxs -n your_module -g''.
##
builddir=.
#top_srcdir=/usr/share/apache2
#top_builddir=/usr/share/apache2
#include /usr/share/apache2/build/special.mk
include distro_support.mk
# the used tools
...
top_srcdir=... から include ... までの3行をコメントアウトし、 include distro_support.mk 行を書き足す。
使い方
いつもどおりの使い方でOK.
$ make
$ sudo make install