当前位置: > Linux服务器 > 服务器设置 >

LAMP一键安装脚本(包含系统优化及监控)

时间:2014-12-14 22:59来源:www.it.net.cn 作者:IT网

在公司搭建网站服务器时写了这个脚本,是基于CentOS 6 Minimal版本的。。。

#!/bin/bash

########################## Written By Qitan ####################################
################## BLOG: http://blog.catjia.com #################################
#################### EMAIL: qqing_lai@hotmail.com ##############################
########################## DATE: 2011-11-09 ####################################

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

SRC=`find / -name qq_lamp.sh |sed 's/qq_lamp.sh//g'`
FETI=/usr/local/fetion
SCRI=/usr/local/sbin

# Check if user is root
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please use root to setup operation system"
    exit 1
fi

clear
echo -e "33[7m"
printf "===========================================================================n"
printf "       SETUP OPERATION SYSTEM AND INSTALL LAMP--WRITTEN BY EYO-QITAN.      n"
printf "                        Email: qqing_lai@hotmail.com                       n"
printf "         Blog: http://blog.catjia.com   Website: www.goego.net              n"
printf "              Install_Log File: qq_lamp.log  Path: /root                   n"
printf "===========================================================================n"
echo -e "33[0m"

sleep 1

printf "n"
echo -e "33[7m"
printf "  Are you sure to install LAMP (it will continue after 5sec)? [y/n]:       "
echo -e "33[0m"

read -t 5 -n 1 qq_lamp
if [[ $qq_lamp != n ]]; then
    echo -e "33[7m"
    printf "###########################################################################n"
    printf "Warning:You should download ZendGuardLoader(zend optimizer) manually first!n"
    printf "###########################################################################n"
    echo -e "33[0m"

    printf "Would you download ZendGuardLoader manually? (Continue install after 20sec) [y/n]:"
    read -t 20 down
    if [[ $down == y ]]; then
        printf "n"
        echo -e "33[7m"
        printf "nInstall exit, please download ZendGuardLoader manually first, and MOVE to $script, then rerun this script...                 n"
        echo -e "33[0m"
        exit 0
    fi

sleep 1

######## Warning: It will FORMAT The Partition Which Selected.##############
    printf "nWhich partition would you want to mount to /data (it will continue after 20sec without input)?"
    read -t 20 -p "(Default Partition: /dev/sda5):" parti
    if [ "$parti" = "" ]; then
        parti="/dev/sda5"
    fi
#printf "n==================================================================n"
#printf "nWarning: It Will FORMAT The Partition You Selected, If Install Continue ? [y/n]:n"
#printf "n==================================================================n"
#read -n 1 formatpar
#if [[ $formatpar != n ]]; then
#printf "Format Partition Which You Selected...n"
#mkfs.ext4 $parti
#else
#    exit 1
#fi

#Create Data Directory
    mkdir /data/ && echo "$parti        /data/            ext4    defaults    0 0" >> /etc/fstab
    mount -a
    mkdir -p /data/www/{logs,wwwroot} && mkdir -p /data/mysql/data

    printf "nPlease input an E-mail to receive Notification:"
    read -t 20 -p "(Default E-mail: 617526722@qq.com):" re_mail
    if [ "$re_mail" = "" ]; then
        $re_mail="617526722@qq.com"
    fi

    printf "nPlease input Mobile NO. to send and receive Notification:"
    read -t 20 -p "(Default Mobile NO.: 12345678900):" mobile
    if [ "$mobile" = "" ]; then
        $mobile="12345678900"
    fi

    printf "nPlease input Fetion Password:"
    read -t 20 -p "(Default Password: passwd99):" mpasswd
    if [ "$mpasswd" = "" ]; then
        $mpasswd="passwd99"
    fi

    printf "nWould you install Desktop Environment and VNCServer? [y/n]:"
    read -t 10 -p "(Default: n):" desk
    if [ "$desk" = "" ]; then
        desk="n"
    fi

    printf "nWhere would you install LAMP (it will continue install after 20sec without input)?"
    read -t 20 -p "(Default Dir: /usr/local):" dir
    if [ "$dir" = "" ]; then
        dir="/usr/local"
    fi

    printf "nPlease input hostname (it will continue after 20sec without input):"
    read -t 20 -p "(Default hostname: www.goego.net):" hostname
    if [ "$hostname" = "" ]; then
        hostname="www.goego.net"
    fi

    sed -i '/HOSTNAME/d' /etc/sysconfig/network
    echo "HOSTNAME=$hostname" >> /etc/sysconfig/network

    printf "nHow much of your Memory: n"
    printf " a. mem <= 64M n b. mem = 128M n c. mem = 512M n d. mem = 1-2G n e. mem >= 4G n Please Select [a, b, c, d, e]:"
    read -t 20 -p "(Default Select: e):" mem
    case "$mem" in
    a) mycnf="my-small.cnf";;
    b) mycnf="my-medium.cnf";;
    c) mycnf="my-large.cnf";;
    d) mycnf="my-huge.cnf";;
    ""|e) mycnf="my-innodb-heavy-4G.cnf";;
    esac

    printf "nPlease Set MySQL Password for root (it will continue after 20sec without input):"
    read -t 20 -p "(Default Password: eyoadmin):" rpass
    if [ "$rpass" = "" ]; then
        rpass="eyoadmin"
    fi

