apacheの設定
<VirtualHost *:80>
ServerName trac.example.com
DocumentRoot "/www/trac/htdocs"
Options Indexes
ErrorLog "/data/logs/apache/trac_error_log"
CustomLog "/data/logs/apache/trac_access_log" common
<Location /sample>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /data/trac
# PythonOption TracUriRoot /trac
</Location>
</VirtualHost>
<Directory /www/trac/htdocs>
Options FollowSymLinks
AllowOverride None
Order deny,allow
# Deny from all
</Directory>
trac専用にサブドメインをきったのでこういう風になっている。
・・・とこれを書いている時点でmod_pythonってあったっけ。って気づいてapache再起動で案の定エラーがでた。
ということでmod_pythonを入れる。
#mod_pythonのインストール
[root:/usr/local/src] wget http://ftp.riken.jp/net/apache/httpd/modpython/mod_python-3.3.1.tgz
[root:/usr/local/src] cd mod_python-3.3.1
[root:/usr/local/src/mod_python-3.3.1] ./configure --with-apxs=/usr/local/apache2/bin/apxs
[root:/usr/local/src/mod_python-3.3.1] make
[root:/usr/local/src/mod_python-3.3.1] make install
[root:/] vi /usr/local/apache2/conf/httpd.conf
LoadModule python_module modules/mod_python.so ←足す
[root:/]service httpd restart
OK!
さて、これでブラウザからアクセスしてみると・・・真っ白。画面真っ白。
で、サブドメインのログを見てもなにもでてない。なんとなく大元(/usr/local/apache2/logs)のログを見てみたら
httpd: Objects/stringobject.c:105: PyString_FromString: Assertion `str != ((void *)0)' failed.というエラーがでていた。
[Tue Dec 16 21:52:58 2008] [notice] child pid 6438 exit signal Aborted (6)
調べてみるとapacheのXMLパーサであるところのlibexpatが古いことが原因らしい。
僕の場合、サーバ内にあるlibexpatは全部同じバージョンだったので新しいやつをインストールすることに。
[root:/usr/local/src] wget http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
[root:/usr/local/src] tar zxvf expat-2.0.1.tar.gz
[root:/usr/local/src] cd expat-2.0.1
[root:/usr/local/src/expat-2.0.1] ./configure --prefix /usr/local/expat
[root:/usr/local/src/expat-2.0.1] make
[root:/usr/local/src/expat-2.0.1] make install
[root:/usr/local/src/expat-2.0.1] strings /usr/local/expat/lib/libexpat.so | grep expat_
expat_2.0.1
[root:/usr/local/src/expat-2.0.1] strings /usr/local/apache2/lib/libexpat.so | grep expat_
expat_1.95.2
さて、こいつをどうするか。apacheを再コンパイルしてみようと思ったけど、configureのオプションにexpatを指定できるものがなかったので参考にさせてもらったサイトのように上書きすることに。
ところでEC2ってこういう試行錯誤しているときに、すぐに錯誤が入る前の状態に戻せるからいいよね。
いろいろやっていると、再度正解のフローだけ辿ってもどこで前提がくずれちゃってうまくいかないとかあるじゃないですか。
それが、最初からじゃなくて、途中の状態にすぐ戻せるから(ちゃんとイメージとしてバックアップしておかないとダメだけど)楽チンでいいね。
[root:/usr/local/apache2/lib] mkdir backup
[root:/usr/local/apache2/lib] mv libexpat.* backup/
[root:/usr/local/apache2/lib] cp -a /usr/local/expat/lib/libexpat.* .
[root:/usr/local/apache2/lib] ll /usr/local/expat/lib/
total 724
-rw-r--r-- 1 root root 384524 Dec 17 01:00 libexpat.a
-rwxr-xr-x 1 root root 805 Dec 17 01:00 libexpat.la
lrwxrwxrwx 1 root root 17 Dec 17 01:00 libexpat.so -> libexpat.so.1.5.2
lrwxrwxrwx 1 root root 17 Dec 17 01:00 libexpat.so.1 -> libexpat.so.1.5.2
-rwxr-xr-x 1 root root 342017 Dec 17 01:00 libexpat.so.1.5.2
[root:/usr/local/apache2/lib] strings libexpat.so | grep expat_
expat_2.0.1
[root:/usr/local/apache2/lib] service httpd restart
で、ブラウザでアクセス。
http://example.com/sample
・・・で、できた。。。
コメントする