mirror of
https://github.com/balloonwj/TeamTalk.git
synced 2026-10-18 06:17:26 +08:00
528 lines
9.3 KiB
Bash
528 lines
9.3 KiB
Bash
#!/bin/bash
|
|
# this is a setup scripts for TeamTalk
|
|
# author: luoning
|
|
# date: 09/05/2014
|
|
|
|
# setup TeamTalk
|
|
|
|
REDIS=redis
|
|
MYSQL=mariadb
|
|
NGINX_PHP=nginx_php
|
|
NGINX=nginx
|
|
PHP=php
|
|
|
|
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
|
|
IM_WEB_SETUP_BEGIN=0
|
|
IM_WEB_SETUP_SUCCESS=0
|
|
IM_SERVER_SETUP_BEGIN=0
|
|
IM_SERVER_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=$(less /etc/redhat-release)
|
|
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
|
|
;;
|
|
"$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
|
|
;;
|
|
*)
|
|
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_mariadb() {
|
|
cd $MYSQL
|
|
chmod +x setup.sh
|
|
./setup.sh check
|
|
if [ $? -eq 0 ]; then
|
|
cd $CUR_DIR
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
build_mariadb() {
|
|
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_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_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
|
|
|
|
#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
|
|
|
|
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
|
|
|
|
#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
|
|
}
|
|
|
|
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
|
|
|
|
|
|
|