#!/bin/bash

#安装时请将所有安装包已经配置文件放在/dist/dist,请认真核对所需安装包,以免安装失败

#此脚本用于安装LNMP环境


set -u

#########检测目录#######


[ -d /dist/dist ] || mkdir -p /dist/dist

[ -d /dist/src ]  || mkdir -p /dist/src

[ -d /data/sh ]   || mkdir -p /data/sh


############复制文件#########


cd `dirname $0`

cp `pwd`/* /dist/dist

echo `pwd`


MYSQL_INSTALL(){


###########检测文件###########


cd /dist/dist

my=Percona-Server-5.5.27.tar.gz

myc=my.cnf

if [[ -e $my ]];then

   echo "${my}存在"

else

   echo "${my}不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi

if [[ -e $myc ]];then

   echo "${myc}存在"

else

   echo "${myc}不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi


#########安装编译环境##########


yum install gcc gcc-c++ ncurses-devel bison cmake automake autoconf libtool gzip-devel bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel curl-devel -y

yum -y install vim wget lrzsz



if [[ $?=0 ]];then

    echo "-----------------------编译环境安装成功--------------------"

else

    echo "-----------------------编译环境安装失败--------------------"

    exit 0

fi


#########添加mysql用户和组##########


if [[ -z $(grep mysql /etc/group) ]];then

     groupadd -g 88 mysql

fi

if

   [[ -z $(grep mysql /etc/passwd) ]];then

     useradd -g mysql mysql -s /sbin/nologin

fi


##########编译安装##########


cd /dist/src

tar zxf /dist/dist/Percona-Server-5.5.27.tar.gz

cd Percona-Server-5.5.27/

CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" cmake \

-DMYSQL_USER=mysql \

-DCMAKE_BUILD_TYPE:STRING=Release \

-DSYSCONFDIR:PATH=/usr/local/mysql \

-DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DENABLED_PROFILING:BOOL=ON \

-DENABLE_DEBUG_SYNC:BOOL=OFF \

-DMYSQL_DATADIR:PATH=/data/database/mysql \

-DMYSQL_MAINTAINER_MODE:BOOL=OFF \

-DWITH_EXTRA_CHARSETS=all \

-DWITH_BIG_TABLES:BOOL=ON \

-DWITH_FAST_MUTEXES:BOOL=ON \

-DENABLE-PROFILING:BOOL=ON \

-DWITH_SSL:STRING=bundled \

-DWITH_UNIT_TESTS:BOOL=OFF \

-DWITH_ZLIB:STRING=bundled \

-DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \

-DWITH_SERVER_SUFFIX=YH_GAME_DB \

-DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam \

-DEFAULT_COLLATION=utf8_general_ci \

-DEFAULT_CHARSET=utf8 \

-DENABLED_ASSEMBLER:BOOL=ON \

-DENABLED_LOCAL_INFILE:BOOL=ON \

-DENABLED_THREAD_SAFE_CLIENT:BOOL=ON \

-DENABLED_EMBEDDED_SERVER:BOOL=OFF \

-DWITH_CLIENT_LDFLAGS:STRING=all-static \

-DINSTALL_LAYOUT:STRING=STANDALONE \

-DCOMMUNITY_BUILD:BOOL=ON


make && make install



##############检测是否安装成功############


/usr/local/mysql/bin/mysql -V

if [[ $? -eq 0 ]];then

    echo "--------mysql 安装成功--------"

else

    echo "------- mysql 安装失败--------"

    exit 0 

fi


############### MYSQL初始化 ############################


echo "---------MYSQL 正在进行初始化----------"

mkdir -p /data/database/mysql/

ln -s /data/database/mysql/ /usr/local/mysql/var

if [[ -f /etc/my.cnf ]]; then

    mv /etc/my.cnf /etc/my.cnf.bak

fi

cp /dist/dist/my.cnf /etc/my.cnf

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --defaults-file=/etc/my.cnf --ldata=/usr/local/mysql/var/ --user=mysql


##############


cd /usr/local/mysql/ ; /usr/local/mysql//bin/mysqld_safe &

sleep 10

ps -ef |grep -v grep |grep "/usr/local/mysql/bin/mysqld"

if [[ $? -eq 0 ]];then

   echo "--------------------------MYSQL 启动成功------------------------"

else

   echo "--------------------------MYSQL 启动失败------------------------"

read -p "---- 由于mysql启动失败,脚本暂停,请手动启动mysql,正确启动mysql之后,按任意键继续安装脚本---" ANYKEY

fi


##############  创建链接 #########################


mkdir -p /var/lib/mysql

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

ln -s /usr/local/mysql/bin/mysqlimport /usr/local/bin/mysqlimport

ln -s /usr/local/mysql/bin/mysqldump /usr/local/bin/mysqldump


############## 密码 ##########


test -d /data/save/ || mkdir /data/save/

echo yh1234! >> /data/save/mysql_root

chmod 600 /data/save/mysql_root

/usr/local/mysql/bin/mysqladmin -uroot password yh1234!

if [[ $? -eq 0 ]];then

   echo "--------------------------MYSQL 密码设置成功------------------------"

else

   echo "--------------------------MYSQL 密码设置失败------------------------"

read -p "---- 由于mysql密码设置失败,脚本暂停,按任意键继续安装脚本---" ANYKEY

fi


#############创建启动方式和加入开机启动项##############


echo '/usr/local/mysql/bin/mysqld_safe &' > /root/mysql_start

echo '/usr/local/mysql/bin/mysqladmin -u root -p`cat /data/save/mysql_root` shutdown' > /root/mysql_stop

chmod -R 700 /root/mysql_*

echo "/root/mysql_start" >> /etc/rc.local


}

MYSQL_PORT(){


########### 开启防火墙端口 ###########################


cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

sed -i '$ i\# mysql' /etc/sysconfig/iptables

sed -i '$ i\-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT' /etc/sysconfig/iptables

iptables-restore /etc/sysconfig/iptables


}


############ 开始安装PHP #####################


PHP_INSTALL(){


#########添加www用户和组##########


if [[ -z $(grep www /etc/group) ]];then

     groupadd -g 80 www

fi

if

   [[ -z $(grep www /etc/passwd) ]];then

     useradd -g www www -s /sbin/nologin

fi


################### 安装编译环境 ################


echo "-------------------正在安装编译环境---------------"

yum -y install gd-devel curl-devel libxml2-devel bzip2-devel \

libxpm-devel libXpm mbstring exif libicu-devel libmcrypt-devel \

php-mcrypt bzip2* libjpeg* libpng* freetype*

if [[ $? -eq 0 ]];then

   echo "--------------编译环境安装成功------------------"

else

   echo "--------------编译环境安装失败------------------"

   read -p "---- 编译环境失败,如果要继续安装,请按任意键---" ANYKEY

fi


#################### 检测文件是否存在  ##############


cd /dist/dist/

#wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz

if ` -e libmcrypt-2`.`5`.`7`.`tar`.`gz `;then

   echo "bmcrypt-2.5.7.tar.gz 存在"

else

   echo "bmcrypt-2.5.7.tar.gz 不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi


################## 编译安装 ####################


cd /dist/src/

tar zxf ../dist/libmcrypt-2.5.7.tar.gz

cd libmcrypt-2.5.7/

./configure --prefix=/usr/local/

make && make install


#################检测文件是否存在 ###################


cd /dist/dist/

#wget http://cn2.php.net/distributions/php-5.4.38.tar.gz

if ` -e php-5`.`4`.`38`.`tar`.`gz `;then

   echo "php-5.4.38.tar.gz 存在"

else

   echo "php-5.4.38.tar.gz 不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi


################ 编译安装 ######################


cd /dist/src/

tar zxf ../dist/php-5.4.38.tar.gz

if [[ -e /usr/local/mysql/lib/libmysqlclient.so.18 ]];then

   echo "libmysqlclient.so.18 存在"

else

   echo "libmysqlclient.so.18 不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib

ldconfig

cd php-5.4.38/

./configure --prefix=/usr/local/php/ \

--with-config-file-path=/usr/local/etc \

--with-mysql=/usr/local/mysql \

--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--with-iconv-dir=/usr/local \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir --enable-zip \

--with-zlib \

--with-gd --disable-rpath \

--enable-bcmath --enable-shmop \

--enable-sysvsem --with-curl \

--with-curlwrappers --enable-mbstring \

--with-mcrypt --enable-fpm \

--disable-ipv6 --enable-static \

--enable-sockets --enable-soap \

--with-openssl

make && make install


########## 创建链接 #################


ln -s /usr/local/php/bin/ /bin/

ln -s /usr/local/php/bin/ /usr/bin/

ln -s /usr/local/php/bin/ /usr/local/bin/

ln -s /usr/local/php/bin/php /usr/bin/php


############# 更改配置文件 ###################


if [[ -e /usr/local/php/etc/php.ini ]]; then

    mv /usr/local/php/etc/php.ini /usr/local/php/etc/php.ini.bak

fi

cp /dist/src/php-5.4.38/php.ini-production /usr/local/php/etc/php.ini

ln -s  /usr/local/php/etc/php.ini /etc/php.ini


if [[ -e /usr/local/php/etc/php-fpm.conf ]]; then

    mv /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf.bak

fi


############ 检测文件是否存在 ############################


cd /dist/dist


if ` -e php-fpm`.`conf `;then

  echo "php-fpm.conf存在"

else

  echo "php-fpm.conf不存在"

  read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

fi


#############  修改配置文件内容和开机启动项 #######################


cp /dist/dist/php-fpm.conf /usr/local/php/etc/php-fpm.conf

cat > /root/fastcgi_start << EOF

ulimit -SHn 65535

/usr/local/php/sbin/php-fpm

EOF

cat > /root/fastcgi_stop << EOF

kill -INT \`cat /usr/local/php/var/run/php-fpm.pid\`

EOF

cat > /root/fastcgi_restart << EOF

kill -USR2 \`cat /usr/local/php/var/run/php-fpm.pid\`

EOF

chmod 755 /root/fastcgi_*

echo "/root/fastcgi_start" >> /etc/rc.d/rc.local


######################### 启动PHP ########################


sh /root/fastcgi_start

ps -ef |grep -v grep |grep "php-fpm"

if [[ $? -eq 0 ]];then

   echo "php-fpm 启动成功"

else 

   echo "php-fpm 启动失败"

read -p "---- php-frm 启动失败,请检查,启动成功后,按任意键继续---" ANYKEY

fi


}


############# 安装NGIXN #############################


NGIXN_INSTALL(){


############## 检测文件是否存在 #################


cd /dist/dist/

for i in nginx-1.4.4.tar.gz pcre-8.35.tar.gz zlib-1.2.8.tar.gz libunwind-1.1.tar.gz gperftools-2.1.tar.gz

do

   if [[ -e $i ]];then

       echo "$i存在"

   else

       echo "$i不存在"

   read -p "---- 文件不存在,请检查,检查完成可按任意键继续---" ANYKEY

   fi

done


############### 开始编译安装 ##############################


cd /dist/src/

tar zxf ../dist/pcre-8.35.tar.gz

cd pcre-8.35

./configure

make && make install


cd /dist/src/

tar -zxf ../dist/zlib-1.2.8.tar.gz

cd zlib-1.2.8

./configure

make && make install


cd /dist/src/

tar -zxf ../dist/libunwind-1.1.tar.gz

cd libunwind-1.1/

./configure --prefix=/usr/local/libunwind

make && make install


cd /dist/src/

tar zxf ../dist/gperftools-2.1.tar.gz

cd gperftools-2.1/

./configure --prefix=/usr/local/gperftools --enable-frame-pointers

make && make install


cd /dist/src/

tar zxf ../dist/nginx-1.4.4.tar.gz

ln -s /usr/local/gperftools/lib/* /usr/local/lib

cd nginx-1.4.4/

./configure --user=www --group=www --prefix=/usr/local/nginx \

--with-http_stub_status_module \

--with-google_perftools_module \

--with-http_realip_module \

--with-http_sub_module \

--with-http_ssl_module \

--with-pcre=/dist/src/pcre-8.35 \

--with-zlib=/dist/src/zlib-1.2.8

make && make install


############ 更改配置文件 #############################


mkdir -p /data/logs

chown -R www:www /data/logs/

mkdir -p /data/web/webclose/

if [ -e /usr/local/nginx/conf/nginx.conf ]; then

    mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

fi

cp /dist/dist/nginx.conf /usr/local/nginx/conf/nginx.conf


########## 创建快捷方式和加入开机启动项 #####################################


echo 'ulimit -SHn 51200' >> /root/nginx_start

echo '/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf' >> /root/nginx_start

echo '/usr/local/nginx/sbin/nginx -t' >> /root/nginx_reload

echo 'kill -HUP `cat /usr/local/nginx/logs/nginx.pid` ' >> /root/nginx_reload

chmod 755 /root/nginx_*

cp /usr/local/gperftools/lib/libprofiler.so.0 /usr/lib64/

echo "/root/nginx_start" >> /etc/rc.d/rc.local

echo '### deny ###' >> /usr/local/nginx/conf/block_ips.conf

sh /root/nginx_start

ps -ef |grep -v grep |grep "nginx"

if [[ $? -eq 0 ]];then

   echo "-------------NGIXG 启动成功-----------"

else

   echo "-------------NGIXG 启动失败-----------"

   read -p "---- 启动失败,请检查,启动完成可按任意键继续---" ANYKEY

fi

}


NGINX_PORT(){


##################开启防火墙端口#############


sed -i '$ i\# nginx' /etc/sysconfig/iptables

sed -i '$ i\-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT' /etc/sysconfig/iptables

iptables-restore /etc/sysconfig/iptables


}


######################

echo "-----------------LNMP环境开始搭建------------------"

echo "-----------------MYSQL 开始安装---------------------"

MYSQL_INSTALL

MYSQL_PORT

echo "------------------PHP 开始安装-------------------"

PHP_INSTALL

echo "------------------NGIXG 开始安装------------------"

NGIXN_INSTALL

NGINX_PORT

echo "------------------LNMP环境搭建完成-----------------"