Unix / BSD / Linux

Apacheにmod_pythonを組み込むとSegmentation Fault(11)で落ちる

1. FreeBSD6.2, Apache1.3.42, PHP5.3, Python2.7, mod_python にてApacheがSegmentation Faultで落ちる。
2. Pythonは--without-thread指定しないとコンパイルが通らない。
3. mod_pythonの代わりにmod_wsgiをインストールしようとしたが、--without-threadを付けてPythonをインストール後 mod_wsgiをインストールしようとすると、PythonのThreadを有効にしてインストールしろと怒られる...。


どうしろと?という状況になったので、OSから全部新規にやり直し。


FreeBSD8.1, Apache2.2.16, PHP5.3, MySQL5.1, Python2.6.5, mod_wsgi3.3 で動きました。(FreeBSD7.3で新規に書き下ろした解決方法はこちら)


以下操作ログ。

あー、 ちなみに、mod_pythonのSegmentation Faultだが、今回は 「mod_pythonとPHP, MySQLがインストールされているとSegmentation Fault(11)でApacheが落ちる」という迷惑極まりない代物。諦めましょう。

http://djangoproject.jp/doc/ja/1.0/howto/deployment/modpython.html#id11 によると、
『mod_python と mod_php を同じ Apache のインスタンスで動作させ、バックエンドに MySQL を使っている場合。PHP と Python MySQL バックエンドとのバージョン衝突で引き起こされる既知の問題かもしれません。これについては mod_python FAQ entry に詳しく書かれています。』とのこと。


[root@bsd ~]# uname -a
FreeBSD bsd.local 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:55:53 UTC 2010     root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386



- ports更新 -
[root@bsd ~]# portsnap fetch
[root@bsd ~]# portsnap extract


- postgresqlインストール -
[root@bsd ~]# pushd /usr/local/src/
[root@bsd ~]# wget http://wwwmaster.postgresql.org/redir/323/f/source/v8.4.4/postgresql-8.4.4.tar.gz
[root@bsd ~]# tar xzf postgresql-8.4.4.tar.gz
[root@bsd ~]# cd postgresql-8.4.4
[root@bsd ~]# ./configure --prefix=/usr/local/pgsql
[root@bsd ~]# make
[root@bsd ~]# make install
[root@bsd ~]# make clean
[root@bsd ~]# adduser postgres
[root@bsd ~]# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
[root@bsd ~]# chown postgres:postgres /usr/local/pgsql
[root@bsd ~]# chown -R postgres:postgres /usr/local/pgsql


- MySQLインストール -
[root@bsd ~]# pushd /usr/local/src/
[root@bsd ~]# wget http://chocbanana.com/mysql-5.1.50.tar.gz
[root@bsd ~]# tar xzf mysql-5.1.50.tar.gz
[root@bsd ~]# cd mysql-5.1.50
[root@bsd ~]# ./configure --prefix=/usr/local/mysql
[root@bsd ~]# make
[root@bsd ~]# make install
[root@bsd ~]# make clean
[root@bsd ~]# cp support-files/mysql.server.sh /usr/local/etc/rc.d/mysql-server
[root@bsd ~]# cp /usr/local/src/mysql-5.1.50/support-files/my-medium.cnf.sh /etc/my.cnf
[root@bsd ~]# vi /etc/my.cnf
[root@bsd ~]# /usr/local/etc/rc.d/mysql-server start


- webalizerインストール -
[root@bsd ~]# pushd /usr/ports/www/webalizer/
[root@bsd ~]# make
[root@bsd ~]# make install
[root@bsd ~]# make clean

- libmcrypt / PHPのconfigureで指定するためインストール -
[root@bsd ~]# pushd /usr/ports/security/libmcrypt/
[root@bsd ~]# make
[root@bsd ~]# make install clean


