Apache 1.3.29 のコンパイル for sh4
とりあえず、クロスコンパイルする前に、 i386 環境でコンパイルする。
# tar xvfz apache_1.3.29.tar.gz
# cd apache_1.3.29
# ./configure --help
# ./configure
# make
問題なし。これから、クロスコンパイル。前回のメモを探してみる…。が、
見つからない。しょうがないので、前回の apache_1.3.27/config.status を
参考にする。
# cat ../apache_1.3.27/config.status
〜snip〜
CC="sh4-linux-gcc" ¥
CPP="sh4-linux-gcc -E" ¥
LD_SHLIB="sh4-linux-gcc" ¥
LIBS="-L/usr/sh4-linux/lib" ¥
RANLIB="/usr/sh4-linux/bin/ranlib" ¥
./configure ¥
"--with-layout=Apache" ¥
"--htdocsdir=/usr/local/apache/html" ¥
"--cgidir=/usr/local/apache/html/cgi-bin" ¥
"--runtimedir=/var/apache" ¥
"--logfiledir=/var/apache" ¥
"--enable-shared=access" ¥
"--enable-shared=alias" ¥
"--enable-shared=asis" ¥
"--enable-shared=auth" ¥
"--enable-shared=auth_db" ¥
"--enable-shared=autoindex" ¥
"--enable-shared=digest" ¥
"--enable-shared=dir" ¥
"--enable-shared=env" ¥
"--enable-shared=imap" ¥
"--enable-shared=include" ¥
"--enable-shared=log_agent" ¥
"--enable-shared=log_config" ¥
"--enable-shared=mime" ¥
"--enable-shared=negotiation" ¥
"--enable-shared=setenvif" ¥
"--enable-shared=status" ¥
"--enable-shared=userdir" ¥
"--enable-shared=vhost_alias" ¥
"--enable-shared=actions" ¥
"$@"
のようなので、前半部分の環境変数をセットして、後半部分は copy & paste した。
忘れちゃいけない --enable-module=proxy オプションを追加した。configure を
実行してみた。
a./helpers/TestCompile: line 277: /home/toyota/src/apache_1.3.29/src/helpers/testfunc:
cannot execute binary file
が出たけど、うまく最後まで行ったので、見なかったことにして、 make を
してみた。が、予想通りにエラーが発生した。
# make
〜snip〜
a./gen_test_char >test_char.h
/bin/sh: line 1: ./gen_test_char: cannot execute binary file
クロスコンパイルなので、仕方がない。
# find ./ -name gen_test_char
と場所を探して、しばらくディレクトリのソースを眺めてみる。
# vi src/main/Makefile
と直接 Makefile をいじって、ここだけは sh4-linux-gcc を使わずに、素の gcc を
使うように書き換えたり、環境を合わせたり。で、もう一度。
# cd src/main
# make
# make clean
# cd ../../
# make
/usr/lib/gcc-lib/sh-linux/3.2.3/../../../../sh-linux/bin/ld: warning:
unknown architecture ofinput file `main/libmain.a(alloc.o)' is incompatible with sh4 output
あらら、そりゃ駄目だ。。もう少しいじらなければ、いけないようなので、作戦変更。
# ./configure --with-layout=Apache ...(省略)
# cp /tmp/apache_1.3.29/src/main/gen_test_char ./src/main/
# cp /tmp/apache_1.3.29/src/main/gen_uri_delims ./src/main/
# vi src/main/Makefile
Makefile で、 gen_test_char と gen_uri_delims を作らないように、
gen_uri_delims:
/bin/true
gen_test_char:
/bin/true
こんな感じにしてみた。これで、なんとかうまくいったようである。やや不安だが、
テストしてみることにする。の前に、インストールが面倒だった。 Makefile を
書き換えて、必要な部分だけのコマンドを出力するようにした。今回の場合は
こうなった。
install -m 755 ./src/httpd /usr/local/apache/bin/httpd
cp ./src/support/httpd.exp /usr/local/apache/libexec/httpd.exp
chmod 644 /usr/local/apache/libexec/httpd.exp
install -m 755 ./src/modules/standard/mod_env.so /usr/local/apache/libexec/mod_env.so
install -m 755 ./src/modules/standard/mod_log_config.so /usr/local/apache/libexec/mod_log_config.so
install -m 755 ./src/modules/standard/mod_mime.so /usr/local/apache/libexec/mod_mime.so
install -m 755 ./src/modules/standard/mod_negotiation.so /usr/local/apache/libexec/mod_negotiation.so
install -m 755 ./src/modules/standard/mod_status.so /usr/local/apache/libexec/mod_status.so
install -m 755 ./src/modules/standard/mod_include.so /usr/local/apache/libexec/mod_include.so
install -m 755 ./src/modules/standard/mod_autoindex.so /usr/local/apache/libexec/mod_autoindex.so
install -m 755 ./src/modules/standard/mod_dir.so /usr/local/apache/libexec/mod_dir.so
install -m 755 ./src/modules/standard/mod_asis.so /usr/local/apache/libexec/mod_asis.so
install -m 755 ./src/modules/standard/mod_imap.so /usr/local/apache/libexec/mod_imap.so
install -m 755 ./src/modules/standard/mod_actions.so /usr/local/apache/libexec/mod_actions.so
install -m 755 ./src/modules/standard/mod_userdir.so /usr/local/apache/libexec/mod_userdir.so
install -m 755 ./src/modules/standard/mod_alias.so /usr/local/apache/libexec/mod_alias.so
install -m 755 ./src/modules/standard/mod_access.so /usr/local/apache/libexec/mod_access.so
install -m 755 ./src/modules/standard/mod_auth.so /usr/local/apache/libexec/mod_auth.so
install -m 755 ./src/modules/standard/mod_setenvif.so /usr/local/apache/libexec/mod_setenvif.so
このスクリプトを実行前に、現在の環境を保存しておく。
# cd /usr/local
# cp -p -r apache apache-old
で、インストール、このスクリプトを実行しようと思ったら…、 install コマンドが
入っていなかった。急遽、 fileutils の rpm をとってきて、中身を取り出して、
実行できるようにした。
で、もう一度、このスクリプトを実行したら、ちゃんとインストールされた。
# /usr/local/apache/apachectl start
問題なく、起動した。一応、チェックする。
# ./httpd -l
Compiled-in modules:
http_core.c
mod_cgi.c
mod_proxy.c
mod_so.c
mod_proxy は入ったようであるが、
# ls -la httpd
-rwxr-xr-x 1 toyota user 502392 Nov 28 01:33 httpd
# strip httpd
# ls -la httpd
-rwxr-xr-x 1 toyota user 455224 Nov 28 01:54 httpd
のサイズとなった。でかくなったな。
> ls -la /usr/local/apache-old/bin/httpd
-rwxr-xr-x 1 root root 369916 Nov 26 02:48 /usr/local/apache-old/bin/httpd
なので、もう一度、作り直す。shared lib にして、作り直す。 configure に
--enable-module=proxy と同時に --enable-shared=proxy を追加して、
make し直し。
# ls -la ./httpd
-rwxr-xr-x 1 toyota toyota 412842 11月 28 01:58 httpd*
# sh4-linux-strip httpd
# ls -la ./httpd
-rwxr-xr-x 1 toyota toyota 369916 11月 28 01:59 httpd*
これで使用することにする。install 用のスクリプトに以下を追加。
install -m 755 ./src/modules/proxy/libproxy.so /usr/local/apache/libexec/libproxy.so
インストールして、実行して、完了。
が、module の指定で shared なものが多いので、様子をみてチューニングしないと。
その前に、何でこんな設定にしたんだろう。思い出せない。
|