php 5.3.10 + nginx1.0.12 + PostgreSQL 9.1.2 源码编译自动化部署第一版
http://blog.youkuaiyun.com/qzier_go/article/details/7256560
这次带来php 5.4.10和PostgreSQL 9.1.3的更新,自启动和规范化版本控制
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# Check if user is root
if [ $(id -u) != "0" ]; then
echo "Error: You must be root to run this script, please use root to install lnpp"
exit 1
fi
clear
echo "========================================================================="
echo "lnpp install shell script for CentOS/RadHat Written by Qzi"
echo "creatred in 2012/2/13"
echo "last modified in 2012/3/3"
echo "========================================================================="
echo "========================================================================="
echo "PHP Version: 5.4.10"
echo "========================================================================="
echo "========================================================================="
echo "PostgreSQL Version: 9.1.3"
echo "========================================================================="
echo "========================================================================="
echo "nginx Version: 1.0.12"
echo "========================================================================="
# prepare for future
PHP_VERSION=php-5.4.0
PG_VERSION=postgresql-9.1.3
NGINX_VERSION=nginx-1.0.12
LNPP_SRC_ROOT=$(pwd)
LNPP_ROOT=/tmp/lnpp/lnpp-0.04
PG_ROOT=$LNPP_ROOT/pgsql/$PG_VERSION
PHP_ROOT=$LNPP_ROOT/php/$PHP_VERSION
PHP_EXTRA_LIBS=$PHP_ROOT/3rdlibs
NGINX_ROOT=$LNPP_ROOT/nginx/$NGINX_VERSION
if [ -d $LNPP_ROOT ]; then
echo "lnpp will install in $LNPP_ROOT"
else
echo "lnpp is creating the directory $LNPP_ROOT"
mkdir -p $LNPP_ROOT
fi
for filename in $(rpm -aq|grep php)
do
yum erase $filename
#yum erase $filename -y
done
echo "========================================================================="
echo "install dependences"
echo "========================================================================="
for packages in patch make gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip autoconf yum;
do yum -y install $packages; done
echo "============================check files=================================="
if [ -s $PHP_VERSION.tar.bz ]; then
echo "$PHP_VERSION.tar.gz [found]"
else
echo "Error: $PHP_VERSION.tar.gz not found!!!download now......"
wget -c http://cn2.php.net/get/$PHP_VERSION.tar.gz/from/cn.php.net/mirror
fi
if [ -s libiconv-1.14.tar.gz ]; then
echo "libiconv-1.14.tar.gz [found]"
else
echo "Error: libiconv-1.14.tar.gz not found!!!download now......"
wget -c http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
fi
if [ -s pcre-8.21.tar.bz2 ]; then
echo "pcre-8.21.tar.bz2 [found]"
else
echo "Error: pcre-8.21.tar.bz2 not found!!!download now......"
wget http://downloads.sourceforge.net/project/pcre/pcre/8.21/pcre-8.21.tar.bz2
fi
if [ -s $PG_VERSION.tar.gz ]; then
echo "$PG_VERSION.tar.gz [found]"
else
echo "Error: $PG_VERSION.tar.gz not found!!!download now......"
wget http://ftp.postgresql.org/pub/source/v9.1.3/$PG_VERSION.tar.gz # !!!!!!!!!!!!!!!!!!!!!!!!
fi
if [ -s $NGINX_VERSION.tar.gz ]; then
echo "$NGINX_VERSION.tar.gz [found]"
else
echo "Error: $NGINX_VERSION.tar.gz not found!!!download now......"
wget http://nginx.org/download/$NGINX_VERSION.tar.gz
fi
echo "============================check complete=================================="
echo "============================postgresql install=================================="
mkdir -p $PG_ROOT
tar -zxvf $PG_VERSION.tar.gz
if [ $(id -nu) == "postgres" ]; then
echo "user postgres is not found ... "
else
echo "creating the user called 'postgres'"
su - -c "useradd -M postgres"
fi
chown -R postgres:postgres $PG_VERSION
mkdir -p $PG_ROOT/etc
cd $PG_VERSION
make clean
./configure --prefix=$PG_ROOT --sysconfdir=$PG_ROOT/etc
make
make install
mkdir -p $PG_ROOT/data
mkdir -p $PG_ROOT/logs
touch $PG_ROOT/logs/pgsql.log
chown postgres:postgres $PG_ROOT/data
su postgres -c "$PG_ROOT/bin/initdb -D $PG_ROOT/data && exit"
echo "============================postgresql complete=================================="
echo "============================php install=================================="
cd $LNPP_SRC_ROOT
mkdir -p $PHP_EXTRA_LIBS
tar -zxf libiconv-1.14.tar.gz2
cd libiconv-1.14
make clean
./configure --prefix=$PHP_EXTRA_LIBS/libiconv-1.14/
make
make install
ls $PHP_EXTRA_LIBS/libiconv-1.14/
cd ../
tar -jxf pcre-8.21.tar.bz2
cd pcre-8.21
make clean
./configure --prefix=$PHP_EXTRA_LIBS/pcre-8.21/
make
make install
cd ../
mkdir -p $PHP_ROOT
tar -zxvf $PHP_VERSION.tar.gz
cd $PHP_VERSION
make clean
./configure --prefix=$PHP_ROOT --with-config-file-path=$PHP_ROOT/etc/ --with-iconv-dir=$PHP_EXTRA_LIBS/libiconv-1.14 --with-pcre-dir=$PHP_EXTRA_LIBS/pcre-8.21 --with-pgsql=$PG_ROOT --enable-fpm --with-pear
make ZEND_EXTRA_LIBS = -liconv
make install
cp ./php.ini-production $PHP_ROOT/etc/php.ini
cp $PHP_ROOT/etc/php-fpm.conf.default $PHP_ROOT/etc/php-fpm.conf
cd ../
echo "============================php complete================================="
echo "============================nginx install================================="
mkdir -p $NGINX_ROOT
tar -zxvf $NGINX_VERSION.tar.gz
cd $NGINX_VERSION
if [ $(id -nu) == "nginx" ]; then
echo "user nginx is not found ... "
else
echo "creating the user called 'nginx'"
su - -c "useradd -M nginx"
fi
make clean
./configure --user=nginx --group=nginx --prefix=$NGINX_ROOT --with-http_ssl_module --with-pcre=$LNPP_SRC_ROOT/pcre-8.21
make
make install
cd ../
echo "============================nginx complete================================="
echo "============================starting lnpp================================="
PHP=$PHP_ROOT/sbin/php-fpm
NGINX=$NGINX_ROOT/sbin/nginx
PGDAEMON=$PG_ROOT/bin/postmaster
PGCTL=$PG_ROOT/bin/pg_ctl
PGUSER=postgres
PGDATA=$PG_ROOT/data
PGLOG=$PG_ROOT/logs/pgsql.log
stop()
{
echo "-------------stop php----------------"
ps -e | grep $(basename $PHP) | {
while read pid tty time cmd;
do
echo "killing $pid ==> $cmd"
kill -9 $pid
done
}
echo "-------------stop nginx--------------"
ps -e | grep $(basename $NGINX) | {
while read pid tty time cmd;
do
echo "killing $pid ==> $cmd"
kill -9 $pid
done
}
# killproc $NGINX -QUIT
echo "-------------stop pgsql--------------"
# su $PGUSER -c "$PGCTL stop -D '$PGDATA' -m fast"
ps -e | grep $(basename $PGDAEMON) | {
while read pid tty time cmd;
do
echo "killing $pid ==> $cmd"
kill -9 $pid
done
}
echo "-------------stop pgsql--------------"
}
start()
{
echo "-------------start php---------------"
$PHP_ROOT/sbin/php-fpm
echo "-------------start success---------------"
echo "-------------start nginx-------------"
$NGINX_ROOT/sbin/nginx
echo "-------------start success---------------"
echo "-------------start pgsql---------------"
su $PGUSER -c "$PGDAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
echo "-------------start success---------------"
}
stop
start
echo "============================lnpp started================================="
exit 0
需要注意的点:
1.nginx.conf需要进行配置,参考如下(phpinfo.php在nginx/html目录下)
http://blog.youkuaiyun.com/qzier_go/article/details/7252887
2.php-fpm的log和pid需要进行配置,在etc/php-fpm.conf
lnpp-0.04.sh 在这里
http://code.google.com/p/lnpp/downloads/detail?name=lnpp-0.04.sh&can=2&q=
单独测试不够充分,如有修正建议,请Emailto:hotseason007@gmail dot com
建立了一个php群,欢迎一起学习(QQ群号:213572677)