清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/bin/sh
#================================================================================
#name : EazyLamp
#version : 0.1a
#description : Easy-to-use on click setup/transfer tool for lamp server
# configuration under linux, as easy as wamp server.
#author : latel (latelx64@gmail.com)
#github : https://github.com/latel/EasyLamp
#liencense : GPL
#date : 2013/12/20
#------------------------------------------------------------
#history : 2013/12/20 latel first release
#================================================================================
BASE_DIR=$PWD/${0%/*}/../
cd $BASE_DIR
BASE_DIR=$PWD
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:$BASE_DIR/install/functions
TTY=`ps|grep $$|awk '{print $2}'`
USER=`who|grep ${TTY}|awk '{print $1}'`
#adjust your settings as follows which will be refered during installation
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#leave values to "do_not_install" on the item you don't wanted
#apache
apache_version="2.4.7"
#php
php_version="5.5.7"
#mysql
mysql_version="5.6.15"
mysql_password="5070474849"
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#this script shall only run in root priviledge
get_root(){
if [[ $EUID -ne 0 ]];then
echo "This script must be run as root" 1>&2
exit 1
fi
}
#detect os type
detect_os(){
if uname -a | grep -i "arch" >/dev/null 2>&1;then
echo "arch"
elif uname -a | grep -i "ubuntu|debian">/dev/null 2>&1;then
echo "debian"
elif uname -a | grep -i "centos|redhat">/dev/null 2>&1;then
echo "redhat"
elif cat /proc/version | grep -i "arch">/dev/null 2>&1;then
echo "arch"
elif cat /proc/version | grep -i "ubuntu|debian">/dev/null 2>&1;then
echo "debian"
elif cat /proc/version | grep -i "centos|redhat">/dev/null 2>&1;then
echo "redhat"
else
echo "generic"
fi
}
#check whether a command is already available in system
check_command_exists(){
local command=$1
local stop=$2
if hash $1 2>/dev/null;then
echo "0"
else
echo "1"
if [ $2 == "1" ];then
echo 'building tools $1 not installed. please do it yourself'
exit 1
fi
fi
}
lowcase(){
word=$1
echo $word | tr '[A-Z]' '[a-z]'
}
#choose yes or no
confirm(){
local prompt=$1
local yaction=$2
local naction=$3
while true; do
read -p "$prompt(y/n)?: " choice
choice=`lowcase $choice`
case $choice in
y ) eval "$yaction";return 1;break;;
n ) eval "$naction";return 0;break;;
* ) echo "wrong input, please type y or n only."
esac
done
}
#detect source code's compress format
#execute accordingly extract command
extract_source(){
#currently, only tar.gz and tar.bz2 format are supported
local zip_name=`lowcase $1`
local zip_destination=$2
cd $BASE_DIR/install
if [ -f packages/${zip_name}.tar.gz ];then
tar zxvf packages/${zip_name}.tar.gz -C $zip_destination
return 0
elif [ -f packages/${zip_name}.tar.bz2 ];then
tar jxvf packages/${zip_name}.tar.bz2 -C $zip_destination
return 0
else
echo "!!no file is available for source ${zip_name}, installation aborted."
exit 1
fi
}
#install building tools
install_tools(){
if [ "`detect_os`" == "arch" ];then
pacman -Syu
pacman -S gcc g++ make cmake wget perl curl openssl build-essential
elif [ "`detect_os`" == "debian" ];then
apt-get update
apt-get install gcc g++ make cmake wget perl curl openssl build-essential
elif [ "`detect_os`" == "redhat" ];then
yum -y gcc g++ make cmake wget perl curl openssl build-essential
fi
check_command_exists "gcc" "1"
check_command_exists "g++" "1"
check_command_exists "make" "1"
check_command_exists "cmake" "1"
check_command_exists "wget" "1"
check_command_exists "perl" "1"
check_command_exists "curl" "1"
}
#install dialog
install_dialog(){
#prepare files
tar xvf install/packages/dialog.tar.gz -C install/temp/
#install
cd install/temp/dialog-1.2-20130928
./configure
make
make install
cd $BASE_DIR
}
#install apache
install_apache(){
cd $BASE_DIR
#check previous installation
if [ -d apache* ];then
confirm "You have installed `ls|grep apache` already, uninstall first" "rm -r apache*" "apache_version=`ls|grep apache|grep -oE '((([0-9]){1,}.){2}[0-9]{1,}){1}'` ; return 0"
if [ $? != "1" ];then
return 0
fi
fi
#install dependencies
#make directory
cd $BASE_DIR
[[ -d apache-${apache_version} ]] || mkdir apache-${apache_version}
[[ -d www ]] || mkdir www
[[ -d logs ]] || mkdir logs
[[ -d conf ]] || mkdir conf
#prepare files
if [ -f www/index.php ];then
echo "htdocs files existed, ignore."
else
touch www/index.php
echo "<?php echo phpinfo(); ?>" >> www/index.php
fi
extract_source "httpd-${apache_version}" "${BASE_DIR}/install/temp/"
cd $BASE_DIR
#install
cd install/temp/httpd-${apache_version}
./configure\
--prefix=$BASE_DIR/apache-${apache_version}\
--logfiledir=$BASE_DIR/logs\
--enable-so
#--bindir=/usr/bin\
#--sbindir=/usr/sbin\
#--libdir=/usr/lib/httpd/lib\
#--libexecdir=/usr/lib/httpd/modules\
#--installbuilddir=/usr/lib/httpd/build\
#--htmldir=$BASE_DIR/www\
make
make install
#configuration
cd $BASE_DIR
groupadd httpd >/dev/null 2>&1 #create group and user if not exitsts
useradd -s /bin/false -g httpd httpd >/dev/null 2>&1
cd apache-${apache_version}
mv htdocs/index.html $BASE_DIR/www/index.html
cp conf/httpd.conf conf/httpd.conf.bak #backup original conf file
sed -i -e "s/User daemon/User httpd/" -e "s/Group daemon/Group httpd/" conf/httpd.conf
sed -i -e "s/apache-${apache_version}\/htdocs/www/" conf/httpd.conf
sed -i -e "s/#ServerName www.example.com:80/ServerName www.example.com:80/" conf/httpd.conf
sed -i -e "s/ErrorLog \"logs\/error_log\"/ErrorLog \"${BASE_DIR//\//\\/}\/logs\/httpd_error_log\"/" conf/httpd.conf
sed -i -e "s/CustomLog \"logs\/access_log\" common/CustomLog \"${BASE_DIR//\//\\/}\/logs\/httpd_access_log\" common/" conf/httpd.conf
#make files for later-reading
cd $BASE_DIR
touch {logs/httpd_access_log,logs/httpd_error_log}
#cleanup
cp apache-${apache_version}/bin/httpd apache-${apache_version}/bin/httpd.bak
strip apache-${apache_version}/bin/httpd
}
#install php
install_php(){
cd $BASE_DIR
#check previous installation
if [ -d php* ];then
confirm "You'v installed `ls|grep php` already, uninstall first" "rm -r php*" "php_version=`ls|grep php|grep -oE '((([0-9]){1,}.){2}[0-9]{1,}){1}'` ; return 0"
if [ $? != "1" ];then
return 0
fi
fi
#install dependencies
#make directory
[[ -d php-${php_version} ]] || mkdir php-${php_version}
[[ -d logs ]] || mkdir logs
[[ -d conf ]] || mkdir conf
#prepare files
extract_source "php-${php_version}" "${BASE_DIR}/install/temp/"
cd $BASE_DIR
#install
cd install/temp/php-${php_version}
./configure\
--prefix=$BASE_DIR/php-${php_version}\
--with-apxs2=$BASE_DIR/apache-${apache_version}/bin/apxs\
--with-config-file-path=$BASE_DIR/conf\
--with-mysql\
--with-pdo-mysql\
--enable-pdo\
--with-openssl\
--with-zlib\
--with-curl\
--with-gd\
--with-mcrypt #phpmyadmin need it
make
make install
#configuration
cd $BASE_DIR
mv php/etc php-${php_version}/
rm -r php
cp install/temp/php-${php_version}/php.ini-development conf/php.ini
sed -i -e "s/;date.timezone =/date.timezone = Asia\/Shanghai/" conf/php.ini
sed -i -e "s/;extension=php_mysql.dll/extension=php_mysql.dll/" conf/php.ini
sed -i -e "s/;extension=php_pdo_mysql.dll/extension=php_pdo_mysql.dll/" conf/php.ini
sed -i -e "s/mysql.default_socket =/mysql.default_socket =${BASE_DIR//\//\\/}\/mysql-${mysql_version}\/mysql.sock/" conf/php.ini
sed -i -e "s/pdo_mysql.default_socket=/pdo_mysql.default_socket=${BASE_DIR//\//\\/}\/mysql-${mysql_version}\/mysql.sock/" conf/php.ini
cp install/resource/php5_module.conf apache-${apache_version}/conf/extra/php5_module.conf
sed -i -e "s/PHPIniDir/PHPIniDir '${BASE_DIR//\//\\/}\/conf\/php.ini'/" apache-${apache_version}/conf/extra/php5_module.conf
echo "Include conf/extra/php5_module.conf" >> apache-${apache_version}/conf/httpd.conf
#do stuff for apache
cp apache-${apache_version}/conf/httpd.conf conf/httpd.conf
}
#install mysql
install_mysql(){
cd $BASE_DIR
#check previous installation
if [ -d mysql* ];then
confirm "You'v installed `ls|grep mysql` already, uninstall first" "rm -r mysql*" "mysql_version=`ls|grep mysql|grep -oE '((([0-9]){1,}.){2}[0-9]{1,}){1}'` ; return 0"
if [ $? != "1" ];then
return 0
fi
fi
#install dependencies
#make directory
cd $BASE_DIR
[[ -d mysql-${mysql_version}/data ]] || mkdir -p mysql-${mysql_version}/data
[[ -d logs ]] || mkdir logs
[[ -d conf ]] || mkdir conf
#prepare files
extract_source "mysql-${mysql_version}" "${BASE_DIR}/install/temp/"
cd $BASE_DIR
#install
cd install/temp/mysql-${mysql_version}
cmake \
-DCMAKE_INSTALL_PREFIX=$BASE_DIR/mysql-${mysql_version} \
-DMYSQL_DATADIR=$BASE_DIR/mysql-${mysql_version}/data \
-DMYSQL_UNIX_ADDR=$BASE_DIR/mysql-${mysql_version}/mysql.sock \
-DEFAULT_CHARSET=utf8 \
-DEFAULT_COLLATION=utf8_general_ci
#add a user line for coomon user to use mysql
#./configure\
# --prefix=$BASE_DIR/mysql-${mysql_version}
make
make install
#configuration
cd $BASE_DIR
groupadd mysql #create group and user if not exitstsapache-${apache_version}
useradd -s /bin/false -g mysql mysql
mysql-${mysql_version}/scripts/mysql_install_db --basedir=$BASE_DIR/mysql-${mysql_version} --datadir=$BASE_DIR/mysql-${mysql_version}/data --user=mysql
cp install/temp/mysql-${mysql_version}/support-files/mysql.server mysql-${mysql_version}/bin/mysql.server
chmod +x mysql-${mysql_version}/bin/mysql.server
cp install/temp/mysql-${mysql_version}/support-files/my-default.cnf mysql-${mysql_version}/my.cnf
cd mysql-${mysql_version}
echo "basedir = $BASE_DIR/mysql-${mysql_version}/" >> my.cnf
echo "datadir = $BASE_DIR/mysql-${mysql_version}/data" >> my.cnf
echo "port = 3306" >> my.cnf
echo "socket = $BASE_DIR/mysql-${mysql_version}/mysql.sock" >> my.cnf
echo "log-error = $BASE_DIR/logs/mysql_error.log" >> my.cnf
echo "pid-file = $BASE_DIR/mysql-${mysql_version}/mysql.pid" >> my.cnf
echo "user = mysql" >> my.cnf
cd $BASE_DIR
#make files for later-reading
touch logs/mysql_error.log
#adjust permissions
chown -R mysql.mysql mysql-${mysql_version}
}
gen_scripts(){
cd $BASE_DIR
[[ -f ezlamp-st ]] && rm ezlamp-st
[[ -f ezlamp-ki ]] && rm ezlamp-ki
[[ -f ezlamp-ki ]] && rm greenfy
cp install/resource/ezlamp-st ezlamp-st
cp install/resource/ezlamp-ki ezlamp-ki
cp install/resource/greenfy greenfy
chmod +x ezlamp-st ezlamp-ki greenfy
chown $USER ez* green*
}
run(){
cd $BASE_DIR
apache-${apache_version}/bin/apachectl -k start -f ${BASE_DIR}/conf/httpd.conf #start apache
mysql-${mysql_version}/bin/mysql.server start --explicit_defaults_for_timestamp & #start mysql daemon
}
#doing some post configuration work
post_configuration(){
cd $BASE_DIR
mysql-${mysql_version}/bin/mysql_secure_installation
}
eazylamp(){
echo
echo
echo "#############################################################################"
echo
echo "You are welcome to use this script to deploy your lamp,hope you like it."
echo "If you have any question, please submit your issues to following address"
echo "https://github.com/latel/EasyLamp"
echo
echo "#############################################################################"
echo
#user confirmation
read -p "Are you sure you want to install lamp in $BASE_DIR(y/n)?" confirm
cd $BASE_DIR
if [ $confirm = y ];then
get_root
#install_tools
touch /tmp/eazylamp_log #create file to log install information
chattr +a /tmp/eazylamp_log #not allowed to delete, only add is alllowed
detect_os
if [ "`check_command_exists "dialog"`" == "1" ];then
read -p "Dialog not detected, which can supply great installation experience, install(y/n)?: " confirm
if [ $confirm == y ];then
install_dialog
[[ $? == 0 ]] && has_dialog = 1
fi
fi
[[ -d install/temp ]] || mkdir install/temp
echo "[1/7]installing apache..."
install_apache
echo "*apache2 installed"
echo "[2/7]installing php..."
install_php
echo "*php5 installed"
echo "[3/7]installing mysql..."
install_mysql
echo "*mysql installed"
cd $BASE_DIR
echo "[4/7]removing tempotary files"
#rm -r install/temp
echo "[5/7]do some peformance enhancements, please wait..."
chown -R $USER www
echo "[6/7]generating maintain scripts..."
gen_scripts
echo
echo "install complete"
echo "#======================================"
echo "# apache: ${apache_version}"
echo "# php : ${php_version}"
echo "# mysql : ${mysql_version}"
echo "#======================================"
echo
echo "[7/7]All done. (。・ω・)ノ"
echo
echo "you may now delete the install folder now "
run
echo "http://localhost/"
else
echo "please manually move your folder to your desire position"
fi
}
eazylamp