mod_small_lightをApache2.4で使う(CentOS 7)


はじめに

mod_small_lightを数年ぶりに使う機会があって、こちらのページを参考にしながらセットアップしていたのですが、いざApacheを起動しようとするも、起動しないという状況に……。

ログをみると、"small_light module only works with mpm prefork mode"と怒られているので、慌ててMPMを確認するもprefork…。どうもMPMの判定が上手く行っていない様子。なので、その部分を修正してあげると、無事起動するようになりました。(この判定の不具合がsystemdがらみ?なのかもしれないので、それ以外では普通に使えるかもしれない)

最近はApache使うことも少なくなり、mod_small_lightを使う人も少ないかもしれないのですが、古いシステムを2.4系に移す必要性があり、なおかつsmall_lightを使い続けなければならないという人の助けになれば幸いです。

環境

  • CentOS 7.5
  • Apache 2.4.6

準備

yumのリポジトリにepelを追加

$ sudo yum install -y epel

必要なものをまるっと導入

$ sudo yum install -y httpd-devel ImageMagick ImageMagick-devel imlib2 imlib2-devel

パスを確認

$ which apxs Wand-config imlib2-config
/bin/apxs
/bin/Wand-config
/bin/imlib2-config

mod_small_lightのセットアップ

gitからソースをclone

$ cd /usr/local/src
$ git clone https://github.com/yamac/smalllight.git
$ cd smalllight

ソースを修正

このまま make installすると、先述したとおり、"small_light module only works with mpm prefork mode"という致命的エラーがログに吐かれ、静かにApacheが息を引き取ってしまいます。
なので、ApacheのMPMの判定部分を書き直してあげます。

@@ -93,7 +93,7 @@
 {
 #if APR_HAS_THREADS
     int mpm_threads;
-    ap_mpm_query(AP_MPMQ_MAX_THREADS, &mpm_threads);
+    ap_mpm_query(AP_MPMQ_IS_THREADED, &mpm_threads);
     if (mpm_threads >= 1) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
             "small_light module only works with mpm prefork mode"

これで、mpm_threadsは正しくpreforkなら0, workerなら1となります。

あとは流れで

あとは通常通り、先ほど確認したそれぞれのパスを指定して、makeするだけです!

$ ./configure --with-apxs=/bin/apxs \
              --with-Wand-config=/bin/Wand-config \
              --with-imlib2-config=/bin/imlib2-config \
$ sudo make
$ sudo make install

無事成功したら、メッセージどおり、chmodしてあげます

$ sudo chmod 755 /usr/lib64/httpd/modules/mod_small_light.so

これで怒られずに無事Apacheが起動します。(もちろんMPMはpreforkで)

$ sudo systemctl start httpd

あとがき

Apache/Nginxに限らず、こういったリサイズできるものって今は何が使われてるんですかね…? そもそもこういった方法で画像編集すること自体がイケてないのだろうか…。

参考

https://www.takedajs.com/entry/2017/02/26/195556
https://qiita.com/tototoshi/items/472f2b09e48ae9717a2d
https://ci.apache.org/projects/httpd/trunk/doxygen/group__qcodes.html