- Python2.6.5 インストール -
[root@bsd ~]# pushd /usr/ports/lang/python
[root@bsd ~]# make fetch
[root@bsd ~]# make config # ここで Enable thread supportを有効にすること
[root@bsd ~]# make patch
[root@bsd ~]# make
[root@bsd ~]# make install
[root@bsd ~]# make clean


- Apache2.2.16インストール -
[root@bsd ~]# pushd /usr/local/src/
[root@bsd ~]# wget http://chocbanana.com/dl/httpd-2.2.16.tar.gz
[root@bsd ~]# tar xzf httpd-2.2.16.tar.gz
[root@bsd ~]# cd httpd-2.2.16

[root@bsd ~]# ./configure --prefix=/usr/local/apache2  --enable-suexec --with-suexec-caller=nobody --with-suexec-userdir=homepage --with-suexec-docroot=/home  --with-suexec-logfile=/usr/local/apache2/logs/suexec_log --with-suexec-uidmin=1000 --with-suexec-gidmin=1000 --with-suexec-safepath="/bin:/usr/bin"  --enable-module=log_agent --enable-module=log_referer --enable-module=so --enable-module=rewrite --enable-rule=SHARED_CORE  --enable-rule=EXPAT

[root@bsd ~]# make
[root@bsd ~]# make install
[root@bsd ~]# make clean



- PHP5.3.3インストール -
[root@bsd ~]# cd ../
[root@bsd ~]# wget http://chocbanana.com/dl/php-5.3.3.tar.gz
[root@bsd ~]# tar xzf php-5.3.3.tar.gz
[root@bsd ~]# cd php-5.3.3
[root@bsd ~]# ./configure --enable-mbstring --enable-mbregex --with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql=/usr/local/pgsql --with-mysql=/usr/local/mysql --with-gd --with-zlib --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-freetype-dir=/usr/local --with-mcrypt=/usr/local

[root@bsd ~]# make
[root@bsd ~]# make test
[root@bsd ~]# make install
[root@bsd ~]# make clean

- mod_wsgiインストール(ApacheとPythonのコネクタ) -
[root@bsd ~]# cd ../
[root@bsd ~]# wget http://chocbanana.com/dl/mod_wsgi-3.3.tar.gz
[root@bsd ~]# tar xzf mod_wsgi-3.3.tar.gz
[root@bsd ~]# cd mod_wsgi-3.3
[root@bsd ~]# ./configure --with-apxs=/usr/local/apache2/bin/apxs
[root@bsd ~]# make
[root@bsd ~]# make install



[root@bsd ~]# vi /usr/local/apache2/conf/httpd.conf


[ httpd.conf ]
-----
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.so
LoadModule wsgi_module        modules/mod_wsgi.so
-----


[root@bsd ~]# /usr/local/apache2/bin/apachectl configtest
[root@bsd ~]# /usr/local/apache2/bin/apachectl start


[ error_log ]
-----
[Sat Aug 28 21:06:23 2010] [notice] suEXEC mechanism enabled (wrapper: /usr/local/apache2/bin/suexec)
[Sat Aug 28 21:06:23 2010] [notice] Apache/2.2.16 (Unix) mod_wsgi/3.3 Python/2.6.5 PHP/5.3.3 configured -- resuming normal operations
-----

  Apache/2.2.16 (Unix) mod_wsgi/3.3 Python/2.6.5 PHP/5.3.3 configured と表示されていればOK。

  ■追記
      FreeBSD6.2で、HyperThreadingなどCPUが(擬似的な場合も含む)2つ以上の場合にPythonのコンパイルが通らない可能性が ある。
      SMP環境下でPHP, Python, MySQLを構築するには、OSのアップグレードが必要になると思います。
      # SMP環境下だとmod_wsgi3.3でも Segmentation fault(11) でApache落ちたよ。
      # つか、FreeBSD8.1ならSMPでも大丈夫だったので、OSアップグレードして下さい...。orz

このページの先頭へ