|
@@ -0,0 +1,802 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
|
|
+
|
|
|
+export TMOUT=0
|
|
|
+current_dir=$(cd `dirname "${BASH_SOURCE}"` ; pwd)
|
|
|
+log_path="${current_dir}"/install.log
|
|
|
+function InstallLog(){
|
|
|
+ [[ $# -ne 2 ]] && return 0
|
|
|
+ case $1 in
|
|
|
+ -E|-e)
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [ERROR] [${FUNCNAME[2]}]: ${2}" >> "${log_path}"
|
|
|
+ echo -e "\033[1;31m$(date +%Y-%m-%d\ %H:%M:%S) [ERROR] [${FUNCNAME[1]}]: ${2}\033[0m"
|
|
|
+ ;;
|
|
|
+ -I|-i)
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [INFO] [${FUNCNAME[2]}]: ${2}" >> "${log_path}"
|
|
|
+ echo -e "\033[1;32m$(date +%Y-%m-%d\ %H:%M:%S) [INFO] [${FUNCNAME[1]}]: ${2}\033[0m"
|
|
|
+ ;;
|
|
|
+ -C|-c)
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [INPUT] [${FUNCNAME[2]}]: ${2}" >> "${log_path}"
|
|
|
+ echo -e "\033[1;34m$(date +%Y-%m-%d\ %H:%M:%S) [INPUT] [${FUNCNAME[1]}]: ${2}\033[0m"
|
|
|
+ ;;
|
|
|
+ -W|-w)
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S) [WARN] [${FUNCNAME[2]}]: ${2}" >> "${log_path}"
|
|
|
+ echo -e "\033[1;33m$(date +%Y-%m-%d\ %H:%M:%S) [WARN] [${FUNCNAME[1]}]: ${2}\033[0m"
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S)[Other] [${FUNCNAME[2]}]: ${2}" >> "${log_path}"
|
|
|
+ echo -e "$(date +%Y-%m-%d\ %H:%M:%S)[Other] [${FUNCNAME[1]}]: ${2}"
|
|
|
+ esac
|
|
|
+}
|
|
|
+
|
|
|
+function CheckRunning() {
|
|
|
+ TMPFILE=/tmp/install.run
|
|
|
+ if [ -e $TMPFILE ]; then
|
|
|
+ InstallLog -e "Other instance is running!"
|
|
|
+ exit 0
|
|
|
+ else
|
|
|
+ touch $TMPFILE
|
|
|
+ chmod 600 $TMPFILE
|
|
|
+ fi
|
|
|
+ # shellcheck disable=SC2064
|
|
|
+ trap "rm -f ${TMPFILE}; exit" 0 1 2 3 15
|
|
|
+ if [ "$(id -u)" != "0" ]; then
|
|
|
+ InstallLog -e "Require user root to run the script."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+}
|
|
|
+CheckRunning
|
|
|
+Kill_PM()
|
|
|
+{
|
|
|
+ if ps aux | grep -E "yum|dnf" | grep -qv "grep"; then
|
|
|
+ kill -9 $(ps -ef|grep -E "yum|dnf"|grep -v grep|awk '{print $2}')
|
|
|
+ if [ -s /var/run/yum.pid ]; then
|
|
|
+ rm -f /var/run/yum.pid
|
|
|
+ fi
|
|
|
+ elif ps aux | grep -E "apt-get|dpkg|apt" | grep -qv "grep"; then
|
|
|
+ kill -9 $(ps -ef|grep -E "apt-get|apt|dpkg"|grep -v grep|awk '{print $2}')
|
|
|
+ if [[ -s /var/lib/dpkg/lock-frontend || -s /var/lib/dpkg/lock ]]; then
|
|
|
+ rm -f /var/lib/dpkg/lock-frontend
|
|
|
+ rm -f /var/lib/dpkg/lock
|
|
|
+ dpkg --configure -a
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+Press_Start()
|
|
|
+{
|
|
|
+ echo ""
|
|
|
+ InstallLog -i "Press any key to start...or Press Ctrl+c to cancel"
|
|
|
+ OLDCONFIG=`stty -g`
|
|
|
+ stty -icanon -echo min 1 time 0
|
|
|
+ dd count=1 2>/dev/null
|
|
|
+ stty ${OLDCONFIG}
|
|
|
+}
|
|
|
+
|
|
|
+Install_LSB()
|
|
|
+{
|
|
|
+ echo "[+] Installing lsb..."
|
|
|
+ if [ "$PM" == "yum" ]; then
|
|
|
+ yum -y install redhat-lsb
|
|
|
+ elif [ "$PM" == "apt" ]; then
|
|
|
+ apt-get update
|
|
|
+ apt-get --no-install-recommends install -y lsb-release
|
|
|
+ fi
|
|
|
+}
|
|
|
+Get_Dist_Version()
|
|
|
+{
|
|
|
+ if command -v lsb_release >/dev/null 2>&1; then
|
|
|
+ DISTRO_Version=$(lsb_release -sr)
|
|
|
+ elif [ -f /etc/lsb-release ]; then
|
|
|
+ . /etc/lsb-release
|
|
|
+ DISTRO_Version="$DISTRIB_RELEASE"
|
|
|
+ elif [ -f /etc/os-release ]; then
|
|
|
+ . /etc/os-release
|
|
|
+ DISTRO_Version="$VERSION_ID"
|
|
|
+ fi
|
|
|
+ if [[ "${DISTRO}" = "" || "${DISTRO_Version}" = "" ]]; then
|
|
|
+ if command -v python2 >/dev/null 2>&1; then
|
|
|
+ DISTRO_Version=$(python2 -c 'import platform; print platform.linux_distribution()[1]')
|
|
|
+ elif command -v python3 >/dev/null 2>&1; then
|
|
|
+ DISTRO_Version=$(python3 -c 'import platform; print(platform.linux_distribution()[1])')
|
|
|
+ else
|
|
|
+ Install_LSB
|
|
|
+ DISTRO_Version=`lsb_release -rs`
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ printf -v "${DISTRO}_Version" '%s' "${DISTRO_Version}"
|
|
|
+}
|
|
|
+
|
|
|
+Get_Dist_Name()
|
|
|
+{
|
|
|
+ if grep -Eqi "Alibaba" /etc/issue || grep -Eq "Alibaba Cloud Linux" /etc/*-release; then
|
|
|
+ DISTRO='Alibaba'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun Linux" /etc/*-release; then
|
|
|
+ DISTRO='Aliyun'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Amazon Linux" /etc/issue || grep -Eq "Amazon Linux" /etc/*-release; then
|
|
|
+ DISTRO='Amazon'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
|
|
|
+ DISTRO='Fedora'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Oracle Linux" /etc/issue || grep -Eq "Oracle Linux" /etc/*-release; then
|
|
|
+ DISTRO='Oracle'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "rockylinux" /etc/issue || grep -Eq "Rocky Linux" /etc/*-release; then
|
|
|
+ DISTRO='Rocky'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "almalinux" /etc/issue || grep -Eq "AlmaLinux" /etc/*-release; then
|
|
|
+ DISTRO='Alma'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "openEuler" /etc/issue || grep -Eq "openEuler" /etc/*-release; then
|
|
|
+ DISTRO='openEuler'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Anolis OS" /etc/issue || grep -Eq "Anolis OS" /etc/*-release; then
|
|
|
+ DISTRO='Anolis'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Kylin Linux Advanced Server" /etc/issue || grep -Eq "Kylin Linux Advanced Server" /etc/*-release; then
|
|
|
+ DISTRO='Kylin'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "OpenCloudOS" /etc/issue || grep -Eq "OpenCloudOS" /etc/*-release; then
|
|
|
+ DISTRO='OpenCloudOS'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Huawei Cloud EulerOS" /etc/issue || grep -Eq "Huawei Cloud EulerOS" /etc/*-release; then
|
|
|
+ DISTRO='HCE'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
|
|
|
+ DISTRO='CentOS'
|
|
|
+ PM='yum'
|
|
|
+ if grep -Eq "CentOS Stream" /etc/*-release; then
|
|
|
+ isCentosStream='y'
|
|
|
+ fi
|
|
|
+ elif grep -Eqi "Red Hat Enterprise Linux" /etc/issue || grep -Eq "Red Hat Enterprise Linux" /etc/*-release; then
|
|
|
+ DISTRO='RHEL'
|
|
|
+ PM='yum'
|
|
|
+ elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
|
|
|
+ DISTRO='Ubuntu'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then
|
|
|
+ DISTRO='Raspbian'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then
|
|
|
+ DISTRO='Deepin'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "Mint" /etc/issue || grep -Eq "Mint" /etc/*-release; then
|
|
|
+ DISTRO='Mint'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "Kali" /etc/issue || grep -Eq "Kali" /etc/*-release; then
|
|
|
+ DISTRO='Kali'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
|
|
|
+ DISTRO='Debian'
|
|
|
+ PM='apt'
|
|
|
+ elif grep -Eqi "UnionTech OS|UOS" /etc/issue || grep -Eq "UnionTech OS|UOS" /etc/*-release; then
|
|
|
+ DISTRO='UOS'
|
|
|
+ if command -v apt >/dev/null 2>&1; then
|
|
|
+ PM='apt'
|
|
|
+ elif command -v yum >/dev/null 2>&1; then
|
|
|
+ PM='yum'
|
|
|
+ fi
|
|
|
+ elif grep -Eqi "Kylin Linux Desktop" /etc/issue || grep -Eq "Kylin Linux Desktop" /etc/*-release; then
|
|
|
+ DISTRO='Kylin'
|
|
|
+ PM='apt'
|
|
|
+ else
|
|
|
+ DISTRO='unknow'
|
|
|
+ fi
|
|
|
+ Get_OS_Bit
|
|
|
+}
|
|
|
+
|
|
|
+Get_RHEL_Version()
|
|
|
+{
|
|
|
+ Get_Dist_Name
|
|
|
+ if [ "${DISTRO}" = "RHEL" ]; then
|
|
|
+ if grep -Eqi "release 5." /etc/redhat-release; then
|
|
|
+ echo "Current Version: RHEL Ver 5"
|
|
|
+ RHEL_Ver='5'
|
|
|
+ elif grep -Eqi "release 6." /etc/redhat-release; then
|
|
|
+ echo "Current Version: RHEL Ver 6"
|
|
|
+ RHEL_Ver='6'
|
|
|
+ elif grep -Eqi "release 7." /etc/redhat-release; then
|
|
|
+ echo "Current Version: RHEL Ver 7"
|
|
|
+ RHEL_Ver='7'
|
|
|
+ elif grep -Eqi "release 8." /etc/redhat-release; then
|
|
|
+ echo "Current Version: RHEL Ver 8"
|
|
|
+ RHEL_Ver='8'
|
|
|
+ elif grep -Eqi "release 9." /etc/redhat-release; then
|
|
|
+ echo "Current Version: RHEL Ver 9"
|
|
|
+ RHEL_Ver='9'
|
|
|
+ fi
|
|
|
+ RHEL_Version="$(cat /etc/redhat-release | sed 's/.*release\ //' | sed 's/\ .*//')"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+Get_OS_Bit()
|
|
|
+{
|
|
|
+ if [[ `getconf WORD_BIT` = '32' && `getconf LONG_BIT` = '64' ]] ; then
|
|
|
+ Is_64bit='y'
|
|
|
+ ARCH='x86_64'
|
|
|
+ DB_ARCH='x86_64'
|
|
|
+ else
|
|
|
+ Is_64bit='n'
|
|
|
+ ARCH='i386'
|
|
|
+ DB_ARCH='i686'
|
|
|
+ fi
|
|
|
+
|
|
|
+ if uname -m | grep -Eqi "arm|aarch64"; then
|
|
|
+ Is_ARM='y'
|
|
|
+ if uname -m | grep -Eqi "armv7|armv6"; then
|
|
|
+ ARCH='armhf'
|
|
|
+ elif uname -m | grep -Eqi "aarch64"; then
|
|
|
+ ARCH='aarch64'
|
|
|
+ DB_ARCH='aarch64'
|
|
|
+ else
|
|
|
+ ARCH='arm'
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+Get_Server_Type()
|
|
|
+{
|
|
|
+ if [[ $(hostname) =~ "iZbp" ]]
|
|
|
+ then
|
|
|
+ SERVER_TYPE="aliyun"
|
|
|
+ elif [[ $(hostname) =~ "lacew" ]]
|
|
|
+ then
|
|
|
+ SERVER_TYPE="aliyun"
|
|
|
+ elif [[ $(hostname) =~ "VM-" ]]
|
|
|
+ then
|
|
|
+ SERVER_TYPE="qcloud"
|
|
|
+ else
|
|
|
+ SERVER_TYPE="unknown"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+PressInstall() {
|
|
|
+ InstallLog -I "按任意键开始安装,按Ctrl+C中止安装"
|
|
|
+ local OLDCONFIG
|
|
|
+ OLDCONFIG=$(stty -g)
|
|
|
+ stty cbreak
|
|
|
+ # dd if=/dev/tty bs=1 count=1 2> /dev/null
|
|
|
+ stty -raw
|
|
|
+ stty echo
|
|
|
+ # stty -icanon -echo min 1 time 0
|
|
|
+ dd count=1 2>/dev/null
|
|
|
+ stty "${OLDCONFIG}"
|
|
|
+}
|
|
|
+#检测端口
|
|
|
+function CheckPort() {
|
|
|
+ local port
|
|
|
+ port=$1
|
|
|
+ InstallLog -I "检测端口 [$port]"
|
|
|
+ local checkResult
|
|
|
+ checkResult=$(netstat -tlpn | grep "\b$port\b")
|
|
|
+ if [ -n "$checkResult" ]; then
|
|
|
+ InstallLog -E "端口 $port 被占用"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+}
|
|
|
+function CheckEmpty() {
|
|
|
+ if [ -z "$1" ]; then
|
|
|
+ InstallLog -E "$2"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+}
|
|
|
+#检查API
|
|
|
+CheckAPI() {
|
|
|
+ # shellcheck disable=SC1083
|
|
|
+ local code
|
|
|
+ code=$(curl -I -m 5 -X POST -o /dev/null -s -w "%{http_code}" "$1")
|
|
|
+ if [ "${code}" != 200 ]; then
|
|
|
+ code=$(curl -I -m 5 -o /dev/null -s -w "%{http_code}" "$1&check")
|
|
|
+ if [ "${code}" != 200 ]; then
|
|
|
+ InstallLog -E "API $1 检查失败,返回代码 ${code}, 中止安装"
|
|
|
+ exit
|
|
|
+ else
|
|
|
+ InstallLog -I "API $1 检查通过"
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ InstallLog -I "API $1 检查通过"
|
|
|
+ fi
|
|
|
+}
|
|
|
+#更新repo源
|
|
|
+function UpdateRepo() {
|
|
|
+ Get_Dist_Name
|
|
|
+ Get_Server_Type
|
|
|
+ local install=0
|
|
|
+ InstallLog -I "修改 ${DISTRO} 镜像源,服务器类型 ${SERVER_TYPE}"
|
|
|
+ if [ "${DISTRO}" == "Debian" ]; then
|
|
|
+ #阿里云
|
|
|
+ if [[ ${SERVER_TYPE} == "aliyun" ]]; then
|
|
|
+ if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/apt/sources.list; then
|
|
|
+ InstallLog -i "Aliyun apt repo already installed, skip..."
|
|
|
+ else
|
|
|
+ InstallLog -i "Change /etc/apt/sources.list to mirrors.cloud.aliyuncs.com"
|
|
|
+ sed -i "s#deb https\?://.*/debian#deb http://mirrors.cloud.aliyuncs.com/debian#" /etc/apt/sources.list
|
|
|
+ sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list
|
|
|
+ apt update
|
|
|
+ fi
|
|
|
+ #腾讯云
|
|
|
+ elif [[ ${SERVER_TYPE} == "qcloud" ]]; then
|
|
|
+ if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.tencentyun.com" /etc/apt/sources.list; then
|
|
|
+ InstallLog -i "Tencent apt repo already installed, skip..."
|
|
|
+ else
|
|
|
+ InstallLog -i "Change /etc/apt/sources.list to mirrors.tencentyun.com"
|
|
|
+ sed -i "s#deb https\?://.*/debian#deb http://mirrors.tencentyun.com/debian#" /etc/apt/sources.list
|
|
|
+ sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list
|
|
|
+ apt update
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ elif [ "${DISTRO}" == "Ubuntu" ]; then
|
|
|
+ #阿里云
|
|
|
+ if [[ ${SERVER_TYPE} == "aliyun" ]]; then
|
|
|
+ if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/apt/sources.list; then
|
|
|
+ InstallLog -i "Aliyun apt repo already installed, skip..."
|
|
|
+ else
|
|
|
+ InstallLog -i "Change /etc/apt/sources.list to mirrors.cloud.aliyuncs.com"
|
|
|
+ sed -i "s#deb http\?://.*/ubuntu/#deb http://mirrors.cloud.aliyuncs.com/ubuntu/#" /etc/apt/sources.list
|
|
|
+ sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list
|
|
|
+ apt update
|
|
|
+ fi
|
|
|
+ #腾讯云
|
|
|
+ elif [[ ${SERVER_TYPE} == "qcloud" ]]; then
|
|
|
+ if [ -f /etc/apt/sources.list ] && grep -Eqi "mirrors.tencentyun.com" /etc/apt/sources.list; then
|
|
|
+ InstallLog -i "Tencent apt repo already installed, skip..."
|
|
|
+ else
|
|
|
+ InstallLog -i "Change /etc/apt/sources.list to mirrors.tencentyun.com"
|
|
|
+ sed -i "s#deb https\?://.*/ubuntu#deb http://mirrors.tencentyun.com/ubuntu#" /etc/apt/sources.list
|
|
|
+ sed -i "s/^deb-src/#deb-src/" /etc/apt/sources.list
|
|
|
+ apt update
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ elif [ "${DISTRO}" == "CentOS" ]; then
|
|
|
+ #阿里云
|
|
|
+ if [[ ${SERVER_TYPE} == "aliyun" ]]; then
|
|
|
+ if [ -f /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/CentOS-Base.repo; then
|
|
|
+ InstallLog -i "Aliyun yum repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.aliyuncs.com/repo/Centos-7.repo
|
|
|
+ fi
|
|
|
+ if [ -f /etc/yum.repos.d/ius.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/ius.repo; then
|
|
|
+ InstallLog -i "Aliyun ius repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ yum install -y http://mirrors.cloud.aliyuncs.com/ius/ius-release-el7.rpm
|
|
|
+ sed -i 's|baseurl.*/ius|baseurl=http://mirrors.cloud.aliyuncs.com/ius|g' /etc/yum.repos.d/ius*
|
|
|
+ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
|
|
+ fi
|
|
|
+ if [ -f /etc/yum.repos.d/epel.repo ] && grep -Eqi "mirrors.cloud.aliyuncs.com" /etc/yum.repos.d/epel.repo; then
|
|
|
+ InstallLog -i "Aliyun epel repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.aliyuncs.com/repo/epel-7.repo
|
|
|
+ sed -i 's|#\?baseurl.*/epel|baseurl=http://mirrors.cloud.aliyuncs.com/epel|' /etc/yum.repos.d/epel*
|
|
|
+ fi
|
|
|
+ elif [[ ${SERVER_TYPE} == "qcloud" ]]; then
|
|
|
+ #腾讯云
|
|
|
+ if [ -f /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/CentOS-Base.repo; then
|
|
|
+ InstallLog -i "Tencent yum repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ -f /etc/yum.repos.d/ius.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/ius.repo; then
|
|
|
+ InstallLog -i "Tencent ius repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ yum install -y https://mirrors.cloud.tencent.com/ius/ius-release-el7.rpm
|
|
|
+ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
|
|
+ sed -i 's|baseurl.*/ius|baseurl=http://mirrors.cloud.tencent.com/ius|g' /etc/yum.repos.d/ius*
|
|
|
+ fi
|
|
|
+ if [ -f /etc/yum.repos.d/epel.repo ] && grep -Eqi "mirrors.cloud.tencent.com" /etc/yum.repos.d/epel.repo; then
|
|
|
+ InstallLog -i "Tencent epel repo already installed, skip..."
|
|
|
+ else
|
|
|
+ # shellcheck disable=SC2004
|
|
|
+ install=$(($install + 1))
|
|
|
+ wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
|
|
|
+ sed -i 's|baseurl.*/epel|baseurl=http://mirrors.cloud.tencent.com/epel|g' /etc/yum.repos.d/epel*
|
|
|
+ fi
|
|
|
+ elif [[ ${SERVER_TYPE} == "unknown" ]]; then
|
|
|
+ InstallLog -e "服务器类型不支持"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ if [ "$install" -gt 0 ]; then
|
|
|
+ if [ "$PM" == "yum" ];then
|
|
|
+ yum clean all
|
|
|
+ yum makecache
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+function InstallNecessary() {
|
|
|
+ Get_Dist_Name
|
|
|
+ Get_Server_Type
|
|
|
+ InstallLog -I "安装必要支持软件"
|
|
|
+ ${PM} install -y ca-certificates &> /dev/null
|
|
|
+ if ! command -v wget >/dev/null; then
|
|
|
+ InstallLog -I "安装wget"
|
|
|
+ ${PM} install -y wget &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v curl >/dev/null; then
|
|
|
+ InstallLog -I "安装curl"
|
|
|
+ ${PM} install -y curl &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v netstat >/dev/null; then
|
|
|
+ InstallLog -I "安装net-tools"
|
|
|
+ ${PM} install -y net-tools &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v screen >/dev/null; then
|
|
|
+ InstallLog -I "安装screen"
|
|
|
+ ${PM} install -y screen &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v vim >/dev/null; then
|
|
|
+ InstallLog -I "安装vi"
|
|
|
+ ${PM} install -y vim &> /dev/null
|
|
|
+ fi
|
|
|
+ echo 'set mouse=""' >> ~/.vimrc
|
|
|
+ if ! command -v gpg >/dev/null; then
|
|
|
+ InstallLog -I "安装gnupg"
|
|
|
+ ${PM} install -y gnupg &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v git >/dev/null; then
|
|
|
+ InstallLog -I "安装git"
|
|
|
+ if [ "${DISTRO}" == "Debian" ] || [ "${DISTRO}" == "Ubuntu" ]; then
|
|
|
+ ${PM} install -y git &> /dev/null
|
|
|
+ elif [ "${DISTRO}" == "CentOS" ]; then
|
|
|
+ ${PM} install -y git236 &> /dev/null
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ if ! command -v rz >/dev/null; then
|
|
|
+ InstallLog -I "安装lrzsz"
|
|
|
+ ${PM} install -y lrzsz &> /dev/null
|
|
|
+ fi
|
|
|
+ if ! command -v docker >/dev/null; then
|
|
|
+ InstallLog -I "安装docker和docker-compose"
|
|
|
+ if [ "${DISTRO}" == "Debian" ]; then
|
|
|
+ if [[ ${SERVER_TYPE} == "aliyun" ]]; then
|
|
|
+ curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg
|
|
|
+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/ \
|
|
|
+ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null
|
|
|
+ elif [[ ${SERVER_TYPE} == "qcloud" ]]; then
|
|
|
+ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg
|
|
|
+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/debian/ \
|
|
|
+ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null
|
|
|
+ elif [[ ${SERVER_TYPE} == "unknown" ]]; then
|
|
|
+ InstallLog -e "服务器类型不支持"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ apt update
|
|
|
+ apt install -y docker-ce docker-ce-cli containerd.io
|
|
|
+ elif [ "${DISTRO}" == "Ubuntu" ]; then
|
|
|
+ if [[ ${SERVER_TYPE} == "aliyun" ]]; then
|
|
|
+ curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg
|
|
|
+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/ \
|
|
|
+ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null
|
|
|
+ elif [[ ${SERVER_TYPE} == "qcloud" ]]; then
|
|
|
+ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --yes --dearmor -o /usr/share/keyrings/aliyun-docker-ce-keyring.gpg
|
|
|
+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/aliyun-docker-ce-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu/ \
|
|
|
+ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/aliyun-docker-ce.list > /dev/null
|
|
|
+ elif [[ ${SERVER_TYPE} == "unknown" ]]; then
|
|
|
+ InstallLog -e "服务器类型不支持"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ apt update
|
|
|
+ apt install -y docker-ce docker-ce-cli containerd.io
|
|
|
+ elif [ "${DISTRO}" == "CentOS" ]; then
|
|
|
+ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
|
|
+ #yum list docker-ce --showduplicates | sort -r
|
|
|
+ yum -y install docker-ce-26.1.4-1.el7 &> /dev/null
|
|
|
+ fi
|
|
|
+ if [ ! -f /usr/bin/docker-compose ];then
|
|
|
+ wget -O /usr/bin/docker-compose http://mi.lacecdn.com/docker/docker-compose-linux-x86_64-v2.32.4
|
|
|
+ chmod +x /usr/bin/docker-compose
|
|
|
+ fi
|
|
|
+ systemctl enable docker
|
|
|
+ systemctl start docker
|
|
|
+ apt upgrade
|
|
|
+ fi
|
|
|
+}
|
|
|
+#克隆代码
|
|
|
+function CloneCode() {
|
|
|
+ InstallLog -I "克隆代码..."
|
|
|
+ if [ -d ${LACEMI_CODE_PROD_PATH} ]; then
|
|
|
+ InstallLog -E "安装目录 ${LACEMI_CODE_PROD_PATH} 已存在,中止安装..."
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ if [ -d /tmp/lacemi ]; then
|
|
|
+ rm -rf /tmp/lacemi
|
|
|
+ fi
|
|
|
+ git clone "${LACEMI_CODE_URL}" /tmp/lacemi
|
|
|
+ InstallLog -I "复制代码至目录 ${LACEMI_CODE_PROD_PATH} "
|
|
|
+ mv -f /tmp/lacemi "${LACEMI_CODE_PROD_PATH}"
|
|
|
+ chmod 777 -R "${LACEMI_CODE_PROD_PATH}/sapi/runtime"
|
|
|
+ chmod 777 -R "${LACEMI_CODE_PROD_PATH}/sapi/web"
|
|
|
+}
|
|
|
+function CloneShareCode() {
|
|
|
+ InstallLog -I "克隆共享版代码..."
|
|
|
+ if [ -d ${LACEMI_CODE_SHARE_PATH} ]; then
|
|
|
+ InstallLog -E "安装目录 ${LACEMI_CODE_SHARE_PATH} 已存在,中止安装..."
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ if [ -d /tmp/lacemi ]; then
|
|
|
+ rm -rf /tmp/lacemi
|
|
|
+ fi
|
|
|
+ git clone "${LACEMI_SHARE_CODE_URL}" /tmp/lacemi
|
|
|
+ InstallLog -I "复制代码至目录 ${LACEMI_CODE_SHARE_PATH} "
|
|
|
+ mv -f /tmp/lacemi "${LACEMI_CODE_SHARE_PATH}"
|
|
|
+ chmod 777 -R "${LACEMI_CODE_SHARE_PATH}/sapi/runtime"
|
|
|
+ chmod 777 -R "${LACEMI_CODE_SHARE_PATH}/sapi/web"
|
|
|
+}
|
|
|
+function SecuritySSHLogin()
|
|
|
+{
|
|
|
+ if [ -s /root/.ssh/authorized_keys ]; then
|
|
|
+ InstallLog -I "成功禁用密码登录"
|
|
|
+ chattr -i /etc/ssh/sshd_config
|
|
|
+ sed -i "s/#\+PasswordAuthentication \w\+/PasswordAuthentication no/g" /etc/ssh/sshd_config
|
|
|
+ systemctl restart sshd
|
|
|
+ else
|
|
|
+ InstallLog -W "由于未启用SSH公钥登录,不允许禁用密码登录"
|
|
|
+ fi
|
|
|
+ iFlag=$(lsattr /etc/ssh/sshd_config | cut -d "-" -f 5)
|
|
|
+ if [ "$iFlag" != "i" ]; then
|
|
|
+ chattr +i /etc/ssh/sshd_config
|
|
|
+ fi
|
|
|
+ iFlag=$(lsattr /root/.ssh/authorized_keys | cut -d "-" -f 5)
|
|
|
+ if [ "$iFlag" != "i" ]; then
|
|
|
+ chattr +i /root/.ssh/authorized_keys
|
|
|
+ fi
|
|
|
+ grep 'PasswordAuthentication ' /etc/ssh/sshd_config
|
|
|
+}
|
|
|
+#下载公钥并允许公钥登录
|
|
|
+function EnableSSHLogin() {
|
|
|
+ InstallLog -I "允许SSH登陆"
|
|
|
+ CheckEmpty "${LACEMI_KEY}" "安装密钥为空,安装中止"
|
|
|
+ local rsaPublicKey
|
|
|
+ rsaPublicKey=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-pub\",\"key\":\"${LACEMI_KEY}\"}")
|
|
|
+ InstallLog -E "$rsaPublicKey"
|
|
|
+# rsaPublicKey=$(curl -s -H "Accept:text/html" "${getPubApi}")
|
|
|
+ if [ -z "${rsaPublicKey}" ]; then
|
|
|
+ InstallLog -E "无法获取公钥,安装中止"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ # shellcheck disable=SC2046
|
|
|
+ if [ $(echo "${rsaPublicKey}" | grep -c 'ssh-rsa') -eq 0 ]; then
|
|
|
+ InstallLog -E "公钥格式不正确,安装中止"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ local checkString="${rsaPublicKey:50:36}"
|
|
|
+ InstallLog -I "检查公钥字符串 ${checkString}"
|
|
|
+ # shellcheck disable=SC2046
|
|
|
+ if [ $(grep -c "${checkString}" /root/.ssh/authorized_keys) -gt 0 ]; then
|
|
|
+ InstallLog -W "公钥已存在,跳过"
|
|
|
+ else
|
|
|
+ InstallLog -I "公钥不存在,附加"
|
|
|
+ chattr -i /root/.ssh/authorized_keys
|
|
|
+ cat >>/root/.ssh/authorized_keys <<EOF
|
|
|
+${rsaPublicKey}
|
|
|
+EOF
|
|
|
+ fi
|
|
|
+}
|
|
|
+function InstallCrontabTask() {
|
|
|
+ if [ -f /var/spool/cron/root ]; then
|
|
|
+ sed -i "/systemctl restart docker/d" /var/spool/cron/root
|
|
|
+ fi
|
|
|
+ echo "0 4 * * * systemctl restart docker" >>/var/spool/cron/root
|
|
|
+}
|
|
|
+Get_Dist_Name
|
|
|
+if [ "${DISTRO}" = "unknow" ]; then
|
|
|
+ Echo_Red "Unable to get Linux distribution name, or do NOT support the current distribution."
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+################
|
|
|
+VERSION="v3.1.0"
|
|
|
+RELEASE="2025-03-18"
|
|
|
+SEED=$(date +%Y%m%d%H%M%S)
|
|
|
+LACEMI_API_VERSION="v32"
|
|
|
+LACEMI_METHOD="install"
|
|
|
+LACEMI_CODE_DEV_PATH="/home/lacemi_api_dev_${LACEMI_API_VERSION}"
|
|
|
+LACEMI_CODE_SHARE_PATH="/home/lacemi_api_share_${LACEMI_API_VERSION}"
|
|
|
+LACEMI_CODE_PROD_PATH="/home/lacemi_api_prod_${LACEMI_API_VERSION}"
|
|
|
+LACEMI_API="https://api.hlace.com/v1/install"
|
|
|
+LACEMI_SHARE_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_share_${LACEMI_API_VERSION}.git"
|
|
|
+LACEMI_DEV_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_dev_${LACEMI_API_VERSION}.git"
|
|
|
+LACEMI_CODE_URL="https://gogs.hlace.com/centrenda/lacemi_${LACEMI_API_VERSION}.git"
|
|
|
+LACEMI_QUIET="0"
|
|
|
+LACEMI_DOMAIN=""
|
|
|
+LACEMI_DOMAIN_NAME=""
|
|
|
+LACEMI_KEY=""
|
|
|
+################
|
|
|
+
|
|
|
+start_date=$(date +'%Y-%m-%d %H:%M:%S')
|
|
|
+step=0
|
|
|
+steps=12
|
|
|
+
|
|
|
+VERSION_POSTGRESQL="17.4.0"
|
|
|
+VERSION_MARIADB="11.6.2"
|
|
|
+VERSION_MONGODB="8.0.5"
|
|
|
+VERSION_NGINX="1.27.4"
|
|
|
+VERSION_REDIS="7.4.2"
|
|
|
+VERSION_PHP="8.1.31"
|
|
|
+
|
|
|
+
|
|
|
+Usage() {
|
|
|
+ cat <<EOF
|
|
|
+ $(basename "$0") [options]
|
|
|
+
|
|
|
+Usage:
|
|
|
+
|
|
|
+ -k, --key target key
|
|
|
+ -m, --method=[install|upgrade|append] method to execute, options for install or upgrade, default to execute install
|
|
|
+
|
|
|
+ -H, --help show usage
|
|
|
+ -Q, --quiet execute with quiet mode without pressing key to autostart
|
|
|
+ -V, --version print version information
|
|
|
+
|
|
|
+EOF
|
|
|
+ # 短格式中,选项值为可选的选项,选项值只能紧接选项而不可使用任何符号将其他选项隔开;如-p80,不要写成-p
|
|
|
+ # 短格式中,选项值为必有的选项,选项值既可紧接选项也可以使用空格与选项隔开;如-i192.168.1.,也可写成-i 192.168.1.1
|
|
|
+ # 长格式中,选项值为可选的选项,选项值只能使用=号连接选项;如--port=,不可写成性--port80或--port
|
|
|
+ # 长格式中,选项值为必有的选项,选项值既可使用=号连接选项也可使用空格连接选项;如--ip=192.168.1.1,也可写成--ip 192.168.1.1
|
|
|
+ # 为简便起见,建议凡是短格式都使用“选项+选项值”的形式(-p80),凡是长格式都使用“选项+=+选项值”的形式(--port=)
|
|
|
+}
|
|
|
+main() {
|
|
|
+ echo ""
|
|
|
+
|
|
|
+ local optstring="k:m:H::Q::V::"
|
|
|
+ local optstringLong="key:,method:,help::,quiet::,version::"
|
|
|
+ local GETOPT_OUT
|
|
|
+ GETOPT_OUT=$(getopt --options $optstring --longoptions $optstringLong -- "$@")
|
|
|
+ local exitCode=$?
|
|
|
+ if [ $exitCode -ne 0 ]; then
|
|
|
+ Usage
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ eval set -- "$GETOPT_OUT"
|
|
|
+ while true; do
|
|
|
+ case "$1" in
|
|
|
+ -k | --key)
|
|
|
+ LACEMI_KEY="$2"
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ -m | --method)
|
|
|
+ LACEMI_METHOD="$2"
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ -H | --help)
|
|
|
+ Usage
|
|
|
+ exit
|
|
|
+ ;;
|
|
|
+ -Q | --quiet)
|
|
|
+ LACEMI_QUIET="1"
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ -V | --version)
|
|
|
+ InstallLog -I "Version: ${VERSION}, Release: ${RELEASE}"
|
|
|
+ exit
|
|
|
+ ;;
|
|
|
+ --)
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ InstallLog -E "非法参数: $1"
|
|
|
+ Usage
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ shift
|
|
|
+ done
|
|
|
+
|
|
|
+
|
|
|
+ UpdateRepo
|
|
|
+ InstallNecessary
|
|
|
+# PullDockerImage
|
|
|
+# PullCode
|
|
|
+ if [ ! -d /root/server_blocks ]; then
|
|
|
+ mkdir /root/server_blocks
|
|
|
+ fi
|
|
|
+ if [ "${LACEMI_METHOD}" == "install" ]; then
|
|
|
+ #全新安装
|
|
|
+ InstallLog -I "全新安装"
|
|
|
+ CheckAPI "${LACEMI_API}"
|
|
|
+ CheckEmpty "${LACEMI_KEY}" "安装密钥为空,请使用-k指定安装密钥"
|
|
|
+ LACEMI_DOMAIN=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-domain\",\"key\":\"${LACEMI_KEY}\"}")
|
|
|
+ LACEMI_DOMAIN_NAME=$(echo "${LACEMI_DOMAIN}" | cut -d \. -f 1)
|
|
|
+ InstallLog -I "获取域名:${LACEMI_DOMAIN}"
|
|
|
+ InstallLog -C "安装参数\n\n域名全称:${LACEMI_DOMAIN}\n域名前缀:${LACEMI_DOMAIN_NAME}\n安装密钥:${LACEMI_KEY}\n代码地址:${LACEMI_CODE_URL}\n安装目录:${LACEMI_CODE_PROD_PATH}\n当前版本:${LACEMI_API_VERSION}\n访问接口:${LACEMI_API}\n"
|
|
|
+ PressInstall
|
|
|
+ rm -rf /root/server_blocks/*
|
|
|
+ CloneCode
|
|
|
+ InstallLog -I "获取docker-compose.yml"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_DOCKER_COMPOSE_TEMPLATE\"}" -o /root/docker-compose.yml
|
|
|
+ InstallLog -I "获取local.lic"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_LOCAL_LICENSE\"}" -o "/root/local.lic"
|
|
|
+ docker-compose up -d
|
|
|
+ InstallLog -I "获取${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_NGINX_TEMPLATE\"}" -o "/root/server_blocks/${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ InstallLog -I "获取default.conf"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_NGINX_DEFAULT_TEMPLATE\"}" -o /root/server_blocks/default.conf
|
|
|
+ InstallLog -I "获取授权文件"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-license\",\"key\":\"${LACEMI_KEY}\"}" -o "${LACEMI_DOMAIN_NAME}.lic"
|
|
|
+ runCmd=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_DOCKER_RUN_CMD\"}")
|
|
|
+ InstallLog -I "生成docker run命令: ${runCmd}"
|
|
|
+ if [[ -n $(docker ps -a -q -f "name=${LACEMI_DOMAIN_NAME}") ]];then
|
|
|
+ echo "Docker container ${LACEMI_DOMAIN_NAME} is running, aborting."
|
|
|
+ else
|
|
|
+ ${runCmd}
|
|
|
+ fi
|
|
|
+ docker restart root-nginx-1
|
|
|
+ sleep 5
|
|
|
+ docker exec "${LACEMI_DOMAIN_NAME}" /app/bin/utool.sh fI
|
|
|
+ elif [ "${LACEMI_METHOD}" == "append" ]; then
|
|
|
+ #增量安装
|
|
|
+ InstallLog -i "增量安装"
|
|
|
+ CheckAPI "${LACEMI_API}"
|
|
|
+ CheckEmpty "${LACEMI_KEY}" "安装密钥为空,请使用-k指定安装密钥"
|
|
|
+ LACEMI_DOMAIN=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-domain\",\"key\":\"${LACEMI_KEY}\"}")
|
|
|
+ LACEMI_DOMAIN_NAME=$(echo "${LACEMI_DOMAIN}" | cut -d \. -f 1)
|
|
|
+ InstallLog -I "获取域名:${LACEMI_DOMAIN}"
|
|
|
+ InstallLog -C "安装参数\n\n域名全称:${LACEMI_DOMAIN}\n域名前缀:${LACEMI_DOMAIN_NAME}\n安装密钥:${LACEMI_KEY}\n代码地址:${LACEMI_CODE_URL}\n安装目录:${LACEMI_CODE_PROD_PATH}\n当前版本:${LACEMI_API_VERSION}\n访问接口:${LACEMI_API}\n"
|
|
|
+ PressInstall
|
|
|
+ InstallLog -I "获取${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_NGINX_TEMPLATE\"}" -o "/root/server_blocks/${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ InstallLog -I "获取授权文件"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-license\",\"key\":\"${LACEMI_KEY}\"}" -o "${LACEMI_DOMAIN_NAME}.lic"
|
|
|
+ runCmd=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_DOCKER_RUN_CMD\"}")
|
|
|
+ InstallLog -I "生成docker run命令: ${runCmd}"
|
|
|
+ if [[ -n $(docker ps -a -q -f "name=${LACEMI_DOMAIN_NAME}") ]];then
|
|
|
+ echo "Docker container ${LACEMI_DOMAIN_NAME} is running, aborting."
|
|
|
+ else
|
|
|
+ ${runCmd}
|
|
|
+ fi
|
|
|
+ docker restart root-nginx-1
|
|
|
+ sleep 5
|
|
|
+ docker exec "${LACEMI_DOMAIN_NAME}" /app/bin/utool.sh fI
|
|
|
+ elif [ "${LACEMI_METHOD}" == "share" ]; then
|
|
|
+ #增量安装
|
|
|
+ InstallLog -i "共享版"
|
|
|
+ if [ ! -d "${LACEMI_CODE_SHARE_PATH}" ];then
|
|
|
+ CloneShareCode
|
|
|
+ fi
|
|
|
+ CheckAPI "${LACEMI_API}"
|
|
|
+ CheckEmpty "${LACEMI_KEY}" "安装密钥为空,请使用-k指定安装密钥"
|
|
|
+ LACEMI_DOMAIN=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-domain\",\"key\":\"${LACEMI_KEY}\"}")
|
|
|
+ LACEMI_DOMAIN_NAME=$(echo "${LACEMI_DOMAIN}" | cut -d \. -f 1)
|
|
|
+ InstallLog -I "获取域名:${LACEMI_DOMAIN}"
|
|
|
+ InstallLog -C "安装参数\n\n域名全称:${LACEMI_DOMAIN}\n域名前缀:${LACEMI_DOMAIN_NAME}\n安装密钥:${LACEMI_KEY}\n代码地址:${LACEMI_SHARE_CODE_URL}\n安装目录:${LACEMI_CODE_SHARE_PATH}\n当前版本:${LACEMI_API_VERSION}\n访问接口:${LACEMI_API}\n"
|
|
|
+ PressInstall
|
|
|
+ InstallLog -I "获取${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_NGINX_TEMPLATE\"}" -o "/root/server_blocks/${LACEMI_DOMAIN_NAME}.conf"
|
|
|
+ runCmd=$(curl -s -H "Accept:text/html" "${LACEMI_API}" -X POST -d "{\"op\": \"get-template\",\"key\":\"${LACEMI_KEY}\",\"data\":\"INSTALL_DOCKER_RUN_CMD\"}")
|
|
|
+ InstallLog -I "生成docker run命令: ${runCmd}"
|
|
|
+ if [[ -n $(docker ps -a -q -f "name=${LACEMI_DOMAIN_NAME}") ]];then
|
|
|
+ echo "Docker container ${LACEMI_DOMAIN_NAME} is running, aborting."
|
|
|
+ else
|
|
|
+ ${runCmd}
|
|
|
+ fi
|
|
|
+ docker restart root-nginx-1
|
|
|
+ sleep 5
|
|
|
+ docker exec "${LACEMI_DOMAIN_NAME}" /app/bin/utool.sh fI
|
|
|
+ fi
|
|
|
+# EnableSSHLogin
|
|
|
+# SecuritySSHLogin
|
|
|
+}
|
|
|
+
|
|
|
+# shellcheck disable=SC2068
|
|
|
+clear
|
|
|
+echo "+------------------------------------------------------------------------+"
|
|
|
+echo "| LACEMI ${VERSION}(${RELEASE}) for ${DISTRO} Linux Server |"
|
|
|
+echo "+------------------------------------------------------------------------+"
|
|
|
+echo "| A tool to install lacemi on Linux |"
|
|
|
+echo "+------------------------------------------------------------------------+"
|
|
|
+echo "| For more information please visit https://hlace.com |"
|
|
|
+echo "+------------------------------------------------------------------------+"
|
|
|
+main "$@"
|