|
|
|
@ -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环境 |
|
|
|
|