#    printf "nCreate MySQL Database (it will continue after 20sec without input):"
#    read -t 20 -p "(Default Database: eyo):" db
#    if [ "$db" = "" ]; then
#        db="eyo"
#    fi

#    printf "nCreate an user for $db Database (it will continue after 20sec without input):"
#    read -t 20 -p "(Default Database User: eyoadmin):" dbser
#    if [ "$dbser" = "" ]; then
#        dbser="eyoadmin"
#    fi

    printf "nPlease Setup MySQL Password for eyoadmin (it will continue after 20sec without input):"
    read -t 20 -p "(Default Password: eyoadmin):" passwd
    if [ "$passwd" = "" ]; then
        passwd="eyoadmin"
    fi

    printf "nPlease Setup FTP User Name(it will continue after 20sec without input):"
    read -t 20 -p "(Default User Name: qitan):" ftper
    if [ "$ftper" = "" ]; then
        ftper="qitan"
    fi

    printf "nPlease Setup FTP User Password (it will continue after 20sec without input):"
    read -t 20 -p "(Default User Password: qitan@99):" ftpasswd
    if [ "$ftpasswd" = "" ]; then
        ftpasswd="qitan@99"
    fi

# Check if MySQL already running
    rsql=`ps -ef |grep mysqld |awk '{if($3==1)print $0}' |awk '{if($1="root")print $3}'`
    if [ "$rsql" = "1" ]; then
        printf "MySQL already running, would you stop and remove it? Warning: it will DELETE all Databases. (Continue after 20sec) [y/n]:n"
        read -t 20 -p "(Default: y):" unsql
    else
        unsql=yes
    fi

    printf "Would you change default repo to 163 repo? [y/n]:n"
    read -t 20 -p "(Default: n):" repo
    case "$repo" in
    y) repos="yes";;
    ""|n) repos="no";;
    esac

else
    exit 0
fi

# Setup Firewall
chkconfig iptables off
/etc/init.d/iptables stop
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

chkconfig sshd on

#################### Off services unnecessary --Begin ##########################
service_all_list=(
    NetworkManager 
    acpid 
    atd 
    bluetooth 
    cups 

    auditd 
    avahi-daemon 
    fcoe 
    ip6tables 
    iptables 
    iscsi 
    iscsid 
    lldpad 
    lvm2-monitor 
    mdmonitor 
    netfs 
    nfslock 
    rpcbind 
    rpcgssd 
    rpcidmapd 
    udev-post 
)

