当前位置: > shell编程 >

Shell脚本一键安装LAMP环境

时间:2014-04-28 23:32来源:linux.it.net.cn 作者:IT网

LAMP指的Linux(操作系统)、Apache(HTTP 服务器),MySQL(数据库软件)和PHP构建的web服务器。该网站架构是目前国际流行和通用的Web架构,LAMP跨平台、高性能等优势,是很多企业和公司搭建WEB服务的首选平台。

  1)系统环境介绍
    Centos 5.8 64位
    Apache:httpd-2.4.4.tar.gz
    PHP:   php-5.4.17.tar.gz
    Mysql: mysql-5.6.12.tar.gz

2)安装脚本

 

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
exportPATH
#INFO函数定义输出字体颜色,echo -e 表示保持字符串的特殊含义,$1表示字体颜色编号,$2表示等待程序执行时间,$3表示echo输出内容。
functionINFO()
{
echo-e "\e[$1;49;1m: $3 \033[39;49;0m"
sleep"$2"
echo""
}
#非root用户不能执行该脚本
if[ "$UID"!= 0 ];
then
echo" "
INFO 35 "0""Must be root ro run this script."
exit1
fi
#USAGE函数定义脚本用法,可反复调用,basename其实就是脚本名,\n表示换行。
functionUSAGE()
{
INFO 35 "0.1""Please see the script of the usage:"
basename=$(basename"$0")
INFO \
36 "0"\
"$(echo -e "Usage: \n\n./$basename(apache|mysql|php) install\n./$basenameapache (start|stop|restart) \n./$basenamemysql (start|stop|restart)\n")"
}
#YUM_INSTALL函数安装依赖包,可反复调用,$@表示所有参数都分别被双引号引住"$1","$2",而$*表示所有这些参数都被双引号引住"$1$2"
functionYUM_INSTALL()
{
fora in$@; do
INFO 32 1 "Install depend on the [ $a ]"
yum -y install$a || exit1
if[ $a = "libXpm-devel"]; then
ln-s /usr/lib/x86_64-linux-gnu/libXpm.so /usr/lib/libXpm.so
#elif [ $a = "libsasl2-dev" ]; then
#     cp /usr/lib/x86_64-linux-gnu/libldap* /usr/lib/
fi
done
}
#INSTALL函数定义安装程序,可一反复调用,安装apache程序的时候要先安装3个依赖包,在安装mysql的时候要用cmake编译。$1表示要安装的程序,$2表示yum安装对应的依赖包,$3表示程序解压后的目录,$4表示程序源码包。
functionINSTALL()
{
YUM_INSTALL "$2"&& cd$SOURCE_PATH
[ -d $3 ] && rm-r $3; INFO 31 4 "Unpack the $4 installation package......"
tarzxvf $4; cd$3 ; pwd; INFO 32 4 "Configure the $1......"
if[ $1 = apache ];
then
cp-rf ../apr-1.4.8 srclib/apr
cp-rf ../apr-util-1.5.2 srclib/apr-util
./configure$5 || exit1
elif[ $1 = mysql ];
then
cmake $5 || exit1
elif[ $1 = openssl ];
then
./config$5 || exit1
elif[ $1 = libpng ];
then
cpscripts/makefile.linux makefile
elif[ $1 = jpegsrc.v6b.tar.gz ];
then
cp/usr/share/libtool/config.guess  ./
cp/usr/share/libtool/config.sub ./
./configure$5 || exit1
mkdir-p  /usr/local/env/jpeg/bin
mkdir-p  /usr/local/env/jpeg/lib
mkdir-p  /usr/local/env/jpeg/include
mkdir-p /usr/local/env/jpeg/man/man1
else
./configure$5 || exit1
fi
INFO 36 3 "Compile $1......"
make|| exit1 && INFO 34 4 "Install $1......"; makeinstall&& INFO 33 4 "$1 installation is successful......"
if[ $1 = mysql ];
then
echo$INSTALL_PATH/mysql/lib/mysql>> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = libiconv ];
then
echo"/usr/local/env/libiconv/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = libxml2 ];
then
echo"/usr/local/env/libxml2/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = libmcrypt ];
then
echo"/usr/local/env/libmcrypt/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = mhash ];
then
echo"/usr/local/lib">> /etc/ld.so.conf
echo"/usr/local/lib64">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = gettext ];
then
echo"/usr/local/env/gettext/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = gd ];
then
sed-i '27 a void (*data);'/usr/local/env/gd/include/gd_io.h
echo"/usr/local/env/gd/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = freetype ];
then
echo"/usr/local/env/freetype/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if[ $1 = jpegsrc.v6b.tar.gz ];
then
echo"/usr/local/env/jpeg/lib">> /etc/ld.so.conf
/sbin/ldconfig&& INFO 33 4 "Add jpeg library file to ld.so.conf......"
fi
}
#SERVICE函数定义程序启动,关闭,重启。
functionSERVICE()
{
if[ $1 = apache -a $2 = start ]; then
$INSTALL_PATH/$1/bin/apachectl-k start && \
INFO 33 "2.5""Apache startup success......"
exit
elif[ $1 = apache -a $2 = stop ]; then
$INSTALL_PATH/$1/bin/apachectl-k stop && \
INFO 31 "2.5""Apache has stopped......"
exit
elif[ $1 = apache -a $2 = restart ]; then
$INSTALL_PATH/$1/bin/apachectl-k stop ; sleep2
INFO 31 "2.5""Apache has stopped......"
$INSTALL_PATH/$1/bin/apachectl-k start && \
INFO 34 "2.5""Apache has restarted......"
exit
elif[ $1 = mysql -a $2 = start ]; then
/bin/bash$INSTALL_PATH/$1/bin/mysqld_safe--defaults-file=$INSTALL_PATH/$1/my.cnf 2>&1 > /dev/null&
INFO 33 "2.5""Mysql startup success......"
echo-e "$(netstat -ntpl|grep "/:::3306")"
exit
elif[ $1 = mysql -a $2 = stop ]; then
kill$(netstat-ntpl|awk'/:::3306/{print $NF}'|awk-F '/''{print $1}') && \
INFO 31 "2.5""Mysql has stopped......"
exit
elif[ $1 = mysql -a $2 = restart ]; then
kill$(netstat-ntpl|awk'/:::3306/{print $NF}'|awk-F '/''{print $1}') && \
INFO 31 "3""Mysql has stopped......"
/bin/bash$INSTALL_PATH/$1/bin/mysqld_safe--defaults-file=$INSTALL_PATH/$1/my.cnf 2>&1 > /dev/null&
INFO 34 "2.5""Mysql has restarted......"
exit
fi
}
#CONFIG_MYSQL函数用来定义mysql的配置。
functionCONFIG_MYSQL()
{
INFO 32 3 "Configure the mysql......"
groupsmysql || groupadd mysql && idmysql || useradd-g mysql mysql
cd$INSTALL_PATH/mysql; pwd
./scripts/mysql_install_db\
--user=mysql \
--basedir=$INSTALL_PATH/mysql/\
--datadir=$INSTALL_PATH/mysql/data/\
--defaults-file=$INSTALL_PATH/mysql/my.cnf
echo""; sleep3
cp$(dirname$SOURCE_PATH)/conf/my.cnf ./
INFO 35 2 "Mysql configuration is complete......"
}
#CONFIG_HTTPD函数用来配置apache。
functionCONFIG_HTTPD()
{
INFO 32 3 "Configure the apache......"
echo-e "<?php\nphpinfo();\n?>"> $INSTALL_PATH/apache/htdocs/phpinfo.php
sed-i 's/^\ \ \ \ AddType application\/x-gzip .gz .tgz$/&\n\ \ \ \ AddType application\/x-httpd-php .php/'\
$INSTALL_PATH/apache/conf/httpd.conf
sed-i 's/^#ServerName www.example.com:80$/&\nServerName 127.0.0.1:80/'$INSTALL_PATH/apache/conf/httpd.conf
INFO 35 2 "Apache configuration is complete......"
}
#CONFIG_PHP函数用来配置php。
functionCONFIG_PHP()
{
INFO 32 3 "Configure the php......"
cp$SOURCE_PATH/$1/php.ini-development $INSTALL_PATH/php5/etc/php.ini
INFO 35 2 "Php configuration is complete......"
}
#INSTALL_BRANCH函数定义程序安装,${TAR_NAME[@]}是shell脚本中数组写法,即取全部元素,即TAR_NAME里面的所有包,SERVER_NAME表示包的名称,COMPILE_DIR表示包名+版本后,即解压后的目录名。
functionINSTALL_BRANCH()
{
fori in${TAR_NAME[@]}; do
SERVER_NAME=$(echo$i|awk-F "-[0-9]"'{print $1}')
COMPILE_DIR=$(echo$i|awk-F ".tar.gz"'{print $1}')
if[ $1 = $SERVER_NAME -a $1 = apr ]; then
INSTALL apr " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/apr"
elif[ $1 = $SERVER_NAME -a $1 = apr-util ];then
INSTALL apr-util " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/apr-util --with-apr=/usr/local/env/apr"
elif[ $1 = $SERVER_NAME -a $1 = pcre ]; then
INSTALL pcre " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/pcre"
elif[ $1 = $SERVER_NAME -a $1 = httpd ]; then
INSTALL apache "$HTTP_YUM""$COMPILE_DIR""$i""$HTTP_PARAMETERS"
CONFIG_HTTPD
elif[ $1 = $SERVER_NAME -a $1 = mysql ]; then
INSTALL mysql "$MYSQL_YUM""$COMPILE_DIR""$i""$MYSQL_PARAMETERS"
CONFIG_MYSQL
elif[ $1 = $SERVER_NAME -a $1 = libiconv ]; then
INSTALL libiconv " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/libiconv"
elif[ $1 = $SERVER_NAME -a $1 = libxml2 ]; then
INSTALL libxml2 " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/libxml2 --with-iconv=/usr/local/env/libiconv"
elif[ $1 = $SERVER_NAME -a $1 = curl ]; then
INSTALL curl " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/curl --enable-utf8"
elif[ $1 = $SERVER_NAME -a $1 = libmcrypt ]; then
INSTALL libmcrypt " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/libmcrypt"
elif[ $1 = $SERVER_NAME -a $1 = mhash ]; then
INSTALL mhash " ""$COMPILE_DIR""$i"" "
elif[ $1 = $SERVER_NAME -a $1 = mcrypt ]; then
INSTALL mcrypt " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/mcrypt\
--with-libmcrypt-prefix=/usr/local/env/libmcrypt\
--with-libiconv-prefix=/usr/local/env/libiconv"
elif[ $1 = $SERVER_NAME -a $1 = gettext ]; then
INSTALL gettext " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/gettext\
--with-libiconv-prefix=/usr/local/env/libiconv\
--with-libxml2-prefix=/usr/local/env/libxml2"
elif[ $1 = $SERVER_NAME -a $1 = freetype ]; then
INSTALL freetype " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/freetype"
elif[ $1 = $SERVER_NAME -a $1 = jpegsrc.v6b.tar.gz ]; then
COMPILE_DIR="jpeg-6b"
INSTALL jpegsrc.v6b.tar.gz " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/jpeg --enable-shared --enable-static"
elif[ $1 = $SERVER_NAME -a $1 = libpng ]; then
INSTALL libpng " ""$COMPILE_DIR""$i"" "
elif[ $1 = $SERVER_NAME -a $1 = gd ]; then
INSTALL gd " ""$COMPILE_DIR""$i""--prefix=/usr/local/env/gd--with-png=/usr\
--with-freetype=/usr/local/env/freetype\
--with-jpeg=/usr/local/env/jpeg--with-fontconfig=/usr--with-xpm=/usr"
elif[ $1 = $SERVER_NAME -a $1 = openssl ]; then
INSTALL openssl " ""$COMPILE_DIR""$i""-fPIC --prefix=/usr/local/env/openssl shared"
elif[ $1 = $SERVER_NAME -a $1 = php ]; then
INSTALL php5 "$PHP5_YUM""$COMPILE_DIR""$i""$PHP5_PARAMETERS"
CONFIG_PHP "$COMPILE_DIR"
break
else
continue
fi
done
}
#MOD_CASE函数用KASE定义选择安装程序。
functionMOD_CASE()
{
if[[ $1 =~ apache|mysql|php ]] && [[ $2 =~ install|start|stop|restart ]]; then
INFO 32 "1.5""Input the correct,according to the option to perform related operations......"
echo""
if[ $2 = install]; then
case"$1 $2"in
"apache install")
INFO 35 "2.5""Start to $1 the $2......"
INSTALL_BRANCH apr
INSTALL_BRANCH apr-util
INSTALL_BRANCH pcre
INSTALL_BRANCH httpd
;;
"mysql install")
INFO 35 "2.5""Start to $1 the $2......"
INSTALL_BRANCH mysql
;;
"php install")
INFO 35 "2.5""Start to $1 the $2......"
exportLD_LIBRARY_PATH=/lib/:/usr/lib/:/usr/local/lib:/usr/local/lamp/mysql/lib
INSTALL_BRANCH libiconv
INSTALL_BRANCH libxml2
INSTALL_BRANCH curl
INSTALL_BRANCH libmcrypt
INSTALL_BRANCH mhash
INSTALL_BRANCH mcrypt
INSTALL_BRANCH gettext
INSTALL_BRANCH freetype
INSTALL_BRANCH jpegsrc.v6b.tar.gz
INSTALL_BRANCH libpng
INSTALL_BRANCH gd
INSTALL_BRANCH openssl
#INSTALL_BRANCH httpd && INSTALL_BRANCH mysql && INSTALL_BRANCH php
INSTALL_BRANCH php
;;
esac
else
SERVICE $1 $2
fi
else
INFO 31 1 "Input error, please try again!"
INPUT
fi
}
#LAMP程序安装的目录
INSTALL_PATH="/usr/local/lamp"
#源码包存放目录
SOURCE_PATH="$(cd $(dirname $0); pwd)/install_tar"
#源码包列表
TAR_NAME=(httpd-2.4.4.tar.gz mysql-5.6.12.tar.gz php-5.4.17.tar.gz apr-1.4.8.tar.gz apr-util-1.5.2.tar.gz pcre-8.10.tar.gz freetype-2.4.0.tar.gz jpegsrc.v6b.tar.gz libxml2-2.7.2.tar.gz mhash-0.9.9.9.tar.gz mcrypt-2.6.8.tar.gz gd-2.0.35.tar.gz libiconv-1.14.tar.gz gettext-0.18.tar.gz libmcrypt-2.5.8.tar.gz openssl-0.9.8p.tar.gz curl-7.32.0.tar.gz libpng-1.2.33.tar.gz)
#Apache,Mysql,PHP yum安装依赖包
HTTP_YUM="build-essential libapr1 libapr1-dev libaprutil1 libaprutil1-dev gettext gettext-devel"
MYSQL_YUM="cmake libncurses5 libncurses5-dev bison"
PHP5_YUM="libxml2 libxml2-devel openssl libjpeg-devel bzip2 libXpm-devel libmcrypt-devel"
#Apache编译参数
HTTP_PARAMETERS="\
--prefix=$INSTALL_PATH/apache\
--enable-module=so \
--enable-module=rewrite \
--enable-shard=rewrite \
--enable-shared=max \
--with-apr=/usr/local/env/apr\
--with-apr-util=/usr/local/env/apr-util\
--with-pcre=/usr/local/env/pcre\
--with-included-apr \
"
#mysql编译参数
MYSQL_PARAMETERS="\
-DCMAKE_INSTALL_PREFIX=$INSTALL_PATH/mysql\
-DYSQL_TCP_PORT=3306 \
-DMYSQL_DATADIR=$INSTALL_PATH/mysql/data\
-DMYSQL_UNIX_ADDR=$INSTALL_PAHT/mysql/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_DEBUG=0 \
"
#PHP编译参数
PHP5_PARAMETERS="\
--prefix=$INSTALL_PATH/php5\
--with-config-file-path=$INSTALL_PATH/php5/etc\
--with-mysql=$INSTALL_PATH/mysql\
--with-apxs2=$INSTALL_PATH/apache/bin/apxs\
--with-mysqli=$INSTALL_PATH/mysql/bin/mysql_config\
--with-iconv=/usr/local/env/libiconv\
--with-jpeg-dir=/usr/local/env/jpeg\
--with-png-dir=/usr\
--with-libxml-dir=/usr/local/env/libxml2\
--with-pdo-mysql \
--with-zlib \
--with-curl=/usr/local/env/curl\
--with-curlwrappers \
--with-mcrypt=/usr/local/env/libmcrypt\
--with-gd=/usr/local/env/gd\
--with-openssl=/usr/local/env/openssl\
--with-mhash=/usr\
--with-xmlrpc \
--with-xpm-dir\
--with-freetype-dir=/usr/local/env/freetype\
--with-zlib-dir\
--with-ldap \
--with-ldap-sasl \
--with-pcre-regex \
--with-gettext=/usr/local/env/gettext\
--with-ncurses \
--enable-shared \
--enable-xml \
--enable-safe-mode \
--enable-track-vars \
--enable-magic-quotes \
--enable-bcmath \
--enable-sysvsem \
--enable-sysshm \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap \
--enable-discard-path \
--enable-force-cgi-redirect \
--enable-pdo \
--enable-calendar \
--enable-exif \
--enable-zend-multibyte \
"
#--disable-rpath
#脚本调用帮助程序
if[ $# = 2 ]
then
INFO 33 "1.5""please wait......"
echo""
MOD_CASE "$1""$2"
else
USAGE
exit1
fi

 

  3)脚本的用法

 

#下载安装脚本和源码包
wget https://sourceforge.net/projects/opensourcefile/files/
Install_Centos_LAMP_v.0.1.zip/download--no-check-certificate
unzip Install_Centos_LAMP_v.0.1.zip
chmod+x Install_Centos_LAMP_v.0.1.sh
#查看脚本的用法,可通过该脚本安装apache,mysql,php,启动,关闭和重启apache和mysql。
./Install_Centos_LAMP_v.0.1.sh
: Please see the script of the usage:
: Usage:
./Install_Centos_LAMP_v.0.1.sh (apache|mysql|php) install
./Install_Centos_LAMP_v.0.1.sh apache (start|stop|restart)
./Install_Centos_LAMP_v.0.1.sh mysql (start|stop|restart)

 

本脚本应用了Shell编程里面的函数,数组,流程控制,变量,字体的加亮等功能,希望对学习WEB和Shell编程的同学有所帮助,最后非常感谢我的同学宝宝的支持。本文出自 “朴实的追梦者” 博客,请务必保留此出处http://sfzhang88.blog.51cto.com/4995876/1281640

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容