ごく稀にそんなことをする必要があるのでメモ。
今回は Apache を例にとる。
32bit で動かすのだから古いほうが需要あるだろうということで、Apache2.0 系をいれる。
動かすサーバは、CentOS release 6.4 (Final)の 64bit 版。
- linux - Can you compile 32-bit Apache DSOs (Oracle HTTP Server) on a 64-bit machine? - Stack Overflow
基本的には、Apache でもそうでなくても、
configure のオプションで「CC="gcc -m32" CFLAGS="-march=i686"」を付けて、
make のオプションで「CC="gcc -m32"」を付ければよい。
Apache が 32bit なので、それに付随する mod_xxx 系も全部 32bit で入れなくてはならず、
正直めんどいため 32bit サーバで作り直した方が効率的です。
32bit 用のライブラリ等を入れる
$ sudo yum install glibc-devel.i686
$ sudo yum install libgcc.i686
$ sudo yum install zlib-devel.i686
openssl0.9.8y をインストール
一応、ssl も可の場合を想定
$ wget http://www.openssl.org/source/openssl-0.9.8y.tar.gz
$ tar xvfz openssl-0.9.8y.tar.gz
$ cd openssl-0.9.8y
$ ./config CC="gcc -m32" CFLAGS="-march=i686" --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared
$ make CC="gcc -m32"
$ sudo make install
なんで 1.0 系じゃないのか?っていうと
- openssl-1.0.0 + mod_ssl-2.8.31 - kaz_29@はてな
これと同じエラーが出てしまい、ソースいじるのもあれなので 0.9 系の最新版にしました。
ちなみに「OPTIM=-DSTACK=_STACK」オプションはなぜか効かなかった。。。
Apache2.0.64 をインストール
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.0.64.tar.gz
$ tar xvfz httpd-2.0.64.tar.gz
$ cd httpd-2.0.64/srclib/apr
$ ./configure CC="gcc -m32" CFLAGS="-march=i686" --prefix=/usr/local/apr --enable-threads
$ make CC="gcc -m32"
$ make install
$ sudo make install
$ cd ../apr-util/
$ ./configure CC="gcc -m32" CFLAGS="-march=i686" --prefix=/usr/local/apr --with-apr=/usr/local/apr
$ make CC="gcc -m32"
$ sudo make install
$ cd ../../
$ ./configure CC="gcc -m32" CFLAGS="-march=i686" --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-cgi --enable-cgid --enable-cache --enable-mem-cache --enable-proxy --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --enable-ssl --with-ssl=/usr/local/openssl --with-mpm=prefork
$ make CC="gcc -m32" -j3
$ sudo make install