CentOS5.2 + nginx0.6.x + WSGI + Python2.5.x環境の構築方法 |
今回DB2をインストールした環境にwebサーバも
相乗りしたかったので、CentOS上にnginxを
インストールしてみます。
nginxの最新版は
http://sysoev.ru/nginx/download.html
Текущие версии:
(現在のバージョン)
Стабильные версии:
(安定バージョン)
Устаревшие стабильные версии:
(旧版のリリース)
※初めてGoogleのロシア語の翻訳を使いました。
ということで、安定バージョンの0.6.34を使用することにします。
また、後日記載しますがわけあってPython2.5.xで
環境を構築する必用があります。
CentOS5.2に標準インストールされているPythonは2.4系
なので、ソースをダウンロードしコンパイルします。
■Python2.5.4のインストール
#gccを入れていない場合は、インストールしておく
#yum install gcc
#Python2.5.4のソースを取得
#cd /usr/local/src/
#wget http://python.org/ftp/python/2.5.4/Python-2.5.4.tgz
#tar zxvf Python-2.5.4.tgz
#cd Python-2.5.4
#--enable-sharedオプションをつけてconfigure
#こうしないと、ライブラリが作成されず、mod_wsgiの
#ビルドが行えません。
#./configure --enable-shared
#後はお決まりのmake,make install
#make
#make install
pythonを起動しようとすると、
python: error while loading shared libraries:
libpython2.5.so.1.0: cannot open shared object file:
No such file or directory
というエラーが表示されます。
これに対処するため、
#vi /etc/ld.so.conf.d/python-2.5.4.conf
/usr/local/lib
#設定を反映
#ldconfig
こうしてやると、libpython2.5をロードできるようになり、
ちゃんと実行できます。
ここを参考にさせていただきました。
http://dogyear2nd.blog10.fc2.com/blog-entry-27.html
注意点として、Pythonのzlibオプションはこの時点では
有効にしないでください。
この後行うmod_wsgiのビルドが
checking for wsgi ... not found
./configure: error: the WSGI addon requires Python library.
というエラーと共に失敗します。
エラーの内容は
/usr/local/lib/libpython2.5.so: undefined reference to `inflateEnd'
と出力されるので、ビルド時zlibモジュールの参照が上手く
行えないのだと思うのですが・・・解決できませんでした。
どなたか、解決方法をご存知の方いらっしゃいましたら教えてください。。
■nginxとmod_wsgiのインストール
まずは、必用なライブラリのインストール
#yum install pcre-devel
#yum install openssl-devel
#yum install zlib-devel
ソースコードのダウンロード
#cd /usr/local/src
#wget http://sysoev.ru/nginx/nginx-0.6.34.tar.gz
#wget http://hg.mperillo.ath.cx/nginx/mod_wsgi/archive/tip.tar.gz
#tar zxvf nginx-0.6.34.tar.gz
#tar zxvf mod_wsgi-8994b058d2db.tar.gz
リネーム
#mv mod_wsgi-8994b058d2db mod_wsgi
このままだとビルドエラーになるので、ソースを修正します
#vi mod_wsgi/src/ngx_http_wsgi_handler.c
/* 74行目付近 */
if (r->method == NGX_HTTP_GET || r->method == NGX_HTTP_HEAD) {
/* XXX not sure */
rc = ngx_http_discard_body(r);
これを
if (r->method == NGX_HTTP_GET || r->method == NGX_HTTP_HEAD) {
/* XXX not sure */
/* rc = ngx_http_discard_body(r); */
rc = ngx_http_discard_request_body(r);
nginxのビルドを実行します。
#cd nginx-0.6.34
#./configure --add-module=/usr/local/src/mod_wsgi/ --sbin-path=/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1
■Pylonsのインストール
mod_wsgiはPython2.5.4のzlibを有効にしているとビルドに
失敗しますが、easy_installはeggを解凍するときzlibが必須です。
本当は、mod_wsgiをビルドする方法を見直す方が有効だと
わかってはいるのですが・・・力尽きました。
ジレンマを解消するため、
・nginx+mod_wsgiインストールまではzlibを有効にしない。
・インストールが完了したら、zlibを有効にして再インストール
という力技を行うことにします。
makeの設定を変更
#cd /usr/local/src/Python-2.5.4
#vi Modules/Setup
この行のコメントをはずす
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
#make
#make install
次にeasy_install、Pylonsを入れます。
#wget http://peak.telecommunity.com/dist/ez_setup.py
#python ez_setup.py
#easy_install Pylons==0.9.6.2
後はDebianで試したときと同様の手順で動作を
確認しました。
次回は、PythonからDB2への接続にチャレンジです。