service_all_len=${#service_all_list[*]}
i=0
while [ $i -lt $service_all_len ]
do
    chkconfig ${service_all_list[$i]} off
    /etc/init.d/${service_all_list[$i]} stop

let i++
done

chkconfig network on

#################### Off services unnecessary --End ##########################

# Check if network is working

# Network cannot work, setup follow:
ping -c 3 www.baidu.com > /dev/null 2>&1
if [ $? != 0 ]; then
    clear
    echo -e "33[7m"
    printf "===========================================================================n"
    printf "    SETUP OPERATION SYSTEM AND INSTALL LAMP--WRITTEN BY EYO-QITAN.         n"
    printf "         Email: qqing_lai@hotmail.com Website: www.goego.net               n"
    printf "            Install Log File: qq_lamp.log Path: /root                      n"
    printf "===========================================================================n"
    echo -e "33[0m"
    printf "n"
    echo -e "33[7m"
    printf "  Your Network Cannot Work, Would You Setup First?                         n  (Setup will start after 10sec) [y/n]:                                    "
    echo -e "33[0m"

    read -t 10 -n 1 setnet
    if [[ $setnet != n ]]; then
        printf "nWhich Network Adapter would be setup [eth0] [eth1] [eth2] [...]:"
        read -t 20 -p "(Default Network Adapter: $eth_hw):" eth_hw
        if [ "$eth_hw" = "" ]; then
            eth_hw="eth0"
        fi

        printf "nPlease input ip address (it will continue after 20sec without input):"
        read -t 20 -p "(Default IP: 192.168.10.222):" ipaddr
        if [ "$ipaddr" = "" ]; then
            ipaddr="192.168.10.222"
        fi

        printf "nPlease input broadcast (it will continue after 20sec without input):"
        read -t 20 -p "(Default broadcast: 192.168.10.255):" broadcast
        if [ "$broadcast" = "" ]; then
            broadcast="192.168.10.255"
        fi

        printf "nPlease input netmask (it will continue after 20sec without input):"
        read -t 20 -p "(Default netmask: 255.255.255.0):" netmask
        if [ "$netmask" = "" ]; then
            netmask="255.255.255.0"
        fi

        printf "nPlease input network (it will continue after 20sec without input)"
        read -t 20 -p "(Default network: 192.168.10.0):" network
        if [ "$network" = "" ]; then
            network="192.168.10.0"
        fi

        printf "nPlease input gateway (it will continue after 20sec without input):"
        read -t 20 -p "(Default gateway: 192.168.10.1):" gateway
        if [ "$gateway" = "" ]; then
            gateway="192.168.10.1"
        fi

        printf "nPlease input Main DNS (it will continue after 20sec without input):"
        read -t 20 -p "(Default Main DNS: 211.162.78.2):" dns1
        if [ "$dns1" = "" ]; then
            dns1="211.162.78.2"
        fi

        printf "nPlease input From DNS (it will continue after 20sec without input):"
        read -t 20 -p "(Default From DNS: 211.162.78.1):" dns2
        if [ "$dns2" = "" ]; then
            dns2="211.162.78.1"
        fi

        sleep 1

        cat > /etc/sysconfig/network-scripts/ifcfg-$eth_hw <<EOF
DEVICE="$eth_hw"
ONBOOT="yes"
EOF
        ifup $eth_hw
        hwaddr=`ifconfig |grep $eth_hw |awk '{print $5}'`
        cat >> /etc/sysconfig/network-scripts/ifcfg-$eth_hw <<EOF
BOOTPROTO=static
HWADDR=$hwaddr
IPADDR=$ipaddr
BROADCAST=$broadcast
NETMASK=$netmask
NETWORK=$network
GATEWAY=$gateway
EOF
        /etc/init.d/network restart
        cat > /etc/resolv.conf <<EOF
nameserver $dns1
nameserver $dns2
EOF

    else
        printf "n"
        exit 0
    fi
fi

# Check if network is ok again
ping -c 3 www.baidu.com > /dev/null 2>&1
if [ $? != 0 ]; then
    printf "`date` Network cannot work, install will quit, please check manually.n" |tee /root/qq_lamp.log
    exit 0
fi

yum -y install wget ftp ntp kernel kernel-devel && ntpdate time.nist.gov

# Install Desktop Environment and VNC Server
if [ "$desk" = "y" ]; then
    yum -y groupinstall "Desktop" "X Window System" && yum -y install vnc-server
    sed -i '$ aVNCSERVERS="1:root"' /etc/sysconfig/vncservers
    sed -i 's/twm/gnome-session/g' /root/.vnc/xstartup
    chkconfig vncserver on
    vncserver <<EOF
eyoqqing
eyoqqing
EOF
#    /etc/init.d/vncserver start
fi

# Changge repo to 163
if [ "$repos" = "yes" ]; then
    wget -c http://mirrors.163.com/.help/CentOS6-Base-163.repo && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && mv CentOS6-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo
fi

#################################### Install LAMP... ###########################

# Download Files...
############################################################################ Warning: Cannot download zend, you should download it manually first !!!   ############################################################################

function func() {
if [ -s $file ]; then
    printf "n"
    echo "$file Found."
else
    printf "n"
    echo "$file not found, download now..."
    wget -c $url
    if [ -s $file ]; then
    echo "$file already download."
    printf "n"
    else
    echo -e "33[7m"
    echo "$file cannot download, please download manually and rerun this script." >> /root/qq_lamp.log
    echo -e "33[0m"
    exit 0
    fi
fi
}

function file_down() {
    local file=httpd-2.2.21.tar.bz2 url=http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.bz2
    func
    local file=cmake-2.8.6.tar.gz url=http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz
    func
    local file=mysql-5.5.16.tar.gz url=http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz/from/http://mirror.services.wisc.edu/mysql/
    func
    local file=php-5.3.8.tar.bz2 url=http://cn2.php.net/get/php-5.3.8.tar.bz2/from/this/mirror
    func
    local file=phpMyAdmin-3.4.7-all-languages.tar.bz2 url=http://nchc.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.4.7/phpMyAdmin-3.4.7-all-languages.tar.bz2
    func
    local file=xcache-1.3.2.tar.gz url=http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz
    func
    local file=ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz url=http://blog.catjia.com/wp-content/uploads/2012/02/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
    func
    local file=rpmforge-release-0.5.2-2.el6.rf.i686.rpm url=http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
    func
}

# function file_down()
file_down

# Download files from ftp server
#ftp -n <<EOF
#open 192.168.10.228
#user qitan qitan@228
#bin
#get cmake-2.8.6.tar.gz
#get httpd-2.2.21.tar.bz2
#get mysql-5.5.16.tar.gz
#get php-5.3.8.tar.bz2
#get phpMyAdmin-3.4.7-all-languages.tar.bz2
#get rpmforge-release-0.5.2-2.el6.rf.i686.rpm
#get xcache-1.3.2.tar.gz
#get ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
#bye
#EOF

############################################################################ Warning: Cannot download zend, you should download it manually first !!!   ############################################################################

#    wget -c http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz/from/http://mirror.services.wisc.edu/mysql/ http://nchc.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.4.7/phpMyAdmin-3.4.7-all-languages.tar.bz2 http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.bz2 http://cn2.php.net/get/php-5.3.8.tar.bz2/from/this/mirror http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz
# Can not download zend optimizer 
# wget -c http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-linux-glibc23.i386.tar.gz

    # Add additional resource/rpm
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el6.rf.i686.rpm
rpm -i rpmforge-release-0.5.2-2.el6.rf.i686.rpm

sleep 1

yum -y install make gcc gcc-c++ autoconf automake vim ntsysv crontab* man ImageMagick-devel rar unrar unzip ncurses-devel zlib* flex* libxml* libmcrypt* mhash* libcurl-devel libtool libtool-ltdl-devel* bison bison-devel libjpeg* gd gd-devel openssl* cronolog bzip2-devel libpng-devel libtiff-devel freetype-devel libXpm-devel gettext-devel pam-devel && yum -y update

sleep 3

# Install AMP...

# Install phpMyAdmin
    alias cp='cp' && tar -jxvf phpMyAdmin-3.4.7-all-languages.tar.bz2 && cp -r phpMyAdmin-3.4.7-all-languages /data/www/wwwroot/eyo/phpMyAdmin && source /root/.bashrc
cat > /data/www/wwwroot/eyo/phpMyAdmin/config.inc.php <<EOF
<?php
 /* This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = 'qitan99'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/*
 * Servers configuration
 */

$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

?>
EOF

# Install Cmake and MySQL

printf "Start install cmake...n"
    tar -zxvf cmake-2.8.6.tar.gz && cd cmake-2.8.6 && ./configure && gmake && make install && make clean

# Check if MySQL already running
#    rsql=ps -ef |grep mysqld |awk '{if($3==1)print $0}' |awk '{if($1="root")print $3}'
#    if [ "$rsql" = "1" ]; then
#        printf "MySQL already running, stop and remove it? Warning: it will DELETE all Databases. (Continue after 20sec) [y/n]:n"
if [ "$unsql" != "n" ]; then
    printf "Start install MySQL...n"
        if [ "$rsql" = "1" ]; then
            printf "Remove MySQL now...n"
            killall mysqld && cd /
            yum remove mysql*
            rm -rf {/,/root/,/opt/,/etc/,/usr/,/usr/etc/,/usr/local/,/usr/local/etc/,/var/,/var/local/,/var/opt/}/mysql
        fi
    cd $SRC
#    rm -rf /usr{/local,}/bin/{my*,innochecksum,msql2mysql,perror,replace,resolveip,resolve_stack_dump}
    groupadd mysql && useradd mysql -g mysql -s /sbin/nologin -d /data/mysql/data/ && chown mysql.mysql -R /data/mysql
    tar -zxvf mysql-5.5.16.tar.gz && cd mysql-5.5.16 && cmake -DCMAKE_INSTALL_PREFIX=$dir/mysql -DMYSQL_DATADIR=/data/mysql/data -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DWITH_DEBUG=0 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 && make && make install && make clean
    cp -r support-files/$mycnf /etc/my.cnf && sed -i '47 askip-grant-tables' /etc/my.cnf && chmod +x scripts/mysql_install_db && ./scripts/mysql_install_db --user=mysql --basedir=$dir/mysql --datadir=/data/mysql/data
    cp -r support-files/mysql.server /etc/rc.d/init.d/mysqld && sed -i '46,47s/^/#/' /etc/rc.d/init.d/mysqld && sed -i '46 abasedir='$dir'/mysql/' /etc/rc.d/init.d/mysqld && sed -i '48 adatadir=/data/mysql/data/' /etc/rc.d/init.d/mysqld && chmod +x /etc/rc.d/init.d/mysqld && chkconfig --levels 345 mysqld on && ln -sf $dir/mysql/bin/* /usr/local/bin/ && ln -sf $dir/mysql/bin/* /usr/bin/
    /etc/init.d/mysqld start
    mysql -n <<EOF
drop database test;
use mysql;
delete from user where user='';
update user set password=password('$rpass') where user='root';
grant all privileges on *.* to root@"%" identified by '$rpass';
create database eyo;
grant all privileges on eyo.* to eyoadmin@localhost identified by '$passwd';
grant all privileges on eyo.* to eyoadmin@"%" identified by '$passwd';
flush privileges;
quit
EOF
    sed -i '/skip-grant-tables/d' /etc/my.cnf
    /etc/init.d/mysqld restart
else
    printf "MySQL already running, skip install again."

fi   

sleep 3

# Install Apache

# Check if apache already running

    httpd=`netstat -ant |grep :::80 |awk '{print $4}' |awk -F : '{print $4}'`
    if [ "$httpd" = "80" ]; then
        printf "Apache already running, stop and remove it now...n"
        killall httpd && cd /
        yum remove httpd*
        rm -rf {/,/root/,/opt/,/etc/,/usr/,/usr/etc/,/usr/local/,/usr/local/etc/,/var/,/var/local/,/var/opt/}/{apache,apache2}
        sed -i '/apachectl/d' /etc/rc.d/rc.local 
        cd $SRC
    fi
printf "Start install Apache...n"
    groupadd www && useradd www -g www -s /sbin/nologin -d /data/www && chown www.www /data/www/wwwroot && chmod 777 /data/www/wwwroot
    cd ../ && tar -jxvf httpd-2.2.21.tar.bz2 && cd httpd-2.2.21 && ./configure --prefix=$dir/apache2 --with-ssl=/usr/ --enable-ssl --enable-so --enable-mime-magic --enable-cache --enable-mem-cache --with-included-apr --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-static-support && make && make install && make clean && echo "$dir/apache2/bin/apachectl start" >> /etc/rc.d/rc.local

# Install PHP
printf "Start install PHP...n"
    cd ../ && tar -jxvf php-5.3.8.tar.bz2 && cd php-5.3.8 && ./configure --prefix=$dir/php --with-apxs2=$dir/apache2/bin/apxs --with-config-file-path=$dir/php/etc --with-mysql=$dir/mysql --with-libxml-dir --with-jpeg-dir=/usr/lib/ --with-gd --enable-gd-native-ttf --with-png-dir --with-bz2 --with-freetype-dir --with-iconv --with-zlib-dir --with-openssl=/usr/ --with-mcrypt --enable-soap --enable-magic-quotes --enable-ftp --enable-mbstring --enable-exif --disable-cgi --with-pear --enable-zip --with-mhash --with-openssl --enable-inline-optimization --disable-ipv6 --disable-cli --with-mysqli=$dir/mysql/bin/mysql_config --enable-bcmath  --with-curl && make && make install && make clean
    mkdir $dir/php/etc && cp -r php.ini-production $dir/php/etc/php.ini && sed -i 's/^;date.timezone =.*/&ndate.timezone = Asia/Chongqing/' $dir/php/etc/php.ini && ln -sf $dir/php/bin/* /usr/local/bin/ && ln -sf $dir/php/bin/* /usr/bin/

# Install Xcache
    cd .. && tar -zxvf xcache-1.3.2.tar.gz && cd xcache-1.3.2 && $dir/php/bin/phpize && ./configure --with-php-config=$dir/php/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install && make clean
    cat >> $dir/php/etc/php.ini <<EOF
;add the following code at the end of file php.ini
[xcache-common]
zend_extension      = $dir/php/lib/php/extensions/no-debug-non-zts-20090626/xcache.so

[xcache.admin]
xcache.admin.user   = "admin"
;如何生成md5密码: echo -n "passwd"| md5sum
xcache.admin.pass   = "f50dff779a142c7e0987755a247109f7"

[xcache]
; Change xcache.size to tune the size of the opcode cache
xcache.size         = 24M
xcache.shm_scheme   = "mmap"
xcache.count        = 4
xcache.slots        = 8K
xcache.ttl          = 0
xcache.gc_interval  = 0

; Change xcache.var_size to adjust the size of variable cache
xcache.var_size     = 8M
xcache.var_count    = 1
xcache.var_slots    = 8K
xcache.var_ttl      = 0
xcache.var_maxttl   = 0
xcache.var_gc_interval =     300
xcache.test         = Off
xcache.readonly_protection = On
xcache.mmap_path    = "/tmp/xcache"
xcache.coredump_directory =   ""
xcache.cacher       = On
xcache.stat         = On
xcache.optimizer    = Off

[xcache.coverager]
xcache.coverager    = On
xcache.coveragedump_directory = ""
EOF

# If ZendGuardLoader have download manually, install zend optimizer    
# Install Zend Optimizer
if [ -s ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz ]; then
    cd ../ && tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz && cp -r ZendGuardLoader-php-5.3-linux-glibc23-i386 $dir/php/lib/php/extensions/
    cat >> $dir/php/etc/php.ini <<EOF
zend_extension    = $dir/php/lib/php/extensions/ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
EOF

fi

# Combined Apche and PHP

    # Modify file httpd.conf    
    sed -i 's/#ServerName www.example.com:80/ServerName localhost/' $dir/apache2/conf/httpd.conf
    sed -i 's/ServerAdmin you@example.com/ServerAdmin qitan@goego.net/g' $dir/apache2/conf/httpd.conf
    sed -i 's/AddType application/x-gzip .gz .tgz.*/&n    AddType application/x-httpd-php .php/' $dir/apache2/conf/httpd.conf
    sed -i 's/DirectoryIndex index.html/DirectoryIndex index.html index.htm index.php/' $dir/apache2/conf/httpd.conf
    sed -i '122 a    Allow from all' $dir/apache2/conf/httpd.conf
    cat >> $dir/apache2/conf/httpd.conf <<EOF
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-info.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-default.conf

<IfModule mod_expires>
ExpiresActive On
ExpiresDefault A60
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType text/html A60
</IfModule>

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
</IfModule>
EOF
    # Setup vhost
    cd $dir/apache2/conf/extra && mv httpd-vhosts.conf httpd-vhosts.conf.bak
    cat > httpd-vhosts.conf <<EOF
NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "/data/www/wwwroot/eyo"
    ServerName $hostname
    ErrorLog "/data/www/logs/$hostname.error.log"
#    CustomLog "|/usr/sbin/cronolog /data/www/logs/$hostname.access.log.%Y%m%d" combined
    CustomLog "/data/www/logs/$hostname-access_log" combined
<Directory "/data/www/wwwroot/eyo">
#    Options None
#    AllowOverride None
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
<location /server-status>
    SetHandler server-status
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</location>
</VirtualHost>
EOF

    mv httpd-default.conf httpd-default.conf.bak
    cat > httpd-default.conf <<EOF
Timeout 60
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 15
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
EOF

    mv httpd-info.conf httpd-info.conf.bak
    cat > httpd-info.conf <<EOF
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from .example.com
</Location>

ExtendedStatus On
EOF

    mv httpd-mpm.conf httpd-mpm.conf.bak 
    cat > httpd-mpm.conf <<EOF
<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>
<IfModule !mpm_winnt_module>
<IfModule !mpm_netware_module>
LockFile "logs/accept.lock"
</IfModule>
</IfModule>
<IfModule mpm_prefork_module>
    ServerLimit           1000
    StartServers          10
    MinSpareServers       10
    MaxSpareServers      20
    MaxClients          1000
    MaxRequestsPerChild   5000
</IfModule>
<IfModule mpm_worker_module>
    StartServers          4
    MaxClients          300
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_beos_module>
    StartThreads            10
    MaxClients              50
    MaxRequestsPerThread 10000
</IfModule>
<IfModule mpm_netware_module>
    ThreadStackSize      65536
    StartThreads           250
    MinSpareThreads         25
    MaxSpareThreads        250
    MaxThreads            1000
    MaxRequestsPerChild      0
    MaxMemFree             100
</IfModule>
<IfModule mpm_mpmt_os2_module>
    StartServers           2
    MinSpareThreads        5
    MaxSpareThreads       10
    MaxRequestsPerChild    0
</IfModule>
<IfModule mpm_winnt_module>
    ThreadsPerChild      150
    MaxRequestsPerChild    0
</IfModule>
EOF
    # Vhost Directory and basic setup
    mkdir /data/www/wwwroot/eyo && chmod 777 /data/www/wwwroot/eyo
    cat > /data/www/wwwroot/eyo/index.html <<EOF
<html>
<head>
<title>LAMP Install Success.</title>
</head>
<body>
<p>########################## Written By Qitan ####################################</p>
<p>####################### BLOG: http://blog.catjia.com ################################</p>
<p>####################### EMAIL: qqing_lai@hotmail.com ##############################</p>
<p>########################## DATE: 2011-11-09 ###################################</p>
<p>################# LAMP Have Successfully Installed., enjoy it! ############################</p>
</body>
</html>
EOF
    cat > /data/www/wwwroot/eyo/phpinfo.php <<EOF
<html>
<head>
<title>LAMP Install Success.</title>
</head>
<body>
<p>########################## Written By Qitan ####################################</p>
<p>####################### BLOG: http://blog.catjia.com ################################</p>
<p>####################### EMAIL: qqing_lai@hotmail.com ##############################</p>
<p>########################## DATE: 2011-11-09 ###################################</p>
<p>################# LAMP Have Successfully Installed., enjoy it! ############################</p>
</body>
</html>

<?php
    phpinfo();
?>
EOF
    $dir/apache2/bin/apachectl start

# Install Vsftpd
printf "Start install VSFTPD...n"
    yum -y install vsftpd
    chkconfig vsftpd on && /etc/init.d/vsftpd start
    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
    cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Welcome to GoeGo FTP service.
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
setproctitle_enable=YES

##Follow command for pasv mode set
#pasv_enable=YES
#pasv_min_port=24700
#pasv_max_port=24800
EOF
    # Create FTP User
    echo $ftper > /etc/vsftpd/chroot_list
    useradd -d /data/www/wwwroot/ -g ftp -s /sbin/nologin $ftper
    echo "$ftpasswd" |passwd --stdin $ftper
    /etc/init.d/vsftpd restart

/etc/init.d/vsftpd stop && /etc/init.d/mysqld stop && $dir/apache2/apachectl stop

##################### Maintenance Scripts -- Begin #############################
# Download Fetion
wget -c http://blog.catjia.com/wp-content/uploads/file/downloads/fetion.tar.bz2 && tar -jxvf fetion.tar.bz2* -C /usr/local/ && echo "/usr/local/fetion/" >> /etc/ld.so.conf && ldconfig && $FETI/fetion > /dev/null

# Warning: You need to send msg to test if Fetion is working (Note: First time send need to enter a verification code)

# Check if Apache is running.
cat > $SCRI/check_80.sh <<EOF
#!/bin/sh
host=`hostname`
httpd=`netstat -tunpl | grep :::80 | awk '{print $4}' | awk -F : '{print $4}'`
if [ "$httpd" != 80 ]
        then
        $dir/apache2/bin/apachectl start > /dev/null 2>&1
        $FETI/fetion --mobile=$mobile --pwd=$pwd --to=$mobile --msg-utf8="$host Apache service (Port: 80) is down, try to start now..."
        else
        echo "`date`, $host Apache service is running." | mail -s "$host Apache Check" $re_mail
fi
sleep 3
httpd=`netstat -tunpl | grep :::80 | awk '{print $4}' | awk -F : '{print $4}'`
if [ "$httpd" != 80 ]
        then
        $FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --msg-utf8="$host Cannot start Apache service, please login server check manually!"
fi
EOF

# Check if MySQL is running.
cat > $SCRI/check_3306.sh <<EOF
#!/bin/sh
host=`hostname`
mysqld=`ps -ef  |grep mysqld |awk '{if($3==1)print $0}'|awk '{if($1=="root")print $3 }'`
if [ "$mysqld" != 1 ]
        then
        /etc/init.d/mysqld start > /dev/null 2>&1
        $FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --msg-utf8="$host MySQL service (Port: 3306) is down, try to start now..."
        else
        echo "`date`, $host MySQL service is running." | mail -s "$host MySQL Check" $re_mail
fi
sleep 3
mysqld=`ps -ef  |grep mysqld |awk '{if($3==1)print $0}'|awk '{if($1=="root")print $3 }'`
if [ "$mysqld" != 1 ]
        then
        $FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --msg-utf8="$host Cannot start MySQL service, please login server check manually."
fi
EOF

# Check Memory userd status
cat > $SCRI/memcheck.sh <<EOF
#!/bin/sh

# Check memory used statu.

free_used=`free -m |grep Mem |awk '{print $3}'`
if [ "$free_used" -ge "3800" ]
then
echo "Memory used greater than 3800 MB, please check your Web Server's status" > /usr/local/sbin/mem.txt
$FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --msg-utf8="Memory used greater than 3800 MB, please check your Web Server's status" |mail -s "WebGoeGo Mem Used More" $re_mail < /usr/local/sbin/mem.txt > /dev/null 
rm -rf /usr/local/sbin/mem.txt
else
echo 'Memory used is normal.' > /dev/null
fi
EOF

# Check Disk used status
cat > $SCRI/diskcheck.sh <<EOF
#!/bin/sh
# Check partition sda2 (/) and sda5 (/data)

sda2_used=`df |grep sda2 |awk '{print $5}' | sed 's/%//g'`
sda5_used=`df |grep sda5 |awk '{print $5}' | sed 's/%//g'`

if [[ "$sda2_used" -ge "70" ]] || [[ "$sda5_used" -ge "85" ]]
then
echo "Disk used nearly full: `df |grep sda[2,5]` Please check your Web Server's status" > /usr/local/sbin/disk.log
$FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --file-utf8=/usr/local/sbin/disk.log |mail -s "WebGoeGo Disk Used More" $re_mail < /usr/local/sbin/disk.log
rm -rf /usr/local/sbin/disk.log
else
echo 'Disk used is normal.' > /dev/null
fi
EOF

# Check if Website is working
cat > $SCRI/web.sh <<EOF
#!/bin/sh

# Monitor Website
server_all_list=(
        www.goego.net 
        www.www.7tan.info 
        )

date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

# Send Msg to alert by Mail and Fetion.

send_msg_alert()
{
if [[ $2 = "0" ]] || [[ $2 = "2" ]]; then
echo "`date +'%Y-%m-%d %H:%M:%S'` $1 " > http_down.log
mail -s "Web Server (GoeGo or www.7tan.info) Down" $re_mail < http_down.log | $FETI/fetion --mobile=$mobile --pwd=$mpasswd --to=$mobile --msg-utf8=$1
fi
}

server_all_len=${#server_all_list[*]}
i=0
while  [ $i -lt $server_all_len ]
do
server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
server_message=" "
if curl -m 10 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
then
#status:    0,http down    1,http ok    2,http down but ping ok
status=1
echo "WebServer${server_ip},Port${server_port}is working!";
server_message="WebServer${server_ip}, Port${server_port}is working!";
else
if curl -m 30 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
then
status=1
echo "WebServer${server_ip},Port${server_port}is working!"
server_message="WebServer${server_ip}, Port${server_port}is working!";
else
if ping -c 3 $server_ip > /dev/null 2>&1
then
status=2
echo "WebServer${server_ip}, Port${server_port}cannot access Website,but can ping!";
server_message="WebServer${server_ip}, Port${server_port}cannot access Website,but can ping!";
else
status=0
echo "WenServer${server_ip}, Port${server_port}cannot access Website, and cannot ping!";
server_message="WebServer${server_ip}, Port${server_port}cannot access Website, and cannot ping!";
fi
fi
fi
send_msg_alert "${server_message}" "${status}";
let i++
done
EOF

cat >> /var/spool/cron/root <<EOF
*/10 * * * *    $SCRI/check_3306.sh
*/10 * * * *    $SCRI/check_80.sh
*/1 * * * *        $SCRI/memcheck.sh
0 */6 * * *        $SCRI/diskcheck.sh
EOF

##################### Maintenance Scripts -- End #############################

# Create log file...
ipadd=`ifconfig $eth_hw |grep "inet addr" |awk '{print $2}' |awk -F : '{print $2}'`
cat > /root/qq_lamp.log <<EOF
===============================================================================n
    SETUP OPERATION SYSTEM AND INSTALL LAMP--WRITTEN BY EYO-QITAN.
         Email: qqing_lai@hotmail.com Website: www.goego.net
            Install_Log File: qq_lamp.log Path: /root
===============================================================================n

`date`

Warning: You need to send msg to test if Fetion is working (Note: First time send need to enter a verification code)

Fetion Location: $FETI

Maintenance Scripts Locatio: $SCRI

Packages Install Location: $dir

Data Location: /data/

Packages Install:

    cmake-2.8.6.tar.gz
    httpd-2.2.21.tar.bz2
    mysql-5.5.16.tar.gz
    php-5.3.8.tar.bz2
    phpMyAdmin-3.4.7-all-languages.tar.bz2
    xcache-1.3.2.tar.gz
    ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz

IP Address: $ipadd
Hostname: $hostname
MySQL ROOT Password: $rpass
MySQL Database: eyo
MySQL eyo User: eyoadmin
MySQL eyo Password: $passwd
FTP User Name: $ftper
FTP User Password: $ftpasswd

===============================================================================n
===============================================================================n
            LAMP Have Successfully Installed., enjoy it!
                    Written by EYO-Qitan.
             Email: qqing_lai@hotmail.com Website: www.goego.net
===============================================================================n
EOF

echo -e "33[7m"
printf "=======================================================================n"
printf "            LAMP Have Successfully Installed., enjoy it!               n"
printf "                     Written by EYO-Qitan.                             n"
printf "         Email: qqing_lai@hotmail.com Website: www.goego.net           n"
printf "=======================================================================n"
echo -e "33[0m"

yum -y install sendmail mail* && chkconfig sendmail on && /etc/init.d/sendmail start
mail -s "LAMP successfully installed and REBOOT now" $re_mail < /root/qq_lamp.log > /dev/null 2>&1

echo "*/5 * * * *    ntpdate 210.72.145.44" >> /var/spool/cron/root

echo "net.ipv4.ip_local_port_range=1024 65535" >> /etc/sysctl.conf && /sbin/sysctl -p

cat >> /etc/security/limits.conf <<EOF
*    soft    nofile    65535
*    hard    nofile    70000
EOF

sleep 5

reboot

########################### HAPPY ENDDING ################################

 





(责任编辑:IT)
------分隔线----------------------------