2011年5月21日土曜日

FreeBSD apache 1.3 起動せず

数日前から毎朝3時のシステムメールの中に httpd が何度もコアダンプしていることを示しているメッセージが含まれるようになっていました。そこで気軽に apache 1.3 の httpd を再起動( apachectl restart )させてみたところ、なんとそのまま起動しなくなってしまいました。

とほほ!です。

すでにウェブサーバーは起動させて90日を経過していたこともあり、システム自体を再起動させてみることとしました。しかし httpd は相変わらず起動してくれません。

いくつも portupgrade でちまちまとアップグレードをしてきた関係で依存関係などが変なことになっているのではないかと考えてインストールされているすべてのソフトを再インストールすることとしました。デスクトップではないのでそれほど多くのソフトがインストールされているわけでもないので面倒なときには時々やってしまう手段です。
# portupgrade -af

この魔法のコマンドを実行するとソフトの再ビルドで数時間を要してしまいます。いつもであれば、再ビルドが終了したところでシステムを再起動させれば無事動作してくれるはずです。

しかし今日はなぜか httpd だけが再起動してくれません。

何となく今まで経験から httpd が起動しないときは php5 を疑ってみることとしています。
/usr/local/etc/apache/httpd.conf の中から php5 のモジュールをロードする部分をコメントアウトして httpd を起動させてみました。するとちゃんと php5 無しで起動します。やはり php5 との関係で問題があったようです。

ここからしばらく原因追求に没頭することとなってしまいました。本当に原因がよく分からなかったのです。

何気無しに php5 のバージョンを確認するためのコマンドを実行してみたところ php5 自身がセグメントエラーでコアダンプを吐いてしまうではありませんか?
# php --version
PHP 5.3.6 with Suhosin-Patch (cli) (built: May 21 2011 22:28:15)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
セグメントエラー(coreを出力しました)

原因は apache にあったのではなく php5 にあったようです。

そこでビルドの設定を再確認をしては再ビルドを行ってみました。
ビルドの設定方法は次のとおりです。
# cd /usr/ports/lang/php5
# make config


青い設定画面が表示されるので必要なオプションを確認したり、一時的に変更して再ビルドを行ってみました。しかしセグメントエラーになることに変化はありませんでした。

どうも php5 本体ではなく extensions(拡張部分)に問題があるのではないかと考えて、一度 extensions の組み込みをすべて外して バージョン確認をしてみました。するとセグメントエラーは発見されませんでした。やはり extensions に問題があったようです。

extensions の読み込みは /usr/local/etc/php/extensions.ini で設定します。
注意:コメントアウトにするのは行頭に「#」ではなく「;」になります。

一度全ての extensions をコメントアウトしたものを順次元に戻してセグメントエラーが出るのを発見しました。調査した結果は次の二つの extensions でセグメントエラーが発生することが判明しました。
;extension=sqlite3.so
;extension=pdo_sqlite.so

どうもデータベースの sqlite 関係でエラーとなってしまうようです。しかし mysql.so は問題ないようです。mysql は使っているのでこれでエラーが発生してしまうと大変でした。

取り合えず上記二つの extensions を組み込まずに php5 を動作させるようにして httpd を再起動させました。

ようやく正常に httpd が起動して自宅ウェブサーバーが動き始めました。上記二つの extensions は使用していないようで、ウェブ動作の異常も見当たりませんでした。

最終的な原因追求までに至っていませんが今日のところはこれで終わりました。結構疲れました!

2011-05-26 問題解決

 FreeBSD sqlite3 アップデート

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。