apache+php(2)

phpをapacheで使えるようにする。
phpの本家はhttp://www.php.netで,
donwloadというリンクからミラーを選択すればいい。そのURLをコピーして
$ wget http://au3.php.net/get/php-5.2.3.tar.bz2/from/this/mirror
INSTALLによるとPHPはどうもShared Moduleとして構築するのが普通なのか?
昔はそうでなかった気が... まぁいい。
あとMPMというものをapache2と一緒に使ってはいけないらしい。
さて, Shared Moduleをapacheで使うにはコンパイルからしなおさなくては。
$ cd httpd-2.0.59
$ ./configure --enable-so
$ make
$ make install

次にphpを。その前に準備。INSTALLに必要だと書いてある。
$ apt-get install flex
$ apt-get install bison

では改めて構築。
$ cd ../php-5.2.3
$ ./configure
...
configure: error: xml2-config not found. Please check your libxml2 installation.
...

libxml2がないのかな?
でもapt-get install libxml2すると最新とのこと。うーん...
./configure --helpすると
--with-libxml-dir=DIRで指定すればいいようだ。でもどこ?
find / -name 'xml2-config' -print してもxml2-configは見つからない。
仕方ない, ソースコードからインストールしよう。
その前に今あるやつは捨てるか。
$ apt-get remove libxml2

ってやったら非常に多くのパッケージが捨てられることになる。
ちょっと気持ち悪いことになるが, 捨てるのはあきらめてみよう。
/usr/share/doc/libxml2/READMEによると, 本家はhttp://xmlsoft.org/
のようだ。早速アクセスしてダウンロード。現在の最新は2.6.29。
そしてインストール
$ cd
$ wget ftp://xmlsoft.org/libxml2/libxml2-2.6.29.tar.gz
$ zcat libxml2-2.6.29.tar.gz | tar -xvf -
$ cd libxml2-2.6.29
$ ./configure
$ make
$ make install

意外とmakeの時間が長かったが, 無事に/usr/local/binにxml2-configが
作成された。

ようやくphp本体の構築
$ ./configure
$ make
$ make test

makeは通ったのに, make testで引っかかる。でてきたエラーは次のとおり。
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
double to string conversion tests [Zend/tests/double_to_string.phpt]
Bug #16069 (ICONV transliteration failure) [ext/iconv/tests/bug16069.phpt]
iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt]
strripos() offset integer overflow [ext/standard/tests/strings/strripos_offset.phpt]
XMLWriter: libxml2 XML Writer, Elements & Attributes [ext/xmlwriter/tests/007.phpt]
XMLWriter: libxml2 XML Writer, Elements & Attributes [ext/xmlwriter/tests/OO_007.phpt]
=====================================================================

ちょっと長引きそうなのと, セキュリティ的には問題なさそうなので
インストールしてしまう。

$ make install

これでとりあえず完了。次に設定を行う。phpのデフォルトの設定は
/usr/local/lib/php.iniのようだ。/etc/php.confじゃないんだ...
とちょっと思ってしまう。変更したければconfigureで
--with-config-file-path=/dir/fileで指定すればいいけど
とりあえずこのまま。
~/php-5.2.3/php.ini-distがテンプレートなのでコピー
$ cp php.ini-dist /usr/local/lib/php.ini


次にapacheで使えるように変更。/usr/local/apache2/conf/httpd.confの
最後に次の行を記述。

# php
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
# /php


さて, apacheを起動してみよう。
$ /usr/local/apache2/bin/apachectl start
...
Syntax error on line 1038 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/libphp5.so into server: 
 /usr/local/apache2/modules/libphp5.so: cannot open shared object file: 
 No such file or directory

... むみぃ... libphp5.soがないと言われる。まぁ確かにない。
... configureで--with-apxs2=/usr/local/apache2/bin/apxsをつけなかったからか?
仕方ない。やり直してみるか
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs
$ make
$ make test
$ make install
$ /usr/local/apache2/bin/apachectl start

すると今度は
etch:~/php-5.2.3# /usr/local/apache2/bin/apachectl start
Syntax error on line 1038 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/libphp5.so into server:
/usr/local/apache2/modules/libphp5.so: undefined symbol: sqlite3ExprDelete

libphp5.so自体が存在しないことは解決したようだが, 次は
sqliteが必要ですか? 当面使わないので, --without-sqliteで無効にする
(./configure --helpで調べた)。ついでなのでlibxml2も指定してみた。
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --without-sqlite \
    --with-libxml-dir=/usr/local/lib
$ make
$ make test
$ make install
$ /usr/local/apache2/bin/apachectl start

make testで同じエラーになったので, --with-libxml-dirの効果はなかった。
でsqlite3ExprDeleteも相変わらず言われる。しゃないので, sqliteを
インストール
$ apt-get install sqlite

コンパイルしなおし。
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs
$ make; make test; make install
$ /usr/local/apache2/bin/apachectl start

同じことを言われる。sqliteのライブラリも見つからないので,
--with-sqlite=DIRも指定できない。sqliteをソースコードからインストールすることにする。
$ apt-get remove sqlite
$ cd ~
$ wget http://www.sqlite.org/sqlite-3.3.17.tar.gz
$ zcat sqlite-3.3.17.tar.gz | tar -xvf -
$ cd sqlite-3.3.17
$ ./configure
$ make
$ make install

これで/usr/local/libにライブラリが, /usr/local/includeに
ヘッダがインストールされます。
さ, また再コンパイル。
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-sqlite=/usr/local/lib
...
checking for sqlite_open in -lsqlite... no
configure: error: wrong sqlite lib version or lib not found
...

うがぁ!! libsqlite3って名前だから? libsqliteならいいの?
$ cd /usr/local/lib
$ ln -s libsqlite3.a libsqlite.a
$ ln -s libsqlite3.la libsqlite.la
$ ln -s libsqlite3.so libsqlite.so
$ cd ~/php-5.2.3
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-sqlite=/usr/local/lib
...
checking for sqlite_open in -lsqlite... no
configure: error: wrong sqlite lib version or lib not found
...

へなへな... ウェブページを検索。make cleanくらいしかいいアドバイスが
ない。やってみる。
$ make clean
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs
$ make; make install
$ /usr/local/apache2/bin/apachectl start

あれ? 文句言われない... phpinfoを実行してみる。
$ cd /usr/local/apache2/htdocs
$ echo '' > phpinfo.php

http://etch/phpinfo.phpにブラウザでアクセス。
おお! ちゃんと動いている!
ちなみにこのあとmake testしてみたけど, 6つのエラーは相変わらずでした。

最後に起動時に起動するようにする。
$ cd /usr/local/apache2/bin
$ cp apachectl /etc/init.d/apache2
$ ln -s /etc/init.d/apache2 /etc/rc5.d/S91apache2


終わった...
エンジニアって日々こうやって試行錯誤してるんですよ! 決して
魔法使いではないのです! 魔法使いだって"魔女の宅急便"や
"魔法使いに大切なこと"では苦労してるでしょ!
だから無茶な締め切りを設定しないでください! お客様が困る?
本当に困るのは無茶な締め切りを設定したあんたですから!!
残念!!
あぁ, もう俺は何を言ってるんだ...
コメント ( 0 ) | Trackback ( 0 )
« apache+php(1) postfix(1) »
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。
数字4桁を入力し、投稿ボタンを押してください。
 
この記事のトラックバック Ping-URL
 


ブログ作成者から承認されるまでトラックバックは反映されません
 
※ブログ管理者のみ、編集画面で設定の変更が可能です。