TOP / 環境構築 / PHP

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() ?>


イバラキングへのリンク Get Firefox Valid XHTML 1.1 Apple Darwinへのリンク