小寺@テクストです
PHP3-3.0.18-i18n-ja2をdebianパッケージにしようと思い、以下のことを試
しましたが、最後の最後でひっかかっています。この現象について何かご存じ
の方がいらしたら、ご教示お願いします。
(1)debian potato(一部woody)のデスクトップ機で、PHP3-i18nをパッケージ化。
これは成功。
・環境: debian potatoベースで、libc6まわりをwoodyに上げたマシン。
------------------------------
ii libc6-dev 2.2.2-4
ii gcc 2.95.2-13
ii binutils 2.9.5.0.22-3
ii apache-dev 1.3.12-2.1
------------------------------
・やったこと:
PHP3-i18nを展開し、dh_make、debian/rulesを調整して、debuild。
(途中、gdの新しいバージョンが必要なことに気づき、gd-1.8.4のtar-ball
をパッケージ化してインストール)。
(2)debian potatoのサーバーに、作成したソースパッケージをコピーしてバイ
ナリ作成、インストール。
・結果:
apacheが起動せず。apachectlで起動してもエラーメッセージは出ない。ど
うやら最初の子プロセスの起動に失敗している模様。
(3)libc6をアップグレードしたサーバーで、バイナリ構築のテスト
このあとさまざまな試行錯誤をしたのですが、原因をつかまえるにいたらず、
思い切ってlibc6をwoodyに上げることにしました。
(PHP-i18nにdebianソースパッケージのdiffを当てたり、その逆をしたり、
PHP4+jstringを試したりしました。apacheも、1.3.9、1.3.12、1.3.14、
1.3.19などと試しました)
そして、先ほどのPHP3-i18nの自作ソースパッケージをdebuild -bしてイン
ストール。
・結果:
今度はapacheがsegmentation faultで起動しなくなりました(もちろん
libphp3.soをhttpd.confから外せば起動します)。
今度のサーバーの環境は次のようなものです。
------------------------------
ii libc6-dev 2.2.2-4
ii gcc 2.95.3-7
ii binutils 2.11.90.0.5-1
ii apache-dev 1.3.9-13.2
------------------------------
・ログ
libphp3.soを読み込ませる状態でstarce apacheしたところ、次のようなログが取れました(最後のほうを抜粋)。
----------------------------------------
open("/lib/libnss_dns.so.2", O_RDONLY) = 4
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\20"..., 1024) = 1024
fstat(4, {st_mode=S_IFREG|0644, st_size=13016, ...}) = 0
brk(0x80d5000) = 0x80d5000
old_mmap(NULL, 15868, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40527000
mprotect(0x4052a000, 3580, PROT_NONE) = 0
old_mmap(0x4052a000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x2000) = 0x4052a000
close(4) = 0
munmap(0x4035c000, 28615) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}}, 16) = 0
send(4, "\275\263\1\0\0\1\0\0\0\0\0\0\3www\4text\2co\2jp\0\0\1\0"..., 32, 0) = 32
gettimeofday({988354012, 201979}, NULL) = 0
rt_sigprocmask(SIG_SETMASK, NULL, [], 8) = 0
select(5, [4], NULL, NULL, {5, 0}) = 1 (in [4], left {5, 0})
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
recvfrom(4, "\275\263\205\200\0\1\0\2\0\2\0\2\3www\4text\2co\2jp\0\0"..., 1024, 0, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}}, [16]) = 143
close(4) = 0
close(889192450) = -1 EBADF (Bad file descriptor)
close(16777343) = -1 EBADF (Bad file descriptor)
close(0) = 0
close(0) = -1 EBADF (Bad file descriptor)
close(889192450) = -1 EBADF (Bad file descriptor)
close(343976128) = -1 EBADF (Bad file descriptor)
close(0) = -1 EBADF (Bad file descriptor)
(以下、延々と続く)
close(1179403647) = -1 EBADF (Bad file descriptor)
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
----------------------------------------
ちなみにlibphp3.soのopen,read,closeはうまく行っているようです。
(4)PHP3-i18nのmake,make installのテスト
パッケージ化の過程に問題があるかもしれないと思い、PHP3-3.0.18-i18n-ja2を、
tar-ballからmake,make installしてみました。
configureのオプションをいろいろ変えて試しましたが、やはりsegmentation
faultになります。
(5)PHP3-3.0.18(potatoパッケージ)のインストールテスト
今度はpotatoのソースパッケージ(非i18n)を入れてみました。
・debパッケージからバイナリインストール → 問題なく起動
・ソースパッケージをdebuildしてインストール → segfault
この段階で、うーむ、とうなってしまいました。要するにサーバー側のmake
作業自体に問題があるようなのです。
ここでapxsを検証するために、以前lib_davをパッケージ化したものをバイ
ナリ構築し直し、インストールしてみましたが、これはOKでした。つまりapxs
はおかしくないようです。そして、make作業自体が、必ずしも失敗するわけで
はないこともわかりました。
どうやらliphp3.soを作る過程で関わってくるライブラリに特有の問題のよ
うです。
とりあえずヘッダファイルのバージョン不整合を疑い、主なxxx-devパッケー
ジなどをアップグレードしました。全部はメモっていませんが、
zlib1g、libgdbm1、libdbmg1、libdb2
あたりです。
そして、相変わらず segmentation fault を食らっています :-)
-----
いろいろと頑張ってみましたが、私の貧弱な知識では、これ以上打つ手がな
さそうです。
ヒントだけでも結構です。何か助言がありましたらお願いいたします m(.'.)m
---*---*---*---*---*---*---
テクスト 小寺
E-mail: odera _at_ text.co.jp
or : odera _at_ homemail.com
---*---*---*---*---*---*---