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でどうぞ。