2008年9月5日金曜日

FreeBSD 7.0 と Apache 1.3.x

諸事情により FreeBSD 7.0 で Apache 1.3系を野良 make した。7.0 では初めて。

・・・・で、ものの見事にはまった。

たとえばこんな風にconfigure
./configure \
--prefix=/usr/local/apache \
--enable-module=all \
--enable-shared=max

して、make , make install する。まぁ特に変わったところはない。

が、おもむろに httpd -t すると見慣れないエラー。。

# /usr/local/apache/bin/httpd -t
Syntax error on line 205 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/mod_mmap_static.so into server: /usr/local/apache/libexec/mod_mmap_static.so: Undefined symbol "ap_null_cleanup"

だめじゃん。。 orz...
たまに Undefined symbol はみるけど、Apache ではみないぞ。。

実際やったときは、configure にいろんなオプション付けてたり変態的な最適化されてたりしたのであれこれはずしてみるも、ダメ、ダメ。

らちがあかないので ports を漁ってみることに。
(最初からみときゃよかった、、、。)

試しに port の apache13 なのを make , make install する。うむ問題ない。メンテナー乙です。

問題ないことがわかったので files の下を漁る。このへん

patch-なんちゃらをみる。クンクン。。patch-ae がくさい。

patch-ae の中身をコピペしてファイル作成、適用。

# patch -p0 < ../patch.apache
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- src/Configure.orig 2007-08-10 19:45:50.000000000 +0400
|+++ src/Configure 2007-09-08 04:46:28.000000000 +0400
--------------------------
Patching file src/Configure using Plan A...
Hunk #1 succeeded at 26.
Hunk #2 succeeded at 457.
Hunk #3 succeeded at 1083.
Hmm... Ignoring the trailing garbage.
done

で再び configure , make , make install して、、

# /usr/local/apache/bin/httpd -t
Syntax OK

うまくいった。

ports でサクッといきたいんだけど、そうもいかなかったりする事情があるわけで。
まぁ野良 make で困ったら ports 漁ればだいたいは済む。

件の patch 、CFLAGS や LDFLAGSなんちゃらの変更をしているんだけど、LDFLAGS なんちゃら がキモのようだ。。
/usr/bin/objformat 実行して aout か elf か判別して分岐。
7.0 だと /usr/bin/objformat 自体ないから aout として判定されてしまい(2.2.8 ですか...)

LDFLAGS_SHLIB_EXPORT=""
SHLIB_SUFFIX_DEPTH=2

が設定されるとアウト。6系も objformat なかった気がするんだけどどうだったかな。。

試しに /usr/bin/objformat をでっちあげてみた( echo elf するだけ) ところ、パッチ当てずに済むことを確認。まぁ当然か。。


0 件のコメント:

コメントを投稿