/TT/setup.sh
https://gitlab.com/lisit1003/TTAutoDeploy · Shell · 616 lines · 519 code · 63 blank · 34 comment · 61 complexity · 05b75e2808b5c518a9c309584531c280 MD5 · raw file
- #!/bin/bash
- # this is a setup scripts for TeamTalk
- # author: luoning
- # date: 09/05/2014
- # setup TeamTalk
- REDIS=redis
- MYSQL=percona
- NGINX_PHP=nginx_php
- NGINX=nginx
- PHP=php
- JDK=jdk
- IM_WEB=im_web
- IM_SERVER=im_server
- IM_DB_PROXY=im_db_proxy
- CUR_DIR=
- SETUP_PROGRESS=setup.progress
- REDIS_SETUP_BEGIN=0
- REDIS_SETUP_SUCCESS=0
- MYSQL_SETUP_BEGIN=0
- MYSQL_SETUP_SUCCESS=0
- NGINX_SETUP_BEGIN=0
- NGINX_SETUP_SUCCESS=0
- PHP_SETUP_BEGIN=0
- PHP_SETUP_SUCCESS=0
- JDK_SETUP_BEGIN=0
- JDK_SETUP_SUCCESS=0
- IM_WEB_SETUP_BEGIN=0
- IM_WEB_SETUP_SUCCESS=0
- IM_SERVER_SETUP_BEGIN=0
- IM_SERVER_SETUP_SUCCESS=0
- IM_DB_PROXY_SETUP_BEGIN=0
- IM_DB_PROXY_SETUP_SUCCESS=0
- # Check if user is root
- check_user() {
- if [ $(id -u) != "0" ]; then
- echo "Error: You must be root to run this script, please use root to install im"
- exit 1
- fi
- }
- check_os() {
- OS_VERSION=$(cat /etc/issue)
- OS_BIT=$(getconf LONG_BIT)
- #echo "$OS_VERSION, $OS_BIT bit..."
- if [[ $OS_VERSION =~ "CentOS" ]]; then
- if [ $OS_BIT == 64 ]; then
- return 0
- else
- echo "Error: OS must be CentOS 64bit to run this script."
- exit 1
- fi
- else
- echo "Error: OS must be CentOS 64bit to run this script."
- exit 1
- fi
- }
- print_hello() {
- echo "========================================================================="
- echo "TeamTalk V1.0 for CentOS Linux Server, Written by Luoning"
- echo "========================================================================="
- echo "A tool to auto-compile & install TeamTalk on Linux "
- echo ""
- echo "For more information please visit https://github.com/mogutt/TTAutoDeploy/"
- echo "========================================================================="
- }
- get_cur_dir() {
- # Get the fully qualified path to the script
- case $0 in
- /*)
- SCRIPT="$0"
- ;;
- *)
- PWD_DIR=$(pwd);
- SCRIPT="${PWD_DIR}/$0"
- ;;
- esac
- # Resolve the true real path without any sym links.
- CHANGED=true
- while [ "X$CHANGED" != "X" ]
- do
- # Change spaces to ":" so the tokens can be parsed.
- SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
- # Get the real path to this script, resolving any symbolic links
- TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
- REALPATH=
- for C in $TOKENS; do
- # Change any ":" in the token back to a space.
- C=`echo $C | sed -e 's;:; ;g'`
- REALPATH="$REALPATH/$C"
- # If REALPATH is a sym link, resolve it. Loop for nested links.
- while [ -h "$REALPATH" ] ; do
- LS="`ls -ld "$REALPATH"`"
- LINK="`expr "$LS" : '.*-> \(.*\)$'`"
- if expr "$LINK" : '/.*' > /dev/null; then
- # LINK is absolute.
- REALPATH="$LINK"
- else
- # LINK is relative.
- REALPATH="`dirname "$REALPATH"`""/$LINK"
- fi
- done
- done
- if [ "$REALPATH" = "$SCRIPT" ]
- then
- CHANGED=""
- else
- SCRIPT="$REALPATH"
- fi
- done
- # Change the current directory to the location of the script
- CUR_DIR=$(dirname "${REALPATH}")
- }
- setup_begin() {
- # example: redis start
- echo "$1 start" >> $CUR_DIR/$SETUP_PROGRESS
- }
- setup_success() {
- # example: redis success
- echo "$1 success" >> $CUR_DIR/$SETUP_PROGRESS
- }
- get_setup_process() {
- if [ -f $CUR_DIR/$SETUP_PROGRESS ]; then
- while read line
- do
- case $line in
- "$REDIS start")
- REDIS_SETUP_BEGIN=1
- ;;
- "$REDIS success")
- REDIS_SETUP_SUCCESS=1
- ;;
- "$MYSQL start")
- MYSQL_SETUP_BEGIN=1
- ;;
- "$MYSQL success")
- MYSQL_SETUP_SUCCESS=1
- ;;
- "$NGINX start")
- NGINX_SETUP_BEGIN=1
- ;;
- "$NGINX success")
- NGINX_SETUP_SUCCESS=1
- ;;
- "$PHP start")
- PHP_SETUP_BEGIN=1
- ;;
- "$PHP success")
- PHP_SETUP_SUCCESS=1
- ;;
- "$JDK start")
- JDK_SETUP_BEGIN=1
- ;;
- "$JDK success")
- JDK_SETUP_SUCCESS=1
- ;;
- "$IM_WEB start")
- IM_WEB_SETUP_BEGIN=1
- ;;
- "$IM_WEB success")
- IM_WEB_SETUP_SUCCESS=1
- ;;
- "$IM_SERVER start")
- IM_SERVER_SETUP_BEGIN=1
- ;;
- "$IM_SERVER success")
- IM_SERVER_SETUP_SUCCESS=1
- ;;
- "$IM_DB_PROXY start")
- IM_DB_PROXY_SETUP_BEGIN=1
- ;;
- "$IM_DB_PROXY success")
- IM_DB_PROXY_SETUP_SUCCESS=1
- ;;
- *)
- echo "unknown setup progress: $line "
- ;;
- esac
- done < $CUR_DIR/$SETUP_PROGRESS
- fi
- }
- check_redis() {
- cd $REDIS
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_redis() {
- cd $REDIS
- chmod +x setup.sh
- setup_begin $REDIS
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $REDIS
- cd $CUR_DIR
- else
- return 1
- fi
-
- }
- check_percona() {
- cd $MYSQL
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_percona() {
- cd $MYSQL
- chmod +x setup.sh
- setup_begin $MYSQL
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $MYSQL
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_nginx() {
- cd $NGINX_PHP
- cd $NGINX
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_php() {
- cd $NGINX_PHP
- cd $PHP
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_nginx() {
- cd $NGINX_PHP
- cd $NGINX
- chmod +x setup.sh
- setup_begin $NGINX
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $NGINX
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_php() {
- cd $NGINX_PHP
- cd $PHP
- chmod +x setup.sh
- setup_begin $PHP
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $PHP
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_jdk() {
- cd $JDK
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_jdk() {
- cd $JDK
- chmod +x setup.sh
- setup_begin $JDK
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $JDK
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_im_web() {
- cd $IM_WEB
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_im_web() {
- cd $IM_WEB
- chmod +x setup.sh
- setup_begin $IM_WEB
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $IM_WEB
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_im_db_proxy() {
- cd $IM_DB_PROXY
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_im_db_proxy() {
- cd $IM_DB_PROXY
- chmod +x setup.sh
- setup_begin $IM_DB_PROXY
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $IM_DB_PROXY
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_im_server() {
- cd $IM_SERVER
- chmod +x setup.sh
- ./setup.sh check
- if [ $? -eq 0 ]; then
- cd $CUR_DIR
- else
- return 1
- fi
- }
- build_im_server() {
- cd $IM_SERVER
- chmod +x setup.sh
- setup_begin $IM_SERVER
- ./setup.sh install
- if [ $? -eq 0 ]; then
- setup_success $IM_SERVER
- cd $CUR_DIR
- else
- return 1
- fi
- }
- check_install() {
- local MODULE=$1
- local MODULE_SETUP_BEGIN=$2
- local MODULE_SETUP_SUCCESS=$3
- if [ $MODULE_SETUP_BEGIN = 1 ] && [ $MODULE_SETUP_SUCCESS = 1 ]; then
- echo "$MODULE has installed, skip check..."
- return 2
- else
- if [ $MODULE_SETUP_BEGIN = 1 ] && [ $MODULE_SETUP_SUCCESS = 0 ]; then
- echo "Warning: $MODULE has installed before, but failed by some reason, check/build again?(Y/N)"
- while read input
- do
- if [ $input = "Y" ] || [ $input = "y" ]; then
- return 0
- elif [ $input = "N" ] || [ $input = "n" ]; then
- return 1
- else
- echo "unknown input, try again please, check/build again?(Y/N)."
- continue
- fi
- done
- fi
- fi
- return 0
- }
- check_env() {
- local MODULE=$1
- echo "start to check $MODULE..."
- check_$MODULE
- if [ $? -eq 0 ]; then
- echo "check $MODULE successed."
- else
- echo "Error: check $MODULE failed, stop install."
- exit 1
- fi
- }
- check_module() {
- local MODULE=$1
- local MODULE_SETUP_BEGIN=$2
- local MODULE_SETUP_SUCCESS=$3
- check_install $MODULE $MODULE_SETUP_BEGIN $MODULE_SETUP_SUCCESS
- RET=$?
- if [ $RET -eq 0 ]; then
- check_env $MODULE
- elif [ $RET -eq 1 ]; then
- return 1
- fi
- return 0
- }
- check_all() {
- get_setup_process
- #redis
- check_module $REDIS $REDIS_SETUP_BEGIN $REDIS_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
-
- #mysql
- check_module $MYSQL $MYSQL_SETUP_BEGIN $MYSQL_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #nginx
- check_module $NGINX $NGINX_SETUP_BEGIN $NGINX_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
-
- #php
- check_module $PHP $PHP_SETUP_BEGIN $PHP_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #jdk
- check_module $JDK $JDK_SETUP_BEGIN $JDK_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_web
- check_module $IM_WEB $IM_WEB_SETUP_BEGIN $IM_WEB_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_server
- check_module $IM_SERVER $IM_SERVER_SETUP_BEGIN $IM_SERVER_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_db_proxy
- check_module $IM_DB_PROXY $IM_DB_PROXY_SETUP_BEGIN $IM_DB_PROXY_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
-
- echo "Check TeamTalk successed, and you can install TeamTalk now."
- }
- clean_yum() {
- YUM_PID=/var/run/yum.pid
- if [ -f "$YUM_PID" ]; then
- set -x
- rm -f YUM_PID
- killall yum
- set +x
- fi
- }
- build_module() {
- local MODULE=$1
- local MODULE_SETUP_BEGIN=$2
- local MODULE_SETUP_SUCCESS=$3
- if [ $MODULE_SETUP_BEGIN = 1 ] && [ $MODULE_SETUP_SUCCESS = 1 ]; then
- echo "$MODULE has installed, skip build..."
- else
- echo "start to build $MODULE..."
- build_$MODULE
- if [ $? -eq 0 ]; then
- echo "build $MODULE successed."
- else
- echo "Error: build $MODULE failed, stop install."
- return 1
- fi
- fi
- }
- build_all() {
- clean_yum
- yum -y install yum
- if [ $? -eq 0 ]; then
- echo "update yum successed."
- else
- echo "update yum failed."
- exit 1
- fi
- #redis
- build_module $REDIS $REDIS_SETUP_BEGIN $REDIS_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #mysql
- build_module $MYSQL $MYSQL_SETUP_BEGIN $MYSQL_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #nginx
- build_module $NGINX $NGINX_SETUP_BEGIN $NGINX_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #php
- build_module $PHP $PHP_SETUP_BEGIN $PHP_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #jdk
- build_module $JDK $JDK_SETUP_BEGIN $JDK_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_web
- build_module $IM_WEB $IM_WEB_SETUP_BEGIN $IM_WEB_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_server
- build_module $IM_SERVER $IM_SERVER_SETUP_BEGIN $IM_SERVER_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- #im_db_proxy
- build_module $IM_DB_PROXY $IM_DB_PROXY_SETUP_BEGIN $IM_DB_PROXY_SETUP_SUCCESS
- if [ $? -eq 1 ]; then
- exit 1
- fi
- }
- print_help() {
- echo "Usage: "
- echo " $0 check --- check environment"
- echo " $0 install --- check & run scripts to install"
- }
- case $1 in
- check)
- print_hello
- check_user
- check_os
- get_cur_dir
- check_all
- ;;
- install)
- print_hello
- check_user
- check_os
- get_cur_dir
- check_all
- build_all
- ;;
- *)
- print_help
- ;;
- esac