Solaris 10(8/07, x86) で Apache 2.2.8をコンパイル

前にも似たネタを書いたんだけど、ちょっと変わってたので書き直し。

まずはOpenSSL 0.9.8gをコンパイル。64bit対応で。

今回はSSL対応で作るよ。
32だとか64だとか、気にする事すら忘れていても64bitで作られる(前からそうだっけ?覚えてない)。

$ ./config threads shared zlib-dynamic \
--prefix=/usr/local/openssl-0.9.8g_64
$ make
# make install
# cd /usr/local
# ln -s openssl-0.9.8g_64 ssl64

makeのログをダラダラ眺めていると、gccコマンドの引数に"-m64"っていうのが入っている。これが64bitコンパイルのおまじない。
32bitライブラリと使い分けを明示するために、/usr/local/ssl64/っていうシンボリックリンクを作ったけど、/usr/local/ssl/っていうのは置いてない。まぁいいか。

sslライブラリをダイナミックリンクする話

Linuxだと/etc/ld.so.confとかに書くアレ。Solarisならcrleコマンドで設定するアレだ。
crleをちゃんと設定しないとライブラリのリンクに失敗してみたり、LD_LIBRARY_PATHで逃げようとすると他のユーザで使えなかったり、不便なことこの上ない。32bitライブラリと64bitライブラリの両方を設定するよ。こんな事で悩みたくないから使いそうなものは何でも書いちゃうぞ。(設定するサーバが既に稼動中ならこの気軽さで設定してはいけないよ)

# crle -c /var/ld/ld.config -l /usr/local/lib:/usr/sfw/lib:/usr/lib:/lib:/etc/lib:/usr/local/ssl/lib
# crle -64 -c /var/ld/64/ld.config -l /lib/64:/usr/lib/64:/usr/sfw/lib/64:/usr/local/ssl64/lib

/usr/local/ssl/lib/64のほうが良いのかなー、と思う人は

# cd /usr/local/ssl/lib
# ln -s /usr/local/ssl64/lib 64

とでもやればよい。

やっとこさApache 2.2.8だ

何も考えずに ./configure などとやると、Apacheは64bitだと思ってくれない。OpenSSLは思ってくれるのにね。

Apacheのconfigureが思うOS: i386-pc-solaris2.10
OpenSSLのconfigureが思うOS: solaris64-x86_64-gcc

そろそろ64bitOSのほうが多いと思うんだけどなー。さて、以下コンパイルオプション。prefixにも64bitを明示してみる。OpenSSLライブラリはさっきコンパイルした奴を指定。CC="gcc -m64"がキモだ!

$ env CC="gcc -m64" ./configure \
--prefix=/usr/local/apache-2.2.8_64 \
--enable-mods-shared=all \
--enable-auth-digest \
--enable-file-cache \
--enable-cache \
--enable-disk-cache \
--enable-mem-cache \
--enable-dbd \
--enable-bucketeer \
--enable-dumpio \
--enable-ext-filter \
--enable-substitute \
--enable-charset-lite \
--enable-deflate \
--enable-log-forensic \
--enable-logio \
--enable-mime-magic \
--enable-cern-meta \
--enable-expires \
--enable-headers \
--enable-ident \
--enable-usertrack \
--enable-unique-id \
--enable-version \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-proxy-ajp \
--enable-proxy-balancer \
--enable-ssl \
--enable-http \
--enable-info \
--enable-cgi \
--enable-rewrite \
--enable-so \
--with-port=80 \
--with-ssl=/usr/local/ssl64 \
--disable-ipv6
$ make
# make install

何でもアリなオプションだな!と思うが、リコンパイルが面倒くさいから設定だけで何でも有効になるようにしちゃうのだ。DSOの恩恵を最大限に利用するのだ。
(追記: --disable-ipv6を追加。)

$ ./httpd -V
Server version: Apache/2.2.8 (Unix)
Server built:   Mar 30 2008 17:44:59
Server's Module Magic Number: 20051115:11
Server loaded:  APR 1.2.12, APR-Util 1.2.12
Compiled using: APR 1.2.12, APR-Util 1.2.12
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FCNTL_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/apache-2.2.8_64"
 -D SUEXEC_BIN="/usr/local/apache-2.2.8_64/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

そして↑が出来上がったというわけだ。満足。思うところあってpreforkだが、スピード重視の御仁は--with-mpm=workerでどうぞ。

Apache 2.2系の雑感

Apache2.2が出て2年ちょい。最初の頃はどうなる事かと思ったが、Proxy, Rewrite, Cache関連のアップデートもようやく落ち着いたようで、2.2.8にしてようやく仕事にも実用と言えるレベルになった気がする(mpm_winnt関連のアップデートはまだ続くだろうがこれはどうでも良い)。
そろそろmod_cache本格導入を考えてみようかな。高くて言うほど速くない箱モノCacheアプライアンスサーバを捨てるのだ!わー!!