| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #!/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
|