logo
code:Haemophilus influenzae

ここに書かれていることは無保証です。同じことを行って問題が発生しても、 龍義は責任をとりません。

2003年11月25日

戻る

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 なものが多いので、様子をみてチューニングしないと。
その前に、何でこんな設定にしたんだろう。思い出せない。


by Tatsuyoshi
since 2003