You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
6.8 KiB
274 lines
6.8 KiB
#!/bin/bash
|
|
|
|
|
|
export BASE_LOG_DIR=""
|
|
export BASE_CONF_DIR=""
|
|
export BASE_DATA_DIR=""
|
|
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
SHELL_LOG="${DIR}/console.out"
|
|
|
|
export SQL_SOURCE_PATH="${DIR}/db/datax_web.sql"
|
|
|
|
MODULES_DIR="${DIR}/../modules"
|
|
PACKAGE_DIR="${DIR}/../packages"
|
|
|
|
MODULE_LIST=()
|
|
CONF_FILE_PATH="bin/configure.sh"
|
|
FORCE_INSTALL=false
|
|
SKIP_PACKAGE=false
|
|
SAFE_MODE=true
|
|
UNSAFE_COMMAND=""
|
|
USER=`whoami`
|
|
SUDO_USER=false
|
|
|
|
usage(){
|
|
printf "\033[1m Install usage:\n\033[0m"
|
|
printf "\t%-15s %-15s %-2s \n" "-m|--modules" "modules to install" "Define the modules to install"
|
|
printf "\t%-15s %-15s %-2s \n" "-f|--force" "force install" "Force program to install modules"
|
|
printf "\t%-15s %-15s %-2s \n" "--skip-pack" "do not decompress" "Skip the phrase of decompressing packages"
|
|
printf "\t%-15s %-15s %-2s \n" "--unsafe" "unsafe mode" "Will clean the module directory existed"
|
|
printf "\t%-15s %-15s %-2s \n" "--safe" "safe mode" "Will not modify the module directory existed (Default)"
|
|
printf "\t%-15s %-15s %-2s \n" "-h|--help" "usage" "View command list"
|
|
}
|
|
|
|
function LOG(){
|
|
currentTime=`date "+%Y-%m-%d %H:%M:%S.%3N"`
|
|
echo -e "$currentTime [${1}] ($$) $2" | tee -a ${SHELL_LOG}
|
|
}
|
|
|
|
is_sudo_user(){
|
|
sudo -v >/dev/null 2>&1
|
|
}
|
|
|
|
clean_modules(){
|
|
if [ ${#MODULE_LIST[@]} -gt 0 ]; then
|
|
for server in ${MODULE_LIST[@]}
|
|
do
|
|
rm -rf ${MODULES_DIR}/${server}
|
|
done
|
|
else
|
|
rm -rf ${MODULES_DIR}/*
|
|
fi
|
|
}
|
|
|
|
uncompress_packages(){
|
|
local list=`ls ${PACKAGE_DIR}`
|
|
for pack in ${list}
|
|
do
|
|
local uncompress=true
|
|
if [ ${#PACKAGE_NAMES[@]} -gt 0 ]; then
|
|
uncompress=false
|
|
for server in ${PACKAGE_NAMES[@]}
|
|
do
|
|
if [ ${server} == ${pack%%.tar.gz*} ] || [ ${server} == ${pack%%.zip*} ]; then
|
|
uncompress=true
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if [ ${uncompress} == true ]; then
|
|
if [[ ${pack} =~ tar\.gz$ ]]; then
|
|
local do_uncompress=0
|
|
if [ ${FORCE_INSTALL} == false ]; then
|
|
interact_echo "Do you want to decompress this package: [${pack}]?"
|
|
do_uncompress=$?
|
|
fi
|
|
if [ ${do_uncompress} == 0 ]; then
|
|
LOG INFO "\033[1m Uncompress package: [${pack}] to modules directory\033[0m"
|
|
tar --skip-old-files -zxf ${PACKAGE_DIR}/${pack} -C ${MODULES_DIR}
|
|
fi
|
|
elif [[ ${pack} =~ zip$ ]]; then
|
|
local do_uncompress=0
|
|
if [ ${FORCE_INSTALL} == false ]; then
|
|
interact_echo "Do you want to decompress this package: [${pack}]?"
|
|
do_uncompress=$?
|
|
fi
|
|
if [ ${do_uncompress} == 0 ]; then
|
|
LOG INFO "\033[1m Uncompress package: [${pack}] to modules directory\033[0m"
|
|
unzip -nq ${PACKAGE_DIR}/${pack} -d ${MODULES_DIR}
|
|
fi
|
|
fi
|
|
# skip other packages
|
|
fi
|
|
done
|
|
}
|
|
|
|
interact_echo(){
|
|
while [ 1 ]; do
|
|
read -p "$1 (Y/N)" yn
|
|
if [ "${yn}x" == "Yx" ] || [ "${yn}x" == "yx" ]; then
|
|
return 0
|
|
elif [ "${yn}x" == "Nx" ] || [ "${yn}x" == "nx" ]; then
|
|
return 1
|
|
else
|
|
echo "Unknown choise: [$yn], please choose again."
|
|
fi
|
|
done
|
|
}
|
|
|
|
install_modules(){
|
|
LOG INFO "\033[1m ####### Start To Install Modules ######\033[0m"
|
|
LOG INFO "Module servers could be installed:"
|
|
for server in ${MODULE_LIST[@]}
|
|
do
|
|
printf "\\033[1m [${server}] \033[0m"
|
|
done
|
|
echo ""
|
|
for server in ${MODULE_LIST[@]}
|
|
do
|
|
if [ ${FORCE_INSTALL} == false ]; then
|
|
interact_echo "Do you want to confiugre and install [${server}]?"
|
|
if [ $? == 0 ]; then
|
|
LOG INFO "\033[1m Install module server: [${server}]\033[0m"
|
|
# Call configure.sh
|
|
${MODULES_DIR}/${server}/${CONF_FILE_PATH} ${UNSAFE_COMMAND}
|
|
fi
|
|
else
|
|
LOG INFO "\033[1m Install module server: [${server}]\033[0m"
|
|
# Call configure.sh
|
|
${MODULES_DIR}/${server}/${CONF_FILE_PATH} ${UNSAFE_COMMAND}
|
|
fi
|
|
done
|
|
LOG INFO "\033[1m ####### Finish To Install Modules ######\033[0m"
|
|
}
|
|
|
|
scan_to_install_modules(){
|
|
echo "Scan modules directory: [$1] to find server under dataxweb"
|
|
let c=0
|
|
ls_out=`ls $1`
|
|
for dir in ${ls_out}
|
|
do
|
|
if test -e "$1/${dir}/${CONF_FILE_PATH}"; then
|
|
MODULE_LIST[$c]=${dir}
|
|
((c++))
|
|
fi
|
|
done
|
|
install_modules
|
|
}
|
|
|
|
while [ 1 ]; do
|
|
case ${!OPTIND} in
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
-m|--modules)
|
|
i=1
|
|
if [ -z $2 ]; then
|
|
echo "Empty modules"
|
|
exit 1
|
|
fi
|
|
while [ 1 ]; do
|
|
split=`echo $2|cut -d "," -f${i}`
|
|
if [ "$split" != "" ];
|
|
then
|
|
c=$(($i - 1))
|
|
MODULE_LIST[$c]=${split}
|
|
i=$(($i + 1))
|
|
else
|
|
break
|
|
fi
|
|
if [ "`echo $2 |grep ","`" == "" ]; then
|
|
break
|
|
fi
|
|
done
|
|
shift 2
|
|
;;
|
|
-f|--force)
|
|
FORCE_INSTALL=true
|
|
shift 1
|
|
;;
|
|
--skip-pack)
|
|
SKIP_PACKAGE=true
|
|
shift 1
|
|
;;
|
|
--safe)
|
|
SAFE_MODE=true
|
|
UNSAFE_COMMAND=""
|
|
shift 1
|
|
;;
|
|
--unsafe)
|
|
SAFE_MODE=false
|
|
UNSAFE_COMMAND="--unsafe"
|
|
shift 1
|
|
;;
|
|
"")
|
|
break
|
|
;;
|
|
*)
|
|
echo "Argument error! " 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
is_sudo_user
|
|
if [ $? == 0 ]; then
|
|
SUDO_USER=true
|
|
fi
|
|
MODULE_LIST_RESOLVED=()
|
|
if [ ${#MODULE_LIST[@]} -gt 0 ]; then
|
|
c=0
|
|
RESOLVED_DIR=${PACKAGE_DIR}
|
|
if [ ${SKIP_PACKAGE} == true ]; then
|
|
RESOLVED_DIR=${MODULES_DIR}
|
|
fi
|
|
for server in ${MODULE_LIST[@]}
|
|
do
|
|
server_list=`ls ${RESOLVED_DIR} | grep -E "^(${server}|${server}_[0-9]+\\.[0-9]+\\.[0-9]+\\.RELEASE_[0-9]+)(\\.tar\\.gz|\\.zip|)$"`
|
|
for _server in ${server_list}
|
|
do
|
|
# More better method to cut string?
|
|
_server=${_server%%.tar.gz*}
|
|
_server=${_server%%zip*}
|
|
MODULE_LIST_RESOLVED[$c]=${_server}
|
|
c=$(($c + 1))
|
|
done
|
|
done
|
|
if [ ${SKIP_PACKAGE} == true ]; then
|
|
MODULE_LIST=${MODULE_LIST_RESOLVED}
|
|
else
|
|
PACKAGE_NAMES=${MODULE_LIST_RESOLVED}
|
|
fi
|
|
fi
|
|
|
|
if [ ! -d ${MODULES_DIR} ]; then
|
|
LOG INFO "Creating directory: ["${MODULES_DIR}"]."
|
|
mkdir -p ${MODULES_DIR}
|
|
fi
|
|
|
|
if [ ${SAFE_MODE} == false ]; then
|
|
LOG INFO "\033[1m ####### Start To Clean Modules Directory ######\033[0m"
|
|
LOG INFO "Cleanning...."
|
|
if [ ${MODULES_DIR} == "" ] || [ ${MODULES_DIR} == "/" ]; then
|
|
LOG INFO "Illegal modules directory: ${MODULES_DIR}" 1>&2
|
|
exit 1
|
|
fi
|
|
clean_modules
|
|
LOG INFO "\033[1m ####### Finish To Clean Modules Directory ######\033[0m"
|
|
fi
|
|
|
|
if [ ${SKIP_PACKAGE} == false ]; then
|
|
LOG INFO "\033[1m ####### Start To Uncompress Packages ######\033[0m"
|
|
LOG INFO "Uncompressing...."
|
|
uncompress_packages
|
|
LOG INFO "\033[1m ####### Finish To Umcompress Packages ######\033[0m"
|
|
fi
|
|
|
|
if [ ${#MODULE_LIST[@]} -gt 0 ]; then
|
|
for server in ${MODULE_LIST}
|
|
do
|
|
if [ ! -f ${MODULES_DIR}/${server}/${CONF_FILE_PATH} ]; then
|
|
LOG INFO "Module [${server}] defined doesn't have configure.sh shell" 1>&2
|
|
exit 1
|
|
fi
|
|
done
|
|
install_modules
|
|
else
|
|
# Scan modules directory
|
|
scan_to_install_modules ${MODULES_DIR}
|
|
fi
|
|
|
|
exit 0
|
|
|