|
@@ -29,6 +29,15 @@ JDK_DIR_NAME="jdk-11.0.16.1"
|
|
|
|
|
|
|
|
|
# 安装标识
|
|
|
+#--- 执行用户
|
|
|
+SUDO_TAG="0"
|
|
|
+SUDO_USER=""
|
|
|
+SUDO_PASSWORD=""
|
|
|
+SSH_OPTIONS="-o ConnectTimeout=600 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
|
|
+SSH_USER=""
|
|
|
+SSH_PASSWORD=""
|
|
|
+$SSH_PRIVATE_KEY=""
|
|
|
+SSH_PORT=""
|
|
|
#--- 指令
|
|
|
INIT_TAG="0"
|
|
|
#--- 指令参数
|
|
@@ -48,6 +57,7 @@ LOG_FILE="${TMP_DIR}/env-install.log"
|
|
|
ERROR_INFO="\n\033[31mERROR Summary: \033[0m\n "
|
|
|
ACCESS_INFO="\n\033[32mACCESS Summary: \033[0m\n "
|
|
|
SCRIPT_PARAMETER="$*"
|
|
|
+COMMAND_OUTPUT=""
|
|
|
|
|
|
######################################################################################################
|
|
|
# 通用函数
|
|
@@ -89,12 +99,148 @@ function log::exec() {
|
|
|
printf "[%s]: \033[34mEXEC: \033[0m%s\n" "$(date +'%Y-%m-%dT%H:%M:%S.%N%z')" "$*" >> "$LOG_FILE"
|
|
|
}
|
|
|
|
|
|
+# 检查返回码
|
|
|
+function check::exit_code() {
|
|
|
+ local code=${1:-}
|
|
|
+ local app=${2:-}
|
|
|
+ local desc=${3:-}
|
|
|
+ local exit_script=${4:-}
|
|
|
+ if [[ "${code}" == "0" ]]; then
|
|
|
+ log::info "[${app}]" "${desc} succeeded."
|
|
|
+ else
|
|
|
+ log::error "[${app}]" "${desc} failed."
|
|
|
+ [[ "$exit_script" == "exit" ]] && exit "$code"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# 重试
|
|
|
+function utils::retry() {
|
|
|
+ local retries=$1
|
|
|
+ shift
|
|
|
+ local count=0
|
|
|
+ until eval "$*"; do
|
|
|
+ exit=$?
|
|
|
+ wait=$((2 ** count))
|
|
|
+ count=$((count + 1))
|
|
|
+ if [ "$count" -lt "$retries" ]; then
|
|
|
+ echo "Retry $count/$retries exited $exit, retrying in $wait seconds..."
|
|
|
+ sleep $wait
|
|
|
+ else
|
|
|
+ echo "Retry $count/$retries exited $exit, no more retries left."
|
|
|
+ return $exit
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
+# 转义引号
|
|
|
+function utils::quote() {
|
|
|
+ # shellcheck disable=SC2046
|
|
|
+ if [ $(echo "$*" | tr -d "\n" | wc -c) -eq 0 ]; then
|
|
|
+ echo "''"
|
|
|
+ elif [ $(echo "$*" | tr -d "[a-z][A-Z][0-9]:,.=~_/\n-" | wc -c) -gt 0 ]; then
|
|
|
+ printf "%s" "$*" | sed -e "1h;2,\$H;\$!d;g" -e "s/'/\'\"\'\"\'/g" | sed -e "1h;2,\$H;\$!d;g" -e "s/^/'/g" -e "s/$/'/g"
|
|
|
+ else
|
|
|
+ echo "$*"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# 下载文件
|
|
|
+function utils::download_file() {
|
|
|
+ local url="$1"
|
|
|
+ local dest="$2"
|
|
|
+ local unzip_tag="${3:-1}"
|
|
|
+ local dest_dirname; dest_dirname=$(dirname "$dest")
|
|
|
+ local filename; filename=$(basename "$dest")
|
|
|
+ log::info "[download]" "${filename}"
|
|
|
+ command::exec "${MGMT_NODE}" "
|
|
|
+ set -e
|
|
|
+ if [ ! -f \"${dest}\" ]; then
|
|
|
+ [ ! -d \"${dest_dirname}\" ] && mkdir -pv \"${dest_dirname}\"
|
|
|
+ wget --timeout=10 --waitretry=3 --tries=5 --retry-connrefused --no-check-certificate \"${url}\" -O \"${dest}\"
|
|
|
+ if [[ \"${unzip_tag}\" == \"unzip\" ]]; then
|
|
|
+ command -v unzip 2>/dev/null || yum install -y unzip
|
|
|
+ unzip -o \"${dest}\" -d \"${dest_dirname}\"
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ echo \"${dest} is exists!\"
|
|
|
+ fi
|
|
|
+ "
|
|
|
+ local status="$?"
|
|
|
+ check::exit_code "$status" "download" "${filename}" "exit"
|
|
|
+ return "$status"
|
|
|
+}
|
|
|
+
|
|
|
+# 检查命令是否存在
|
|
|
+function check::command_exists() {
|
|
|
+ local cmd=${1}
|
|
|
+ local package=${2}
|
|
|
+ if command -V "$cmd" > /dev/null 2>&1; then
|
|
|
+ log::info "[check]" "$cmd command exists."
|
|
|
+ else
|
|
|
+ log::warning "[check]" "I require $cmd but it's not installed."
|
|
|
+ log::warning "[check]" "install $package package."
|
|
|
+ command::exec "127.0.0.1" "yum install -y ${package}"
|
|
|
+ check::exit_code "$?" "check" "$package install" "exit"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# 执行命令
|
|
|
+function command::exec() {
|
|
|
+ local host=${1:-"127.0.0.1"}
|
|
|
+ shift
|
|
|
+ local command="$*"
|
|
|
+ if [[ "${SUDO_TAG:-}" == "1" ]]; then
|
|
|
+ sudo_options="sudo -H -n -u ${SUDO_USER}"
|
|
|
+ if [[ "${SUDO_PASSWORD:-}" != "" ]]; then
|
|
|
+ sudo_options="${sudo_options// -n/} -p \"\" -S <<< \"${SUDO_PASSWORD}\""
|
|
|
+ fi
|
|
|
+ command="$sudo_options bash -c $(utils::quote "$command")"
|
|
|
+ fi
|
|
|
+ command="$(utils::quote "$command")"
|
|
|
+ if [[ "${host}" == "127.0.0.1" ]]; then
|
|
|
+ # 本地执行
|
|
|
+ log::exec "[command]" "bash -c $(printf "%s" "${command//${SUDO_PASSWORD:-}/zzzzzz}")"
|
|
|
+ # shellcheck disable=SC2094
|
|
|
+ COMMAND_OUTPUT=$(eval bash -c "${command}" 2>> "$LOG_FILE" | tee -a "$LOG_FILE")
|
|
|
+ local status=$?
|
|
|
+ else
|
|
|
+ # 远程执行
|
|
|
+ local ssh_cmd="ssh"
|
|
|
+ if [[ "${SSH_PASSWORD}" != "" ]]; then
|
|
|
+ ssh_cmd="sshpass -p \"${SSH_PASSWORD}\" ${ssh_cmd}"
|
|
|
+ elif [[ "$SSH_PRIVATE_KEY" != "" ]]; then
|
|
|
+ [ -f "${SSH_PRIVATE_KEY}" ] || { log::error "[exec]" "ssh private_key:${SSH_PRIVATE_KEY} not found."; exit 1; }
|
|
|
+ ssh_cmd="${ssh_cmd} -i $SSH_PRIVATE_KEY"
|
|
|
+ fi
|
|
|
+ log::exec "[command]" "${ssh_cmd//${SSH_PASSWORD:-}/zzzzzz} ${SSH_OPTIONS} ${SSH_USER}@${host} -p ${SSH_PORT} bash -c $(printf "%s" "${command//${SUDO_PASSWORD:-}/zzzzzz}")"
|
|
|
+ # shellcheck disable=SC2094
|
|
|
+ COMMAND_OUTPUT=$(eval "${ssh_cmd} ${SSH_OPTIONS} ${SSH_USER}@${host} -p ${SSH_PORT}" bash -c '"${command}"' 2>> "$LOG_FILE" | tee -a "$LOG_FILE")
|
|
|
+ local status=$?
|
|
|
+ fi
|
|
|
+ return $status
|
|
|
+}
|
|
|
+
|
|
|
######################################################################################################
|
|
|
# 安装函数
|
|
|
######################################################################################################
|
|
|
# 新增用户
|
|
|
function init:add_user() {
|
|
|
- log::info "[add-user]" "新增用户"
|
|
|
+ log::info "[add-user]" "新增用户[${ADD_USER_NAME}]..."
|
|
|
+ local host="127.0.0.1"
|
|
|
+ command::exec "${host}" "
|
|
|
+ # 创建用户
|
|
|
+ adduser ${ADD_USER_NAME}
|
|
|
+ # 设置密码
|
|
|
+ echo ${ADD_USER_NAME}:${ADD_USER_PASSWORD} | chpasswd
|
|
|
+ # 新增修改权限
|
|
|
+ chmod -v u+w /etc/sudoers
|
|
|
+ echo '\n${ADD_USER_NAME} ALL=(ALL) NOPASSWD:ALL\n' >> /etc/sudoers.d/crictl
|
|
|
+ # 收回修改权限
|
|
|
+ chmod -v u-w /etc/sudoers
|
|
|
+ "
|
|
|
+ check::exit_code "$?" "add-user" "$host 新增用户[${ADD_USER_NAME}]" "exit"
|
|
|
+ log::info "[add-user]" "新增用户[${ADD_USER_NAME}]成功!"
|
|
|
}
|
|
|
|
|
|
# 安装git环境
|