yumで入れたPHPをソースからコンパイルしたPHPと入れ替える

  • 2009年1月 7日 23:03
  • php

Apacheが最近segmentation faultでコケることが数回あったので、原因を探るためにdebugを有効にしたPHPに入れなおすことにしてみました。OSはLinux(Fedora9)で、Apache, mysqldはyumで入れていたものをそのまま使うことを想定しています。以下、作業メモです。

既存のPHPを削除

もともとyumで入っていたので、そのまま素直にyumで削除します。

sudo yum -y remove php\*

ソースコードの入手

PHPの最新のソースコードを入手します。ソースコードはここから入手できます。2009.01.06時点での最新バージョンは5.2.8です。

Configureの準備

Configureにあたって、多くのツールをインストールしておく必要があります。僕は次のものを入れる必要がありました。(場合によってはまだほかにも必要かも?)

sudo yum -y install ncurses\*
sudo yum -y install gcc-c++ 
sudo yum -y install flex
sudo yum -y install libxml\*
sudo yum -y install gdbm-devel
sudo yum -y install gd gd-devel freetype freetype libpng libmng\* libtiff\* libjpeg\* libc-client\* giflib\*
sudo yum -y install httpd\*
sudo yum -y install pcre-devel
sudo yum -y install unixODBC-devel
sudo yum -y install net-snmp-devel
sudo yum -y install openssl\*
sudo yum -y install bzip2\*
sudo yum -y install curl\*
sudo yum -y install gdbm\*
sudo yum -y install db4\*
sudo yum -y install gmp\*
sudo yum -y install libc-client\*
sudo yum -y install openldap\*
sudo yum -y install libmcrypt\*
sudo yum -y install mhash\*
sudo yum -y install freetds\*
sudo yum -y install mysql\*
sudo yum -y install postgresql\*
sudo yum -y install aspell\*
sudo yum -y install readline\*
sudo yum -y install libtidy\*
sudo yum -y install libxslt\*
sudo yum -y install libtool\*

configure

yumで入れていたころのPHPのconfigure結果をできるだけ再現させてます。そこからサポートされていないオプションは外して、mysqlのprefixを変更、apxs2のオプションを追加させています。(yumで入れてたときのPHPはapxs2が指定されていなかったけど、なんで指定されてなかったのかよくわかんないです><)

./configure  --build=i386-redhat-linux-gnu --host=i386-redhat-linux-gnu --target=i386-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-libdir=lib --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-debug --with-pic --disable-rpath --with-pear=/usr/share/pear --with-bz2 --with-curl --with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --without-gdbm --with-gettext --with-gmp --with-iconv --with-jpeg-dir=/usr --with-openssl --with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-exif --enable-ftp --enable-magic-quotes --enable-sockets --enable-sysvsem --enable-sysvshm --enable-sysvmsg  --enable-wddx --with-kerberos --enable-ucd-snmp-hack --with-unixODBC=shared,/usr --enable-shmop --enable-calendar --without-mime-magic --without-sqlite --with-libxml-dir=/usr --enable-force-cgi-redirect --enable-pcntl --with-imap=shared --with-imap-ssl --enable-mbstring=shared --enable-mbregex --with-ncurses=shared --with-gd=shared --enable-bcmath=shared --enable-dba=shared --with-db4=/usr --with-xmlrpc=shared --with-ldap=shared --with-ldap-sasl --with-mysql=/var/lib/mysql  --with-mysql-sock=/var/lib/mysql/mysql.sock --enable-dom=shared --with-pgsql=shared --with-snmp=shared,/usr --enable-soap=shared --with-xsl=shared,/usr --enable-xmlreader=shared --enable-xmlwriter=shared --enable-fastcgi --enable-pdo=shared --with-pdo-odbc=shared,unixODBC,/usr --with-pdo-pgsql=shared,/usr --with-pdo-sqlite=shared,/usr --enable-json=shared --enable-zip=shared --with-readline --enable-dbase=shared --with-pspell=shared --with-mcrypt=shared,/usr --with-mhash=shared,/usr --with-tidy=shared,/usr --with-mssql=shared,/usr --with-apxs2=/usr/sbin/apxs

その後、make, make install でPHPがインストールされます。

また、configure, makeあたりでmysql周りが原因でコケるときは次を実行してから、./configure からやりなおしたらうまくいくかもしれません。

export LDFLAGS="-L/usr/lib/mysql" 

php.ini

makeするとカレントディレクトリにphp.ini-recommendedができているので、これを/etcにコピーして必要な項目を修正します。

cp php.ini-recommended php.ini
sudo mv php.ini /etc/
(好きなように編集)

php.confの作成

make installするとhttod.conf(/etc/httpd/conf/httpd.conf)に次の1行が追加されています。

LoadModule php5_module modules/libphp5.so

ただ、できるだけhttpd.confは素のままにさせておいて追加項目は書きたくない主義なので、さっきの1行は削除してしまいます。かわりに/etc/httpd/conf.d/php.confを次の内容で作成します。

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#

LoadModule php5_module modules/libphp5.so

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

これでhttpdを再起動すると--enable-debugなPHPで再起動します。たとえば素のCakePHPなんかはこれで動作させることができます。

まとめ

なかなかconfigureを通すことができなかったり、mysqlとの連携がうまくいかなかったりしたのですがなんとかビルドすることができました。ずっとyumにお世話になっているとゼロからbuildするのもすごく苦労しますね。。。まーでもいい勉強になりました。

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/190
Listed below are links to weblogs that reference
yumで入れたPHPをソースからコンパイルしたPHPと入れ替える from blog.katsuma.tv

Home > php > yumで入れたPHPをソースからコンパイルしたPHPと入れ替える

Search
Feeds

Return to page top