最近要用PHP作一些项目,所有首先需要安装配置LAMP环境,手动安装比较繁琐,但还是成功安装了,现在根据手动安装的过程书写一个自动安装LAMP的shell脚本,已在虚拟机中测试成功.

自动安装LAMP的脚本文件列表如下:
pkgs/ :用于存放软件包的目录
conf/ :用于存放配置文件的目录
    conf/auto_lamp.conf:主要的配置文件,包括配置安装到的目录,mysql用户名等
    conf/extraconf.conf:包含每个安装的软件包的configure配置选项的配置文件
    conf/pkgs.conf:软件包版本配置文件
auto_lamp.sh:主要的脚本文件

(1).auto_lamp.sh内容:
#! /bin/bash
#
#

export curdir=$(pwd)
export confdir=${curdir}/conf
export pkgsdir=${curdir}/pkgs
export libdir=${curdir}/lib
export logfile=${curdir}/log.autolamp
export PATH=${PREFIX}/autoconf/bin:$PATH
#引入配置文件
for everyconf in $(ls ${confdir}/*.conf);do
        . $everyconf
done

if [ ! -e $BUILDDIR ];then
        mkdir $BUILDDIR
else
        if [ ! -d $BUILDDIR ];then
                export BUILDDIR=${BUILDDIR}.$$
                mkdir $BUILDDIR
        fi
fi


#函数定义

#解包函数
untar()
{
local pkg="$1"
local where="$2"
tar xvf $pkg -C $where
}

#软件包安装函数
zlib_install()
{
        untar ${pkgsdir}/$ZLIB $BUILDDIR
        cd ${BUILDDIR}/$ZLIB_PKG
        ./configure ${ZLIB_EXTRA_CONF}
        make && make install
        if [ $? == 0 ];then
                echo -e "成功安装ZLIB\n\n">>$logfile
        else
                echo -e "安装ZLIB失败\n\n" >> $logfile
        fi     
        rm -rf ${BUILDDIR}/${ZLIB_PKG}
}

libjpeg_install()
{
        untar ${pkgsdir}/$LIBJPEG $BUILDDIR
        cd ${BUILDDIR}/$LIBJPEG_PKG
./configure ${LIBJPEG_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装libjpeg\n\n">>$logfile
        else   
                echo -e "安装libjpeg失败\n\n" >> $logfile
        fi     
        rm -rf ${BUILDDIR}/${LIBJPEG_PKG}
}      

freetype_install()
{
        untar ${pkgsdir}/$FREETYPE $BUILDDIR
        cd ${BUILDDIR}/$FREETYPE_PKG
        ./configure ${FREETYPE_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装freetype\n\n">>$logfile
        else   
                echo -e "安装freetype失败\n\n" >> $logfile
        fi     
        rm -rf ${BUILDDIR}/${FREETYPE_PKG}
}

libpng_install()
{
        untar ${pkgsdir}/${LIBPNG} $BUILDDIR
        cd ${BUILDDIR}/$LIBPNG_PKG
        ./configure ${LIBPNG_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装libpng\n\n">>$logfile
        else   
                echo -e "安装libpng失败\n\n" >> $logfile
        fi     
        rm -rf ${BUILDDIR}/${LIBPNG_PKG}

}

expat_install()
{
        untar ${pkgsdir}/${EXPAT} $BUILDDIR
        cd ${BUILDDIR}/$EXPAT_PKG
        ./configure ${EXPAT_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装expat\n\n">>$logfile
        else
                echo -e "安装expat失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${EXPAT_PKG}

}

libiconv_install()
{
        untar ${pkgsdir}/${LIBICONV} $BUILDDIR
        cd ${BUILDDIR}/$LIBICONV_PKG
        ./configure ${LIBICONV_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装libiconv\n\n">>$logfile
        else
                echo -e "安装libiconv失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${LIBICONV_PKG}

}

autoconf_install()
{
        untar ${pkgsdir}/${AUTOCONF} $BUILDDIR
        cd ${BUILDDIR}/$AUTOCONF_PKG
        ./configure ${AUTOCONF_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装autoconf\n\n">>$logfile
        else
                echo -e "安装autoconf失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${AUTOCONF_PKG}

}

gettext_install()
{        untar ${pkgsdir}/${GETTEXT} $BUILDDIR
        cd ${BUILDDIR}/${GETTEXT_PKG}
        ./configure ${GETTEXT_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装gettext\n\n">>$logfile
        else
                echo -e "安装gettext失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${GETTEXT_PKG}
        echo "${PREFIX}/gettext/lib">>/etc/ld.so.conf
        ldconfig
}

gd_install()
{
        untar ${pkgsdir}/${GD} $BUILDDIR
        cd ${BUILDDIR}/$GD_PKG
        ./configure ${GD_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装gd\n\n">>$logfile
        else
                echo -e "安装gd失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${GD_PKG}
}

libxml_install()
{
        untar ${pkgsdir}/${LIBXML} $BUILDDIR
        cd ${BUILDDIR}/${LIBXML_PKG}
        ./configure ${LIBXML_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装libxml\n\n">>$logfile
        else
                echo -e "安装libxml失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${LIBXML_PKG}

}

libmcrypt_install()
{
        untar ${pkgsdir}/${LIBMCRYPT} $BUILDDIR
        cd ${BUILDDIR}/${LIBMCRYPT_PKG}
        ./configure ${LIBMCRYPT_EXTRA_CONF} && make && make install
         if [ $? == 0 ];then
                echo -e "成功安装libmcrypt\n\n">>$logfile
        else
                echo -e "安装libmcrypt失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${LIBMCRYPT_PKG}

}

cronolog_install()
{
        untar ${pkgsdir}/${CRONOLOG} $BUILDDIR
        cd ${BUILDDIR}/${CRONOLOG_PKG}
        ./configure ${CRONOLOG_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装cronolog\n\n">>$logfile
        else
                echo -e "安装cronolog失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${CRONOLOG_PKG}
}

openssl_install()
{
        untar ${pkgsdir}/${OPENSSL} $BUILDDIR
        cd ${BUILDDIR}/${OPENSSL_PKG}
        ./config ${OPENSSL_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装openssl\n\n">>$logfile
        else
                echo -e "安装openssl失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${OPENSSL_PKG}
        echo "${PREFIX}/openssl/lib">>/etc/ld.so.conf
        ldconfig

}

openssh_install()
{
        untar ${pkgsdir}/${OPENSSH} $BUILDDIR
        cd ${BUILDDIR}/${OPENSSH_PKG}
        ./configure ${OPENSSH_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装openssh\n\n">>$logfile
        else
                echo -e "安装openssh失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${OPENSSH_PKG}

}

pcre_install()
{
        untar ${pkgsdir}/${PCRE} $BUILDDIR
        cd ${BUILDDIR}/${PCRE_PKG}
        ./configure ${PCRE_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装pcre\n\n">>$logfile
        else
                echo -e "安装pcre失败\n\n" >> $logfile
        fi
        rm -rf ${BUILDDIR}/${PCRE_PKG}

}

mysql_install()
{
        untar ${pkgsdir}/${MYSQL} $BUILDDIR
        cd ${BUILDDIR}/${MYSQL_PKG}
        groupadd ${MYSQL_GROUP}
        useradd -g ${MYSQL_GROUP} -M ${MYSQL_USER}
        ./configure ${MYSQL_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装mysql\n\n">>$logfile
        else
                echo -e "安装mysql失败\n\n" >> $logfile
        fi
        cp support-files/my-medium.cnf /etc/my.cnf
        cp -v ${PREFIX}/mysql/share/mysql/mysql.server /etc/init.d/mysqld
        chmod +x /etc/init.d/mysqld
        cd ${PREFIX}/mysql
        bin/mysql_install_db --user=${MYSQL_USER}
        chown -R root  .
        chown -R ${MYSQL_USER} var
        chgrp -R ${MYSQL_GROUP} .
        bin/mysqld_safe --user=${MYSQL_USER} &
        bin/mysqladmin -u root password "$MYSQL_PASSWORD"
        rm -rf ${BUILDDIR}/${MYSQL_PKG}
}

apache_install()
{
        untar ${pkgsdir}/${APACHE} $BUILDDIR
        cd ${BUILDDIR}/${APACHE_PKG}
        ./configure ${APACHE_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装apache\n\n">>$logfile
        else
                echo -e "安装apachel失败\n\n" >> $logfile
        fi
        cp -v ${PREFIX}/apache/bin/apachectl /etc/init.d/httpd
        chmod -R 755 ${PREFIX}/apache/htdocs
        rm -rf ${BUILDDIR}/${APACHE_PKG}
}

php_install()
{
        untar ${pkgsdir}/${PHP} $BUILDDIR
        cd ${BUILDDIR}/${PHP_PKG}
        ./buildconf --force
        ./configure ${PHP_EXTRA_CONF} && make && make install
        if [ $? == 0 ];then
                echo -e "成功安装php\n\n">>$logfile
        else
                echo -e "安装php失败\n\n" >> $logfile
        fi
        mkdir -p ${PREFIX}/php/etc
        cp php.ini-development ${PREFIX}/php/etc/php.ini
        echo "Addtype application/x-httpd-php .php .phtml" >> ${PREFIX}/apache/conf/httpd.conf
         rm -rf ${BUILDDIR}/${PHP_PKG}
}

set_selinux()
{
local choice=${1:-allow}
case $choice in
shutdown)
        #关闭SELINUX
        sed -i -e "s@SELINUX=enforcing@SELINUX=disabled@" /etc/selinux/config
        ;;
*)
        setenforce 0
        chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t ${PREFIX}/apache/modules/libphp5.so
        setenforce 1
        ;;
esac
}

conf_apache()
{
#配置 httpd.conf
sed -i -e "s|ServerAdmin you@example.com|ServerAdmin $(hostname)|" ${PREFIX}/apache/conf/httpd.conf
sed -i -e "s|ServerName www.example.com:80|ServerName localhost:80|" ${PREFIX}/apache/conf/httpd.conf
sed -i -e "s|DirectoryIndex|DirectoryIndex index.php|" ${PREFIX}/apache/conf/httpd.conf
service httpd restart
}

test_success()
{
#测试
service httpd start
service mysqld start
echo "<?php phpinfo(); ?>" >${PREFIX}/apache/htdocs/index.php
chmod 755 ${PREFIX}/apache/htdocs/index.php
}

phpmyadmin_install()
{
        untar ${pkgsdir}/$PHPMYADMIN ${PREFIX}
        mv ${PREFIX}/${PHPMYADMIN_PKG} ${PREFIX}/apache/htdocs/phpmyadmin
        cd ${PREFIX}/apache/htdocs/phpmyadmin
        mv config.sample.inc.php config.inc.php
}

zlib_install && libjpeg_install && freetype_install && libpng_install && expat_install && libiconv_install && autoconf_install && gd_install && libxml_install && libmcrypt_install && cronolog_install && openssl_install && openssh_install && pcre_install && mysql_install && apache_install && php_install && conf_apache

if [ $Whether_Start_Selinux == 'y' ];then
       set_selinux $SET_SELINUX
fi

test_success
phpmyadmin_install