PHP
はじめに
私はOSX上にphp4をソースコードからインストールしたのでその時のメモを此処に記す。ソースコードからコンパイルして、インストールするメリットは、configureコマンドによりどこにアプリケーションをインストールしているか理解できるという点があります。インストール中に失敗しても、対象のディレクトリを全削除する事で/usr/localディレクトリのどこまで汚染されたかを回避できるという利点があります。また最近のアプリケーションのモジュール化(コンポーネント化)を考えるとyum,apt,finkなどのインストールツールを利用する方がすぐ開発できるため容易である事は重々承知していますが、経験的にトラブルシューティングに強くなれるため、いまだにソースコードからのコンパイルを行っています。その際に利用したシェルスクリプトファイルを貼り付けています。各自の環境では修正しなければ動作しないと思いますが参考になると思います。
Apache2のインストール
私の場合、Apache2はSubversionを利用するために修正しているので、configure部分を--enable-soのみオプションと指定すれば、php4用の設定は問題ないと思います。
#!/bin/sh
# $Id$
# tab=4 code=euc
# author satoshiokita <satoshiokita@gmail.com>
# version : $Rev$
# date : $Date$
# invoke apache2.0.50 over Install script
# *support 2.0.55 on Mac OSX 10.3.9 Panther.
# Warn:
# Panther cannot compile export.c file in server directory.
# so you have to remove comments of '#endif' at line 115? in export.c
# if you will above complate, install success.
BASE_DIR=/opt/app/svn
APACHE=httpd-2.0.55.tar.gz
APACHE_SITE="http://sunsite.tus.ac.jp/pub/apache/httpd/"
download () {
if [ ! -f ${APACHE} ]
then
wget ${APACHE_SITE}${APACHE}
fi
TMP_NAME=`echo ${APACHE} | sed 's/.tar.gz//g'`
if [ ! -d "${TMP_NAME}" ]
then
tar -zxvf ${APACHE}
fi
}
download
cd `echo ${APACHE} | sed 's/.tar.gz//g'`
pwd
export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.2/lib:
./configure --enable-dav --enable-so --enable-maintainer-mode --enable-proxy=shared \
--enable-proxy-connect=shared --with-berkeley-db=/usr/local/BerkeleyDB.4.2 \
--with-dbm=db42 --enable-deflate --enable-headers
make_install () {
cd `echo ${BASE_DIR}/${APACHE} | sed 's/.tar.gz//g'`
pwd
make
TYP=`uname -s`
if [ "${TYP}" = 'Darwin' ]
then
sudo 'make install'
else
su -c 'make install'
fi
}
make_install
各種ライブラリインストールスクリプト
ユーザのホームディレクトリにlibディレクトリを作成して、それ以下にライブラリをインストールスクリプトです。ホームディレクトリにインストールする利点は、Unixがマルチユーザを想定しているため、自分にあったライブラリをroot権限なしにインストールできます。C言語のコンパイルの際には、自分のディレクトリを-L,-Iオプションなどで指定する必要がありますが、これにより他のディレクトリや/usrディレクトリを汚染する事なしに環境構築の学習が行えます。
#!/sw/bin/bash
# 自分のホームディレクトリにlibpngをインストールするシェルスクリプト
#
# pngのライブラリはzlibが必要になるのでzlibを最初にコンパイルしてその後libpngを
# インストールする。画像フォーマットであるpngは、インターネットで使われるのを想定
# しているのでファイル圧縮している。圧縮形式には、zlibで利用できる形式を採用している
# のでzlibが必要になる。
HOME_LIB_DIR="lib"
if [ ! -d ${HOME_LIB_DIR} ]; then
mkdir ${HOME_LIB_DIR}
fi
cd ${HOME_LIB_DIR}
# zlib 1.2.3
# http://www.zlib.net/
#
ARC="zlib-1.2.3.tar.gz"
if [ ! -f ${ARC} ]; then
wget http://www.zlib.net/${ARC}
tar -zxvf ${ARC}
cd zlib-1.2.3
# コンパイル
./configure --prefix="${HOME}/${HOME_LIB_DIR}/zlib"
make
make test
if [ $? -eq 0 ]; then
sudo make install
echo "install script successfully."
else
echo "can not install."
fi
fi
cd ${HOME}/lib
LIB_PNG="libpng-1.2.8-config.tar.gz"
if [ ! -f ${LIB_PNG} ]; then
wget http://jaist.dl.sourceforge.net/sourceforge/libpng/${LIB_PNG}
fi
if [ ! -d "libpng-1.2.8-config" ]; then
tar -zxvf ${LIB_PNG}
mv libpng-1.2.8-config libpng-1.2.8
cd libpng-1.2.8
cp scripts/makefile.darwin makefile
./configure --prefix="${HOME}/lib/libpng"
make
sudo make install
fi
# FreeType
# 日本語対応のフォント
# gdでつかう。
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.gz
tar -zxvf freetype-2.1.10.tar.gz
cd freetype-2.1.10
./configure --prefix="${HOME}/lib/freetype"
make
sudo make install
# gd
# http://www.boutell.com/gd/
# グラフィックプログラミング用のライブラリ
# TrueTypeフォントを利用するためには、FreeTypeというフォントがインストールされている必要
# がある.Mac OSXでは、X11をインストールすればFreeTypeが/usr/X11R6にある.
# ようだが、いまいち動かなかったので、FreeTypeを後から上記のスクリプト追加でインストール
# してみた。
GD_ARC="gd-2.0.33.tar.gz"
GD_LIB=`echo $GD_ARC | sed 's/.tar.gz//g'`
echo $GD_LIB
if [ ! -f ${GD_ARC} ]; then
wget http://www.boutell.com/gd/http/${GD_ARC}
fi
if [ ! -d ${GD_LIB} ]; then
tar -zxvf ${GD_ARC}
cd $GD_LIB
pwd
# pngのヘッダーファイルを読み込ませる
export CPPFLAGS="-I${HOME}/lib/libpng/include"
./configure --prefix="${HOME}/lib/libgd" \
--with-png="${HOME}/lib/libpng" --with-freetype-dir="${HOME}/lib/freetype"
make
sudo make install
fi
PostgreSQLのインストールスクリプト
#!/sw/bin/bash
DOWNLOAD_SITE="ftp://ftp.sra.co.jp/pub/cmd/postgres/8.1.3/"
ARCHIVE="postgresql-8.1.3.tar.gz"
ARCHIVE_NAME=`echo "${ARCHIVE}" | sed 's/.tar.gz//g'`
TARGET_DIR="/opt/app/postgresql"
# download
if [ ! -f ${ARCHIVE} ];then
wget "${DOWNLOAD_SITE}${ARCHIVE}"
fi
# expact
if [ ! -d ${ARCHIVE_NAME} ]; then
tar -zxvf ${ARCHIVE}
fi
# mkdir
if [ ! -d ${TARGET_DIR} ]; then
echo "mkdir ${TARGET_DIR}"
mkdir ${TARGET_DIR}
fi
# compile
cd ${ARCHIVE_NAME}
./configure --prefix="${TARGET_DIR}"
make
sudo make install
MySQLのインストールスクリプト
#!/sw/bin/bash
#
# mysql 4.1 install shell script.
# 木 3 30 12:10:14 JST 2006
# [MySQL AB::MySQL4.1 Downloads]
# http://dev.mysql.com/downloads/mysql/4.1.html
DOWNLOAD_SITE="http://dev.mysql.com/get/Downloads/ \
MySQL-4.1/mysql-4.1.18.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/"
ARCHIVE="mysql-4.1.18.tar.gz"
ARCHIVE_NAME=`echo "${ARCHIVE}" | sed 's/.tar.gz//g'`
TARGET_DIR="/opt/app/mysql"
# download
if [ ! -f ${ARCHIVE} ]; then
wget "${DOWNLOAD_SITE}"
fi
# expact
if [ ! -d ${ARCHIVE_NAME} ]; then
tar -zxvf ${ARCHIVE}
fi
# mkdir
if [ ! -d ${TARGET_DIR} ]; then
echo "mkdir ${TARGET_DIR}"
mkdir ${TARGET_DIR}
fi
# compile
cd ${ARCHIVE_NAME}
./configure --prefix=${TARGET_DIR} --with-charset=utf8 --with-mysqld-user=${USER}
make
sudo make install
php4のインストールスクリプト
php4自体は、apache2さえあれば、プログラミングが出来るので、最小としては、--with-apxs2=/usr/local/apache2/bin/apxsのオプションを指定すればよいはずです。私の場合は、gdやpngを以前にスクリプトでインストールしたので、それらのオプションやデータベースのオプションなどを指定しています。
#!/sw/bin/bash
#
# mysql 4.1 install shell script.
# 木 3 30 12:10:14 JST 2006
# [MySQL AB::MySQL4.1 Downloads]
# http://dev.mysql.com/downloads/mysql/4.1.html
DOWNLOAD_SITE="http://jp.php.net/get/php-4.4.2.tar.gz/from/this/mirror"
ARCHIVE="php-4.4.2.tar.gz"
ARCHIVE_NAME=`echo "${ARCHIVE}" | sed 's/.tar.gz//g'`
TARGET_DIR="/opt/app/php"
# download
if [ ! -f ${ARCHIVE} ]; then
wget "${DOWNLOAD_SITE}"
fi
# expact
if [ ! -d ${ARCHIVE_NAME} ]; then
tar -zxvf ${ARCHIVE}
fi
# mkdir
if [ ! -d ${TARGET_DIR} ]; then
echo "mkdir ${TARGET_DIR}"
mkdir ${TARGET_DIR}
fi
# compile
cd ${ARCHIVE_NAME}
./configure \
--prefix=${TARGET_DIR} \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/opt/app/mysql \
--with-pgsql=/opt/app/postgres \
--enable-mbstring \
--enable-mbregex \
--enable-gd-native-ttf \
--with-gd=/Users/okitasatoshi/lib/libgd \
--with-zlib=/Users/okitasatoshi/lib/zlib \
--with-png-dir=/Users/okitasatoshi/lib/libpng
make
sudo make install
make install後のメッセージ
このメッセージは、いろいろと重要なことが書かれているので保存しても良いかと思います。ここでlibphp4.soが指定したApache2の場所にあるか確認してください。もし存在しない場合は正常にインストールされていません。
Installing PHP SAPI module: apache2handler
/usr/local/apache2/build/instdso.sh
SH_LIBTOOL='/usr/local/apache2/build/libtool' libs/libphp4.so /usr/local/apache2/modules
/usr/local/apache2/build/libtool --mode=install cp libs/libphp4.so /usr/local/apache2/modules/
cp libs/libphp4.so /usr/local/apache2/modules/libphp4.so
Warning! dlname not found in /usr/local/apache2/modules/libphp4.so.
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache2/modules/libphp4.so
[activating module `php4' in /usr/local/apache2/conf/httpd.conf]
Installing PHP CLI binary: /opt/app/php/bin/
Installing PHP CLI man page: /opt/app/php/man/man1/
Installing PEAR environment: /opt/app/php/lib/php/
[PEAR] Archive_Tar: bad md5sum for file /opt/app/php/lib/php/Archive/Tar.php
[PEAR] Console_Getopt: bad md5sum for file /opt/app/php/lib/php/Console/Getopt.php
[PEAR] HTML_Template_IT: bad md5sum for file /opt/app/php/lib/php/HTML/Template/IT.php
[PEAR] Net_UserAgent_Detect- installed: 2.0.1
warning: pear/PEAR requires package "pear/Archive_Tar" (recommended version 1.3.1)
warning: pear/PEAR requires package "pear/Console_Getopt" (recommended version 1.2)
pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
[PEAR] PEAR - installed: 1.4.6
Wrote PEAR system config file at: /opt/app/php/etc/pear.conf
You may want to add: /opt/app/php/lib/php to your php.ini include_path
Installing build environment: /opt/app/php/lib/php/build/
Installing header files: /opt/app/php/include/php/
Installing helper programs: /opt/app/php/bin/
program: phpize
program: php-config
Installing man pages: /opt/app/php/man/man1/
page: phpize.1
page: php-config.1
php.iniの配置
You may want to add: /opt/app/php/lib/php to your php.ini include_pathという一文が先ほどのメッセージにあるので、php.iniを/opt/app/php/lib/php.iniとして配置します。
-bash-3.00$ find /opt/app/php-4.4.2 -name 'php.ini*'
/opt/app/php-4.4.2/php.ini-dist
/opt/app/php-4.4.2/php.ini-recommended
-bash-3.00$ cp -p /opt/app/php-4.4.2/php.ini-dist /opt/app/php/lib/php.ini
cp: /opt/app/php/lib/php.ini: Permission denied
-bash-3.00$ sudo cp -p /opt/app/php-4.4.2/php.ini-dist /opt/app/php/lib/php.ini
Password:
mbstring
php.ini設定ファイルの1200行付近を修正し、マルチバイト文字列関数の指定をutf-8にする。文字化け関連の設定はこの部分の設定を調べる事で解決できるケースがある。
[mbstring]
; language for internal character representation.
mbstring.language = Japanese
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = utf-8
Apache2のhttp.conf設定ファイルの修正
以下のような記述がhttp.confにあることを確認します。なければ追加します。AddModuleなどは起動に失敗するのでコメントアウトしましょう。
LoadModule php4_module modules/libphp4.so
Apache2再起動
80番ポートを利用するので、root権限がないと起動に失敗します。http.confのポート番号設定を変更すれば、ホームユーザでも起動が可能です。
-bash-3.00$ /usr/local/apache2/bin/apachectl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address [::]:80
no listening sockets available, shutting down
Unable to open logs
-bash-3.00$ sudo /usr/local/apache2/bin/apachectl restart
動作確認
ルートディレクトリに拡張子phpとして、index.phpなど適当なファイル名でphpinfo()関数を記述したファイルを保存します。ブラウザで正常にアクセスできればインストール終了です。
<? phpinfo() ?>
