2273 lines
77 KiB
Bash
2273 lines
77 KiB
Bash
#!/bin/bash
|
|
|
|
# Run cleanup function on exit
|
|
trap cleanup EXIT
|
|
|
|
# define default timezone
|
|
DEFAULT_TIMEZONE="Asia/Shanghai"
|
|
|
|
# Define default DNS server
|
|
DEFAULT_DNS="192.168.1.252"
|
|
|
|
# Define the packages to be installed
|
|
SYSTEM_APT_TOOLS="git wget vim gdb screen tmux ntp tree atop iotop sysstat fio tcpdump iperf3 qemu-guest-agent dstat linux-tools-common linux-tools-generic jq zip unzip cloud-guest-utils nfs-kernel-server nfs-common"
|
|
SYSTEM_YUM_TOOLS="git wget vim gdb screen tmux ntp tree atop iotop sysstat fio tcpdump iperf3 qemu-guest-agent dstat jq zip unzip cloud-utils-growpart python3-devel nfs-utils rpm-build automake autoconf libevent-devel ncurses-devel"
|
|
|
|
# Define the packages to be installed for build TDinternal
|
|
BUILD_APT_TOOLS="llvm gcc make cmake perl g++ lzma curl locales psmisc libgeos-dev libgoogle-glog-dev valgrind rsync libjemalloc-dev openssh-server sshpass net-tools dirmngr gnupg apt-transport-https \
|
|
ca-certificates software-properties-common r-base iputils-ping build-essential git libssl-dev libgflags2.2 libgflags-dev libjansson-dev libsnappy-dev liblzma-dev libz-dev zlib1g pkg-config"
|
|
BUILD_YUM_TOOLS="gcc make cmake3 perl gcc-c++ xz curl psmisc geos glog valgrind rsync jemalloc openssh-server sshpass net-tools gnupg2 libarchive snappy-devel pkgconfig libatomic perl-IPC-Cmd libcurl-devel libxml2-devel\
|
|
ca-certificates libicu-devel R-core iputils bison flex glibc-static libstdc++-static libstdc++-devel openssl-devel gflags jansson jansson-devel snappy xz-devel zlib-devel zlib bzip2-devel zlib-static libs3"
|
|
|
|
# Define the packages to be installed via pip
|
|
PIP_PKGS="wheel setuptools-rust pandas psutil fabric2 requests faker simplejson toml pexpect tzlocal distro decorator loguru hyperloglog taospy numpy poetry"
|
|
|
|
# Gcc version to be updated
|
|
GCC_VERSION="9.5.0"
|
|
|
|
# Define the version of the Ubuntu release
|
|
# Define jdk version to be installed
|
|
if [ -f /etc/debian_version ]; then
|
|
DIST_VERSION=$(lsb_release -sr)
|
|
JDK_VERSION="openjdk-17-jdk"
|
|
elif [ -f /etc/redhat-release ]; then
|
|
DIST_VERSION=$(grep -oP '\d+\.\d+' < /etc/redhat-release)
|
|
JDK_VERSION="java-1.8.0-openjdk"
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
# Define the path where the core dump files should be stored
|
|
COREPATH="/corefile"
|
|
|
|
# Define the path where the repository should be cloned
|
|
REPOPATH="$HOME/repos"
|
|
|
|
# Define the path to the script directory
|
|
SCRIPT_DIR=$(dirname "$(realpath "$0")")
|
|
|
|
# Define the path to the .bashrc file
|
|
BASH_RC=$HOME/.bashrc
|
|
|
|
# Define the path to the Cargo configuration file
|
|
CARGO_CONFIG_FILE=$HOME/.cargo/config.toml
|
|
|
|
# Define jmeter version to be installed
|
|
JMETER_VERSION="5.6.3"
|
|
|
|
# Define the path where the Prometheus binary should exist
|
|
PROMETHEUS_BINARY="/usr/local/bin/prometheus"
|
|
|
|
# Define the path where the Node Exporter binary should exist
|
|
NODE_EXPORTER_BINARY="/usr/local/bin/node_exporter"
|
|
|
|
# Define the path where the Process Exporter binary should exist
|
|
PROCESS_EXPORTER_BINARY="/usr/local/bin/process-exporter"
|
|
|
|
# Define fstab input
|
|
FSTAB_LINE="share-server.platform.tdengine.dev:/mnt/share_server /mnt/share_server nfs rw,sync,_netdev 0 0"
|
|
|
|
# Results need to be stored when source
|
|
SOURCE_RESULTS=""
|
|
|
|
# ANSI color codes
|
|
GREEN='\033[0;32m' # Green color
|
|
RED='\033[0;31m' # Red color
|
|
NO_COLOR='\033[0m' # Reset to default color
|
|
YELLOW='\033[0;33m' # Yellow color
|
|
|
|
# read -r -d '' CLOUD_INIT_CONFIG << 'EOF'
|
|
# datasource:
|
|
# NoCloud:
|
|
# seedfrom: /var/lib/cloud/seed/nocloud/
|
|
# meta-data: {}
|
|
# user-data: {}
|
|
# vendor-data: {}
|
|
# ConfigDrive: {}
|
|
# None: {}
|
|
# datasource_list: [ NoCloud, ConfigDrive, None ]
|
|
# EOF
|
|
|
|
read -r -d '' CUSTOM_SETTINGS <<'EOF'
|
|
export LC_CTYPE="en_US.UTF-8"
|
|
export LANG="en_US.UTF-8"
|
|
export HISTTIMEFORMAT="%d/%m/%y %T "
|
|
parse_git_branch() {
|
|
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
|
|
}
|
|
export PS1="\u@\h \[\e[32m\]\w \[\e[91m\]\$(parse_git_branch)\[\e[00m\]$ "
|
|
EOF
|
|
|
|
read -r -d '' CARGO_CONFIG <<'EOF'
|
|
[source.crates-io]
|
|
replace-with = 'rsproxy-sparse'
|
|
[source.rsproxy]
|
|
registry = "https://rsproxy.cn/crates.io-index"
|
|
[source.rsproxy-sparse]
|
|
registry = "sparse+https://rsproxy.cn/index/"
|
|
[registries.rsproxy]
|
|
index = "https://rsproxy.cn/crates.io-index"
|
|
[net]
|
|
git-fetch-with-cli = true
|
|
[source.tuna]
|
|
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
|
|
[source.ustc]
|
|
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
|
|
[source.sjtu]
|
|
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
|
|
[source.rustcc]
|
|
registry = "git://crates.rustcc.cn/crates.io-index"
|
|
EOF
|
|
|
|
# Help function to display usage information
|
|
help() {
|
|
echo "Usage: $0 [option]"
|
|
echo "Options:"
|
|
echo " --help - Display this help and exit"
|
|
echo " setup_all - Setup all configurations and installations"
|
|
echo " TDasset - Prepare TDasset env"
|
|
echo " TDinternal - Prepare TDinternal env"
|
|
echo " TDgpt - Prepare TDgpt env"
|
|
echo " taostest - Prepare taostest env"
|
|
echo " system_config - Perform system configuration"
|
|
echo " deploy_pure - Deploy Pure environment"
|
|
echo " deploy_dev - Deploy development environment"
|
|
echo " deploy_cmake - Deploy CMake"
|
|
echo " update_redhat_gcc - Update GCC on Red Hat or CentOS"
|
|
echo " update_redhat_tmux - Update tmux on Red Hat or CentOS"
|
|
echo " deploy_tmux - Deploy tmux"
|
|
echo " config_ssh - Configure SSH settings"
|
|
echo " disable_firewalld - Disable firewalld"
|
|
echo " config_cloud_init - Set cloud initialization parameters"
|
|
echo " deploy_git - Deploy git repositories"
|
|
echo " replace_sources - Replace package sources"
|
|
echo " update - Update the system"
|
|
echo " upgrade - Upgrade the system"
|
|
echo " config_timezone - Configure the system timezone"
|
|
echo " config_dns - Set DNS configurations"
|
|
echo " config_custom_settings - Add custom settings to your shell configuration"
|
|
echo " config_share_server - Configure share server"
|
|
echo " install_packages - Install specified packages"
|
|
echo " config_system_limits - Configure system limits and kernel parameters"
|
|
echo " config_coredump - Configure core dump settings"
|
|
echo " disable_service - Disable specified services"
|
|
echo " install_python - Install Python and pip"
|
|
echo " install_pyenv - Install Pyenv"
|
|
echo " install_python_via_pyenv - Install Python via pyenv"
|
|
echo " install_java - Install Java"
|
|
echo " install_java_via_sdkman - Install Java via sdkman"
|
|
echo " install_maven_via_sdkman - Install Maven via sdkman"
|
|
echo " deploy_go - Deploy Go environment"
|
|
echo " install_gvm - Install GVM"
|
|
echo " install_go_via_gvm - Install Go via GVM"
|
|
echo " deploy_rust - Deploy Rust environment"
|
|
echo " install_node - Install Node via package manager or binary"
|
|
echo " install_node_via_nvm - Install Node via NVM"
|
|
echo " install_pnpm - Install PNPM, node version >=v18.12.00 required"
|
|
echo " deploy_node_exporter - Deploy Node Exporter for Prometheus"
|
|
echo " deploy_process_exporter - Deploy Process Exporter"
|
|
echo " deploy_prometheus - Deploy Prometheus"
|
|
echo " deploy_grafana - Deploy Grafana"
|
|
echo " deploy_jmeter - Deploy JMeter"
|
|
echo " install_nginx - Install NGINX"
|
|
echo " config_qemu_guest_agent - Configure QEMU guest agent"
|
|
echo " deploy_docker - Deploy Docker"
|
|
echo " deploy_docker_compose - Deploy Docker Compose"
|
|
echo " install_trivy - Install Trivy"
|
|
echo " clone_enterprise - Clone the enterprise repository"
|
|
echo " clone_community - Clone the community repository"
|
|
echo " clone_taosx - Clone TaosX repository"
|
|
echo " clone_taoskeeper - Clone TaosKeeper repository"
|
|
echo " clone_taostest - Clone TaosTest repository"
|
|
echo " clone_operation - Clone operation tools repository"
|
|
}
|
|
|
|
replace_apt_sources() {
|
|
# Define the codename of the Ubuntu release
|
|
local CODENAME
|
|
CODENAME=$(lsb_release -sc)
|
|
if grep -q "mirrors.aliyun.com" /etc/apt/sources.list; then
|
|
echo "The Aliyun mirror is already set."
|
|
else
|
|
echo "Backing up the original sources.list..."
|
|
cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
|
|
|
echo "Replacing sources.list with the Aliyun mirror..."
|
|
tee /etc/apt/sources.list << EOF
|
|
deb http://mirrors.aliyun.com/ubuntu/ $CODENAME main restricted universe multiverse
|
|
deb http://mirrors.aliyun.com/ubuntu/ $CODENAME-security main restricted universe multiverse
|
|
deb http://mirrors.aliyun.com/ubuntu/ $CODENAME-updates main restricted universe multiverse
|
|
deb http://mirrors.aliyun.com/ubuntu/ $CODENAME-proposed main restricted universe multiverse
|
|
deb http://mirrors.aliyun.com/ubuntu/ $CODENAME-backports main restricted universe multiverse
|
|
deb-src http://mirrors.aliyun.com/ubuntu/ $CODENAME main restricted universe multiverse
|
|
deb-src http://mirrors.aliyun.com/ubuntu/ $CODENAME-security main restricted universe multiverse
|
|
deb-src http://mirrors.aliyun.com/ubuntu/ $CODENAME-updates main restricted universe multiverse
|
|
deb-src http://mirrors.aliyun.com/ubuntu/ $CODENAME-proposed main restricted universe multiverse
|
|
deb-src http://mirrors.aliyun.com/ubuntu/ $CODENAME-backports main restricted universe multiverse
|
|
EOF
|
|
fi
|
|
echo "Updating repositories..."
|
|
apt-get update -y
|
|
echo "The sources have been replaced and updated successfully."
|
|
}
|
|
|
|
replace_yum_sources() {
|
|
if grep -q "mirrors.aliyun.com" /etc/yum.repos.d/CentOS-Base.repo; then
|
|
echo "The Aliyun mirror is already set."
|
|
else
|
|
echo "Backing up the original CentOS-Base.repo..."
|
|
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
|
|
|
|
echo "Replacing CentOS-Base.repo with the Aliyun mirror..."
|
|
tee /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
|
|
[base]
|
|
name=CentOS-$releasever - Base - Aliyun
|
|
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
|
|
gpgcheck=1
|
|
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
|
|
|
|
#released updates
|
|
[updates]
|
|
name=CentOS-$releasever - Updates - Aliyun
|
|
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
|
|
gpgcheck=1
|
|
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
|
|
|
|
#additional packages that may be useful
|
|
[extras]
|
|
name=CentOS-$releasever - Extras - Aliyun
|
|
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
|
|
gpgcheck=1
|
|
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
|
|
EOF
|
|
fi
|
|
echo "Updating repositories..."
|
|
yum makecache fast
|
|
yum install epel-release -y
|
|
yum update -y
|
|
|
|
echo "The sources have been replaced and updated successfully."
|
|
}
|
|
|
|
replace_sources() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Replacing sources for APT package manager."
|
|
replace_apt_sources
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Replacing sources for YUM package manager."
|
|
replace_yum_sources
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
update() {
|
|
echo "Updating ..."
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
apt update -y
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
yum install epel-release -y
|
|
yum update -y
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
upgrade() {
|
|
echo "Upgrading ..."
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
apt upgrade -y
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
yum upgrade -y
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
config_frontend() {
|
|
# only ubuntu need
|
|
if [ -f /etc/debian_version ]; then
|
|
echo "Configuring frontend..."
|
|
add_config_if_not_exist "export DEBIAN_FRONTEND=noninteractive" "$BASH_RC"
|
|
fi
|
|
update
|
|
upgrade
|
|
systemctl restart dbus.service network-dispatcher.service
|
|
|
|
}
|
|
|
|
# Adds a configuration to a file if it does not already exist
|
|
add_config_if_not_exist() {
|
|
local config="$1"
|
|
local file="$2"
|
|
grep -qF -- "$config" "$file" || echo "$config" >> "$file"
|
|
}
|
|
|
|
# Function to check if a tool is installed
|
|
check_installed() {
|
|
local command_name="$1"
|
|
if command -v "$command_name" >/dev/null 2>&1; then
|
|
echo "$command_name is already installed. Skipping installation."
|
|
return 0
|
|
else
|
|
echo "$command_name is not installed."
|
|
return 1
|
|
fi
|
|
}
|
|
# General error handling function
|
|
check_status() {
|
|
local message_on_failure="$1"
|
|
local message_on_success="$2"
|
|
local exit_code="$3"
|
|
|
|
if [ "${exit_code:-0}" -ne 0 ]; then
|
|
echo -e "${RED}${message_on_failure}${NO_COLOR}"
|
|
exit 1
|
|
else
|
|
echo -e "${GREEN}${message_on_success}${NO_COLOR}"
|
|
fi
|
|
}
|
|
|
|
# Config Share-NFS server
|
|
config_share_server() {
|
|
echo "Configuring share server..."
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
install_package "nfs-common"
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
install_package "nfs-utils"
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
mkdir -p /mnt/share_server
|
|
add_config_if_not_exist "$FSTAB_LINE" /etc/fstab
|
|
mount -a
|
|
check_status "Failed to configure share server" "Share server configured successfully." $?
|
|
}
|
|
|
|
# Init environment
|
|
init_env() {
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
export LC_CTYPE="en_US.UTF-8"
|
|
}
|
|
|
|
# Install packages
|
|
install_packages() {
|
|
echo "Installing $package..."
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
install_package $SYSTEM_APT_TOOLS
|
|
install_package $BUILD_APT_TOOLS
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
yum install epel-release -y
|
|
install_package $SYSTEM_YUM_TOOLS
|
|
install_package $BUILD_YUM_TOOLS
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Install package
|
|
install_package() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
install_via_apt "$@"
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
install_via_yum "$@"
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Install package via apt
|
|
install_via_apt() {
|
|
echo -e "${YELLOW}Installing packages: $*...${NO_COLOR}"
|
|
if DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" "$@"; then
|
|
echo -e "${GREEN}Installed packages successfully.${NO_COLOR}"
|
|
else
|
|
echo -e "${RED}Failed to install packages.${NO_COLOR}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Install package via yum
|
|
install_via_yum() {
|
|
echo -e "${YELLOW}Installing packages: $*...${NO_COLOR}"
|
|
if yum install -y "$@"; then
|
|
echo -e "${GREEN}Installed packages successfully.${NO_COLOR}"
|
|
else
|
|
echo -e "${RED}Failed to install packages.${NO_COLOR}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# disable and stop firewalld
|
|
disable_firewalld() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Only Debian or Ubuntu
|
|
echo "ufw disable..."
|
|
ufw disable
|
|
check_status "Failed to disable ufw" "Ufw disabled successfully." $?
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Only Red Hat or CentOS
|
|
echo "Disabling firewalld..."
|
|
systemctl stop firewalld
|
|
systemctl disable firewalld
|
|
check_status "Failed to disable firewalld" "Firewalld disabled successfully." $?
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Modifies SSH configuration and sets the root password
|
|
config_ssh() {
|
|
echo "Configuring SSH settings..."
|
|
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
|
|
sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
|
|
|
|
echo "Restarting SSH..."
|
|
if [ "$DIST_VERSION" = "24.04" ]; then
|
|
systemctl restart ssh
|
|
else
|
|
systemctl restart sshd
|
|
fi
|
|
check_status "Failed to restart SSH" "SSH restarted successfully." $?
|
|
}
|
|
|
|
# Sets the timezone
|
|
config_timezone() {
|
|
echo "Setting timezone to $DEFAULT_TIMEZONE..."
|
|
timedatectl set-timezone "$DEFAULT_TIMEZONE"
|
|
check_status "Failed to set timezone" "Timezone set to $DEFAULT_TIMEZONE successfully." $?
|
|
}
|
|
|
|
# Disables service
|
|
disable_service() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Only Debian or Ubuntu
|
|
echo "Stop and disable and related services..."
|
|
systemctl stop apt-daily.service apt-daily-upgrade.service apt-daily-upgrade.timer apt-daily.timer unattended-upgrades
|
|
systemctl disable apt-daily.service apt-daily-upgrade.service apt-daily-upgrade.timer apt-daily.timer unattended-upgrades
|
|
check_status "Failed to disable related services" "Related services disabled successfully." $?
|
|
fi
|
|
}
|
|
|
|
# Config dns for Red Hat or CentOS
|
|
config_redhat_dns() {
|
|
local DEFAULT_DNS="192.168.2.99"
|
|
echo "Configuring DNS settings to use $INTERNAL_DNS and $DEFAULT_DNS..."
|
|
echo "nameserver $INTERNAL_DNS" > /etc/resolv.conf
|
|
echo "nameserver $DEFAULT_DNS" >> /etc/resolv.conf
|
|
check_status "Failed to configure DNS" "DNS configured to use $INTERNAL_DNS and $DEFAULT_DNS successfully." $?
|
|
}
|
|
|
|
# Config dns for Debian or Ubuntu
|
|
config_debian_dns() {
|
|
local DEFAULT_DNS="192.168.2.99"
|
|
echo "Configuring DNS settings to use $INTERNAL_DNS and $DEFAULT_DNS..."
|
|
systemctl stop systemd-resolved.service
|
|
echo "[Resolve]" > /etc/systemd/resolved.conf
|
|
echo "DNS=$INTERNAL_DNS" >> /etc/systemd/resolved.conf
|
|
echo "DNS=$DEFAULT_DNS" >> /etc/systemd/resolved.conf
|
|
systemctl restart systemd-resolved.service
|
|
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
|
|
check_status "Failed to configure DNS" "DNS configured to use $INTERNAL_DNS and $DEFAULT_DNS successfully." $?
|
|
}
|
|
|
|
# Config DNS settings
|
|
config_dns() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Configuring DNS settings for Debian or Ubuntu..."
|
|
config_debian_dns
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Configuring DNS settings for Red Hat or CentOS..."
|
|
config_redhat_dns
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Config qemu-guest-agent
|
|
config_qemu_guest_agent() {
|
|
install_package "qemu-guest-agent"
|
|
echo "Configuring qemu-guest-agent..."
|
|
systemctl enable qemu-guest-agent
|
|
systemctl start qemu-guest-agent
|
|
check_status "Failed to configure qemu-guest-agent" "Qemu-guest-agent configured successfully." $?
|
|
}
|
|
|
|
# Config custom settings
|
|
config_custom_settings() {
|
|
echo "Configuring custom settings..."
|
|
marker="parse_git_branch"
|
|
|
|
if grep -qF "$marker" "$BASH_RC"; then
|
|
echo "Configuration already exists in ""$BASH_RC""."
|
|
else
|
|
echo "Adding configuration to ""$BASH_RC""."
|
|
echo "$CUSTOM_SETTINGS" >>"$BASH_RC"
|
|
echo "Custom settings have been updated in your $BASH_RC file."
|
|
fi
|
|
check_status "Failed to apply custom settings" "Custom settings configured successfully." $?
|
|
}
|
|
|
|
# Config core dump settings
|
|
config_coredump() {
|
|
echo "Configuring core dump directory..."
|
|
mkdir -p $COREPATH
|
|
add_config_if_not_exist "kernel.core_pattern=$COREPATH/core_%e-%p" /etc/sysctl.conf
|
|
add_config_if_not_exist "ulimit -n 600000" "$BASH_RC"
|
|
add_config_if_not_exist "ulimit -c unlimited" "$BASH_RC"
|
|
sysctl -p
|
|
check_status "Failed to apply core dump settings" "Core path:$COREPATH applied successfully." $?
|
|
}
|
|
|
|
# Modifies system resource limits and TCP/IP core parameters
|
|
config_system_limits() {
|
|
echo "Configuring system limits and kernel parameters..."
|
|
local sysctl_conf="/etc/sysctl.conf"
|
|
local limits_conf="/etc/security/limits.conf"
|
|
|
|
add_config_if_not_exist "fs.nr_open = 1048576" $sysctl_conf
|
|
add_config_if_not_exist "net.core.somaxconn=10240" $sysctl_conf
|
|
add_config_if_not_exist "net.core.netdev_max_backlog=20480" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_max_syn_backlog=10240" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_retries2=5" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_syn_retries=2" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_synack_retries=2" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_tw_reuse=1" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_keepalive_time=600" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_abort_on_overflow=1" $sysctl_conf
|
|
add_config_if_not_exist "net.ipv4.tcp_max_tw_buckets=5000" $sysctl_conf
|
|
|
|
sysctl -p
|
|
check_status "Failed to apply sysctl settings" "Apply sysctl settings successfully." $?
|
|
|
|
for limit in "soft nproc 65536" "soft nofile 65536" "soft stack 65536" "hard nproc 65536" "hard nofile 65536" "hard stack 65536"; do
|
|
add_config_if_not_exist "* $limit" $limits_conf
|
|
add_config_if_not_exist "root $limit" $limits_conf
|
|
done
|
|
check_status "Failed to apply limits settings" "Apply limits settings successfully." $?
|
|
}
|
|
|
|
# Check the operating system version
|
|
centos_skip_check() {
|
|
# Check if the operating system is CentOS 7
|
|
if [[ -f /etc/redhat-release ]]; then
|
|
if grep -q "CentOS Linux release 7" /etc/redhat-release; then
|
|
echo "This platform requires you to manually upgrade gcc and glibc."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Other logic can go here...
|
|
|
|
# Deploy cmake
|
|
deploy_cmake() {
|
|
# Check if cmake is installed
|
|
# if command -v cmake >/dev/null 2>&1; then
|
|
# echo "Cmake is already installed. Skipping installation."
|
|
# cmake --version
|
|
# return
|
|
# fi
|
|
if check_installed "cmake"; then
|
|
return
|
|
fi
|
|
install_package "cmake3"
|
|
ln -sf /usr/bin/cmake3 /usr/bin/cmake
|
|
check_status "Failed to install cmake" "Install cmake successfully" $?
|
|
}
|
|
|
|
|
|
# install pkg via pip
|
|
install_pip_pkg() {
|
|
if [ "$DIST_VERSION" != "24.04" ]; then
|
|
echo "Installing $PIP_PKGS ..."
|
|
pip3 install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
install_via_pip "$PIP_PKGS"
|
|
fi
|
|
}
|
|
|
|
install_via_pip() {
|
|
echo "pip install $*..."
|
|
if pip3 install $* -i https://pypi.tuna.tsinghua.edu.cn/simple; then
|
|
echo "pip install packages successfully."
|
|
else
|
|
echo "Failed to install packages."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
# Complie python
|
|
download_and_compile_python() {
|
|
if [ -f /etc/debian_version ]; then
|
|
install_package gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# install_package gcc patch libffi libffi-devel python-devel zlib zlib-devel bzip2-devel openssl-devel openssl11 openssl11-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
|
|
install_package gcc zlib zlib-devel libffi libffi-devel readline-devel openssl-devel openssl11 openssl11-devel
|
|
# CFLAGS=$(pkg-config --cflags openssl11)
|
|
# export CFLAGS
|
|
# LDFLAGS=$(pkg-config --libs openssl11)
|
|
# export LDFLAGS
|
|
export CFLAGS=$(pkg-config --cflags openssl11)
|
|
export LDFLAGS=$(pkg-config --libs openssl11)
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
local VERSION="$1"
|
|
local DOWNLOAD_URL="https://www.python.org/ftp/python/$VERSION/Python-$VERSION.tgz"
|
|
|
|
|
|
echo "Downloading Python $VERSION from $DOWNLOAD_URL..."
|
|
wget "$DOWNLOAD_URL" -O "/tmp/Python-$VERSION.tgz"
|
|
check_status "Failed to download Python source." "Python source downloaded successfully." $?
|
|
|
|
echo "Extracting Python $VERSION..."
|
|
cd /tmp || exit
|
|
tar -xzf "Python-$VERSION.tgz"
|
|
cd "Python-$VERSION" || exit
|
|
|
|
echo "Compiling and installing Python $VERSION..."
|
|
./configure --enable-optimizations --prefix=/usr/local/python"$VERSION"
|
|
make -j"$(nproc)"
|
|
make altinstall
|
|
|
|
cd ..
|
|
rm -rf "Python-$VERSION" "Python-$VERSION.tgz"
|
|
|
|
MAJOR_MINOR_VERSION=$(echo "$VERSION" | cut -d '.' -f 1-2)
|
|
|
|
# files=(
|
|
# "/usr/bin/python3"
|
|
# "/usr/bin/python"
|
|
# "/usr/bin/pip3"
|
|
# "/usr/bin/pip"
|
|
# )
|
|
|
|
# for file in "${files[@]}"; do
|
|
# if [ -e "$file" ]; then
|
|
# backup_file="$file.bak"
|
|
# echo "Backing up $file to $backup_file"
|
|
# cp "$file" "$backup_file"
|
|
# else
|
|
# echo "$file does not exist, skipping."
|
|
# fi
|
|
# done
|
|
|
|
ln -sf /usr/local/python"$VERSION"/bin/python"$MAJOR_MINOR_VERSION" /usr/local/bin/python3
|
|
ln -sf /usr/local/python"$VERSION"/bin/pip"$MAJOR_MINOR_VERSION" /usr/local/bin/pip3
|
|
python3 --version
|
|
check_status "Failed to install Python $VERSION" "Python $VERSION installed successfully." $?
|
|
}
|
|
|
|
upgrage_pip() {
|
|
echo "Upgrading pip..."
|
|
python3 -m pip install --upgrade pip
|
|
check_status "Failed to upgrade pip" "Pip upgraded successfully." $?
|
|
}
|
|
|
|
# Install Python via package_manager
|
|
install_python_via_package_manager() {
|
|
if [ -n "$1" ]; then
|
|
PYTHON_PACKAGE="$1"
|
|
else
|
|
PYTHON_PACKAGE="python3"
|
|
fi
|
|
install_package "$PYTHON_PACKAGE"
|
|
install_package "python3-pip"
|
|
upgrage_pip
|
|
python3 --version
|
|
}
|
|
|
|
# Install Python and pip
|
|
# shellcheck disable=SC2120
|
|
install_python() {
|
|
echo -e "${YELLOW}Installing Python...${NO_COLOR}"
|
|
# Specify the major python version to search for; default is set to 3.10 if not specified
|
|
if [ -n "$1" ]; then
|
|
PYTHON_VERSION="$1"
|
|
else
|
|
install_python_via_package_manager "$PYTHON_PACKAGE"
|
|
exit 0
|
|
fi
|
|
MAJOR_MINOR_VERSION=$(echo "$PYTHON_VERSION" | cut -d '.' -f 1-2)
|
|
# Check if the JDK package is available in the repository
|
|
if [ -f /etc/debian_version ]; then
|
|
PYTHON_PACKAGE="python${MAJOR_MINOR_VERSION}"
|
|
if apt-cache search "$PYTHON_PACKAGE" | grep -w "$PYTHON_PACKAGE"; then
|
|
install_python_via_package_manager "$PYTHON_PACKAGE"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}Failed to install Python using package manager.${NO_COLOR}"
|
|
fi
|
|
elif [ -f /etc/redhat-release ]; then
|
|
PYTHON_PACKAGE="python${MAJOR_MINOR_VERSION//./}"
|
|
if yum list available | grep -w "$PYTHON_PACKAGE"; then
|
|
install_python_via_package_manager "$PYTHON_PACKAGE"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}Failed to install Python using package manager.${NO_COLOR}"
|
|
fi
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${YELLOW}$PYTHON_PACKAGE not found in source repository. Attempting to download and install manually....${NO_COLOR}"
|
|
download_and_compile_python "$PYTHON_VERSION"
|
|
upgrage_pip
|
|
|
|
# Check installation status
|
|
INSTALLED_VERSION=$(python3 --version 2>&1)
|
|
if echo "$INSTALLED_VERSION" | grep -q "$MAJOR_MINOR_VERSION"; then
|
|
echo -e "${GREEN}Python $MAJOR_MINOR_VERSION installed successfully.${NO_COLOR}"
|
|
else
|
|
echo -e "${YELLOW}Python version not match.${NO_COLOR}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
update_redhat_gcc() {
|
|
echo "Updating the system..."
|
|
update
|
|
|
|
echo "Installing dependencies..."
|
|
yum groupinstall -y "Development Tools"
|
|
install_package gmp-devel mpfr-devel libmpc-devel wget
|
|
|
|
echo "Downloading GCC $GCC_VERSION..."
|
|
cd /usr/local/src || exit
|
|
wget https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.gz
|
|
wget https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.gz.sig
|
|
|
|
echo "Extracting GCC $GCC_VERSION..."
|
|
tar -xzf gcc-$GCC_VERSION.tar.gz
|
|
cd gcc-$GCC_VERSION || exit
|
|
|
|
echo "Downloading necessary dependencies for GCC..."
|
|
./contrib/download_prerequisites
|
|
|
|
mkdir build
|
|
cd build || exit
|
|
|
|
echo "Configuring GCC..."
|
|
../configure --enable-languages=c,c++ --disable-multilib --prefix=/usr
|
|
|
|
echo "Compiling GCC, this may take a while..."
|
|
make -j"$(nproc)"
|
|
make install
|
|
|
|
echo "Cleaning up downloaded files..."
|
|
cd /usr/local/src || exit
|
|
rm -rf gcc-$GCC_VERSION gcc-$GCC_VERSION.tar.gz gcc-$GCC_VERSION.tar.gz.sig
|
|
echo "Cleanup completed."
|
|
|
|
echo "GCC installation completed. Verifying installation..."
|
|
gcc --version
|
|
check_status "Failed to install GCC" "GCC $GCC_VERSION installed successfully." $?
|
|
|
|
# Backup
|
|
if [ -f "/lib64/libstdc++.so.6.0.28-gdb.py" ]; then
|
|
# Copy the file
|
|
mv -f /lib64/libstdc++.so.6.0.28-gdb.py /tmp/libstdc++.so.6.0.28-gdb.py
|
|
echo "File has been successfully moved to /tmp/libstdc++.so.6.0.28-gdb.py"
|
|
else
|
|
echo "File /lib64/libstdc++.so.6.0.28-gdb.py does not exist, cannot perform copy operation."
|
|
fi
|
|
}
|
|
|
|
update_redhat_tmux() {
|
|
echo "Downloading the latest version of tmux..."
|
|
cd /usr/local/src || exit
|
|
latest_tmux_version=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/tmux/tmux/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')
|
|
wget https://github.com/tmux/tmux/releases/download/"${latest_tmux_version}"/tmux-"${latest_tmux_version}".tar.gz
|
|
|
|
echo "Extracting tmux ${latest_tmux_version}..."
|
|
tar -xzf tmux-"${latest_tmux_version}".tar.gz
|
|
cd tmux-"${latest_tmux_version}" || exit
|
|
|
|
echo "Configuring tmux..."
|
|
./configure --prefix=/usr
|
|
|
|
echo "Compiling tmux, this may take a while..."
|
|
make -j"$(nproc)"
|
|
make install
|
|
|
|
echo "Cleaning up downloaded files..."
|
|
cd /usr/local/src || exit
|
|
rm -rf tmux-"${latest_tmux_version}" tmux-"${latest_tmux_version}".tar.gz
|
|
|
|
echo "Cleanup completed."
|
|
|
|
echo "tmux installation completed. Verifying installation..."
|
|
tmux -V
|
|
check_status "Failed to install tmux" "tmux ${latest_tmux_version} installed successfully." $?
|
|
}
|
|
|
|
deploy_tmux() {
|
|
if [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
update_redhat_tmux
|
|
fi
|
|
echo "Copying configuration file..."
|
|
|
|
cp "$SCRIPT_DIR/../conf/tmux.conf" ~/.tmux.conf
|
|
|
|
echo "Configuration file copied to ~/.tmux.conf."
|
|
}
|
|
|
|
|
|
# Install Java
|
|
# install_java() {
|
|
# if command -v java >/dev/null 2>&1; then
|
|
# echo "Java is already installed. Skipping installation."
|
|
# java -version
|
|
# return
|
|
# else
|
|
# echo "Installing $JDK_VERSION..."
|
|
# install_package "$JDK_VERSION"
|
|
# check_status "Failed to install Java" "Install Java successfully" $?
|
|
# fi
|
|
# }
|
|
|
|
# Install Java
|
|
# shellcheck disable=SC2120
|
|
install_java() {
|
|
echo -e "${YELLOW}Installing Java...${NO_COLOR}"
|
|
# Specify the major JDK version to search for; default is set to 17 if not specified
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_JDK_VERSION="$1"
|
|
else
|
|
DEFAULT_JDK_VERSION="17"
|
|
fi
|
|
|
|
# Check if the JDK package is available in the repository
|
|
if [ -f /etc/debian_version ]; then
|
|
JDK_PACKAGE="openjdk-$DEFAULT_JDK_VERSION-jdk"
|
|
if apt-cache search "$JDK_PACKAGE" | grep -q "$JDK_PACKAGE"; then
|
|
echo "Installing $JDK_PACKAGE using apt..."
|
|
fi
|
|
elif [ -f /etc/redhat-release ]; then
|
|
JDK_PACKAGE="java-$DEFAULT_JDK_VERSION-openjdk"
|
|
if yum list available | grep -q "$JDK_PACKAGE"; then
|
|
echo "Installing $JDK_PACKAGE using yum..."
|
|
fi
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
# Check installation status
|
|
if ! install_package "$JDK_PACKAGE"; then
|
|
echo -e "${RED}Failed to install Java using package manager.${NO_COLOR}"
|
|
else
|
|
echo -e "${GREEN}Java installed successfully.${NO_COLOR}"
|
|
java -version
|
|
return
|
|
fi
|
|
|
|
echo -e "${YELLOW}$JDK_PACKAGE not found in $PACKAGE_MANAGER repository. Attempting to download and install manually....${NO_COLOR}"
|
|
|
|
# URL of the archive page to search
|
|
ARCHIVE_URL="https://jdk.java.net/archive/"
|
|
|
|
# Get the latest minor version number
|
|
LATEST_VERSION=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s "$ARCHIVE_URL" | \
|
|
grep -o "jdk${DEFAULT_JDK_VERSION}\.[0-9]\+\.[0-9]\+" | \
|
|
sort -V | \
|
|
tail -n 1)
|
|
JDK_VERSION_NUM="${LATEST_VERSION#jdk}"
|
|
# Confirm the latest version found
|
|
if [[ $LATEST_VERSION =~ jdk([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then
|
|
# Print the latest version found
|
|
echo -e "${YELLOW}Latest JDK version found: $LATEST_VERSION${NO_COLOR}"
|
|
MATCH_URL="https://download.java.net/java/GA/${LATEST_VERSION}/[^ ]*linux-x64_bin.tar.gz"
|
|
JDK_DOWNLOAD_URL=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s "$ARCHIVE_URL" | \
|
|
grep -o "$MATCH_URL" | \
|
|
head -n 1)
|
|
else
|
|
echo -e "${RED}Failed to find the JDK version: $LATEST_VERSION.${NO_COLOR}"
|
|
exit 1
|
|
fi
|
|
# Download JDK
|
|
echo "Downloading OpenJDK $LATEST_VERSION from $JDK_DOWNLOAD_URL..."
|
|
wget "$JDK_DOWNLOAD_URL" -O /tmp/"${LATEST_VERSION}"_linux-x64_bin.tar.gz
|
|
check_status "Failed to download OpenJDK." "OpenJDK downloaded successfully." $?
|
|
|
|
# Extract and install
|
|
echo "Extracting OpenJDK..."
|
|
if [ -d "/usr/local/jdk-${JDK_VERSION_NUM}" ]; then
|
|
rm -rf "/usr/local/jdk-${JDK_VERSION_NUM}"
|
|
fi
|
|
tar -xzf /tmp/"${LATEST_VERSION}"_linux-x64_bin.tar.gz -C /usr/local/
|
|
rm -rf /tmp/"${LATEST_VERSION}"_linux-x64_bin.tar.gz
|
|
# Configure environment variables
|
|
echo "Configuring environment variables..."
|
|
add_config_if_not_exist "export JAVA_HOME=/usr/local/jdk-${JDK_VERSION_NUM}" "$BASH_RC"
|
|
add_config_if_not_exist "export PATH=\$PATH:\$JAVA_HOME/bin" "$BASH_RC"
|
|
# shellcheck source=/dev/null
|
|
export JAVA_HOME=/usr/local/jdk-${JDK_VERSION_NUM}
|
|
export PATH=$PATH:$JAVA_HOME/bin
|
|
INSTALLED_VERSION=$("$JAVA_HOME"/bin/java --version 2>&1)
|
|
if echo "$INSTALLED_VERSION" | grep -q "openjdk $DEFAULT_JDK_VERSION"; then
|
|
echo -e "${GREEN}Java installed successfully.${NO_COLOR}"
|
|
SOURCE_RESULTS+="source /root/.bashrc # For openjdk\n"
|
|
else
|
|
echo -e "${YELLOW}Java version not match.${NO_COLOR}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Install sdkman
|
|
install_sdkman() {
|
|
echo -e "${YELLOW}Installing SDKMAN...${NO_COLOR}"
|
|
if [ -d "$HOME/.sdkman" ]; then
|
|
echo -e "${GREEN}SDKMAN is already installed.${NO_COLOR}"
|
|
else
|
|
echo -e "${YELLOW}Installing SDKMAN...${NO_COLOR}"
|
|
install_package zip unzip
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 -s "https://get.sdkman.io" | bash
|
|
fi
|
|
}
|
|
|
|
# Install gvm
|
|
install_gvm() {
|
|
echo -e "${YELLOW}Installing GVM...${NO_COLOR}"
|
|
if [ -d "$HOME/.gvm" ]; then
|
|
echo -e "${GREEN}GVM is already installed.${NO_COLOR}"
|
|
else
|
|
install_package bison gcc make
|
|
bash < <(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
|
|
source $HOME/.gvm/scripts/gvm
|
|
gvm version
|
|
check_status "Failed to install GVM" "GVM installed successfully." $?
|
|
add_config_if_not_exist "export GO111MODULE=on" "$BASH_RC"
|
|
add_config_if_not_exist "export GOPROXY=https://goproxy.cn,direct" "$BASH_RC"
|
|
add_config_if_not_exist "export GO_BINARY_BASE_URL=https://mirrors.aliyun.com/golang/" "$BASH_RC"
|
|
add_config_if_not_exist "export GOROOT_BOOTSTRAP=$GOROOT" "$BASH_RC"
|
|
fi
|
|
SOURCE_RESULTS+="source $HOME/.gvm/scripts/gvm # For gvm\n"
|
|
}
|
|
|
|
# enable pyenv
|
|
enable_pyenv() {
|
|
export PATH="$HOME/.pyenv/bin:$PATH"
|
|
eval "$(pyenv init --path)"
|
|
eval "$(pyenv init -)"
|
|
}
|
|
|
|
# Install pyenv
|
|
install_pyenv() {
|
|
echo -e "${YELLOW}Installing Pyenv...${NO_COLOR}"
|
|
if [ -d "$HOME/.pyenv" ]; then
|
|
echo -e "${GREEN}Pyenv is already installed.${NO_COLOR}"
|
|
else
|
|
curl -L https://gitee.com/xinghuipeng/pyenv-installer/raw/master/bin/pyenv-installer | bash
|
|
enable_pyenv
|
|
add_config_if_not_exist "export PATH=\"\$HOME/.pyenv/bin:\$PATH\"" "$BASH_RC"
|
|
add_config_if_not_exist "eval \"\$(pyenv init --path)\"" "$BASH_RC"
|
|
add_config_if_not_exist "eval \"\$(pyenv init -)\"" "$BASH_RC"
|
|
pyenv --version
|
|
check_status "Failed to install Pyenv" "Pyenv installed successfully." $?
|
|
fi
|
|
SOURCE_RESULTS+="source $BASH_RC For: pyenv/python\n"
|
|
}
|
|
|
|
# Install python via pyenv
|
|
install_python_via_pyenv() {
|
|
echo -e "${YELLOW}Installing Python via Pyenv...${NO_COLOR}"
|
|
if [ -f /etc/debian_version ]; then
|
|
install_package gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
|
|
elif [ -f /etc/redhat-release ]; then
|
|
install_package gcc zlib zlib-devel libffi libffi-devel readline-devel openssl-devel openssl11 openssl11-devel
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_PYTHON_VERSION="$1"
|
|
else
|
|
DEFAULT_PYTHON_VERSION="3.10.12"
|
|
fi
|
|
install_pyenv
|
|
enable_pyenv
|
|
pyenv install "$DEFAULT_PYTHON_VERSION"
|
|
pyenv global "$DEFAULT_PYTHON_VERSION"
|
|
python --version
|
|
check_status "Failed to install Python" "Python installed successfully." $?
|
|
}
|
|
|
|
# Install Maven
|
|
# shellcheck disable=SC2120
|
|
install_maven_via_sdkman() {
|
|
echo -e "${YELLOW}Installing maven...${NO_COLOR}"
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_MVN_VERSION="$1"
|
|
install_sdkman
|
|
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
|
|
# 3.2.5
|
|
yes | sdk install maven "$DEFAULT_MVN_VERSION"
|
|
else
|
|
install_package "maven"
|
|
fi
|
|
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
|
|
mvn -version
|
|
check_status "Failed to install maven" "Maven installed successfully." $?
|
|
}
|
|
|
|
install_java_via_sdkman() {
|
|
echo -e "${YELLOW}Installing java...${NO_COLOR}"
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_JDK_VERSION="$1"
|
|
else
|
|
DEFAULT_JDK_VERSION="17"
|
|
fi
|
|
install_sdkman
|
|
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
|
|
yes | sdk install java "$DEFAULT_JDK_VERSION-open"
|
|
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
|
|
java -version
|
|
check_status "Failed to install java" "Java installed successfully." $?
|
|
SOURCE_RESULTS+="source $HOME/.sdkman/bin/sdkman-init.sh # For sdkman/java/maven\n"
|
|
}
|
|
|
|
# Install Go
|
|
deploy_go() {
|
|
# Define the installation location for Go
|
|
GO_INSTALL_DIR="/usr/local/go"
|
|
GOPATH_DIR="/root/go"
|
|
|
|
# Check if Go is installed
|
|
# if command -v go >/dev/null 2>&1; then
|
|
# echo "Go is already installed. Skipping installation."
|
|
# return
|
|
# fi
|
|
if check_installed "go"; then
|
|
return
|
|
fi
|
|
# Fetch the latest version number of Go
|
|
GO_LATEST_DATA=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://golang.google.cn/VERSION?m=text)
|
|
GO_LATEST_VERSION=$(echo "$GO_LATEST_DATA" | grep -oP 'go[0-9]+\.[0-9]+\.[0-9]+')
|
|
# Download and install the latest version of Go
|
|
echo "Installing $GO_LATEST_VERSION..."
|
|
wget https://golang.google.cn/dl/$GO_LATEST_VERSION.linux-amd64.tar.gz -O go.tar.gz
|
|
|
|
# Extract to the specified directory
|
|
tar -C /usr/local -xzf go.tar.gz
|
|
rm -rf go.tar.gz
|
|
|
|
# Configure environment variables using the helper function
|
|
add_config_if_not_exist "export GOROOT=$GO_INSTALL_DIR" "$BASH_RC"
|
|
add_config_if_not_exist "export GOPATH=$GOPATH_DIR" "$BASH_RC"
|
|
add_config_if_not_exist "export PATH=\$PATH:\$GOROOT/bin" "$BASH_RC"
|
|
add_config_if_not_exist "export GO111MODULE=on" "$BASH_RC"
|
|
add_config_if_not_exist "export GOPROXY=https://goproxy.cn,direct" "$BASH_RC"
|
|
|
|
# Apply the environment variables
|
|
$GO_INSTALL_DIR/bin/go version
|
|
check_status "Failed to install GO" "Install GO successfully" $?
|
|
SOURCE_RESULTS+="source $BASH_RC # For golang\n"
|
|
}
|
|
|
|
# Install Go via gvm
|
|
install_go_via_gvm() {
|
|
echo -e "${YELLOW}Installing Go...${NO_COLOR}"
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_GO_VERSION="$1"
|
|
else
|
|
DEFAULT_GO_VERSION="1.23.0"
|
|
fi
|
|
install_gvm
|
|
source $HOME/.gvm/scripts/gvm
|
|
export GO111MODULE=on
|
|
export GOPROXY=https://goproxy.cn,direct
|
|
export GO_BINARY_BASE_URL=https://mirrors.aliyun.com/golang/
|
|
export GOROOT_BOOTSTRAP=$GOROOT
|
|
|
|
gvm install go"$DEFAULT_GO_VERSION" -B
|
|
gvm use go"$DEFAULT_GO_VERSION"
|
|
gvm use go"$DEFAULT_GO_VERSION" --default
|
|
|
|
go version
|
|
check_status "Failed to install Go" "Go installed successfully." $?
|
|
SOURCE_RESULTS+="source $BASH_RC # For golang\n"
|
|
}
|
|
|
|
# Function to install Rust and Cargo
|
|
deploy_rust() {
|
|
# Check if Rust is already installed
|
|
if ! command -v rustc &> /dev/null; then
|
|
# add_config_if_not_exist "export RUSTUP_DIST_SERVER=http://mirrors.ustc.edu.cn/rust-static" $BASH_RC
|
|
# export RUSTUP_DIST_SERVER=http://mirrors.ustc.edu.cn/rust-static
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
echo "Using APT package manager."
|
|
install_package build-essential
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Using YUM package manager."
|
|
yum groupinstall -y "Development Tools"
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
|
|
add_config_if_not_exist "export RUSTUP_DIST_SERVER=\"https://rsproxy.cn\"" "$BASH_RC"
|
|
add_config_if_not_exist "export RUSTUP_UPDATE_ROOT=\"https://rsproxy.cn/rustup\"" "$BASH_RC"
|
|
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
|
|
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
|
|
|
|
echo "Rust is not installed. Installing Rust and Cargo..."
|
|
# Download and install Rust and Cargo
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh -s -- -y
|
|
|
|
echo "Cargo settings..."
|
|
marker="git-fetch-with-cli"
|
|
|
|
if grep -qF "$marker" "$CARGO_CONFIG_FILE"; then
|
|
echo "Configuration already exists in ""$CARGO_CONFIG_FILE""."
|
|
else
|
|
echo "Adding configuration to ""$CARGO_CONFIG_FILE""."
|
|
echo "$CARGO_CONFIG" >>"$CARGO_CONFIG_FILE"
|
|
echo "Cargo config have been updated in your $CARGO_CONFIG_FILE file."
|
|
fi
|
|
|
|
# Source the Cargo environment script to update the current shell
|
|
if [ -f "$HOME/.cargo/env" ]; then
|
|
source "$HOME/.cargo/env"
|
|
fi
|
|
# Check if the installation was successful
|
|
rustc --version
|
|
# Install cargo-make
|
|
cargo install cargo-make
|
|
check_status "Failed to install Rust" "Install Rust successfully" $?
|
|
SOURCE_RESULTS+="source $BASH_RC && source $HOME/.cargo/env # For cargo/rust\n"
|
|
else
|
|
echo "Rust is already installed."
|
|
fi
|
|
}
|
|
|
|
# Update GCC for Ubuntu 18.04
|
|
update_ubuntu_gcc_18.04() {
|
|
echo -e "${YELLOW}Updating GCC for Ubuntu 18.04...${NO_COLOR}"
|
|
install_package software-properties-common
|
|
yes | add-apt-repository ppa:ubuntu-toolchain-r/test
|
|
update
|
|
install_package gcc-9 g++-9
|
|
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9
|
|
check_status "Failed to update GCC" "GCC updated successfully." $?
|
|
}
|
|
|
|
install_node_in_ubuntu18.04() {
|
|
# very slow and not test
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_NODE_VERSION="$1"
|
|
else
|
|
DEFAULT_NODE_VERSION="14"
|
|
fi
|
|
NODE_DISTRO="node-v$DEFAULT_NODE_VERSION-linux-x64"
|
|
update_ubuntu_gcc_18.04
|
|
echo "Installing Node..."
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 -O https://nodejs.org/dist/v22.0.0/node-v22.0.0.tar.gz
|
|
tar -xzf node-v22.0.0.tar.gz
|
|
cd node-v22.0.0 || exit
|
|
./configure
|
|
make
|
|
make install
|
|
}
|
|
|
|
|
|
# Install pnpm
|
|
install_pnpm() {
|
|
echo -e "${YELLOW}Installing pnpm...${NO_COLOR}"
|
|
centos_skip_check
|
|
NODE_VERSION=$(node -v)
|
|
|
|
MAJOR_VERSION=$(echo "$NODE_VERSION" | cut -d '.' -f 1 | tr -d 'v')
|
|
MINOR_VERSION=$(echo "$NODE_VERSION" | cut -d '.' -f 2)
|
|
PATCH_VERSION=$(echo "$NODE_VERSION" | cut -d '.' -f 3)
|
|
|
|
VERSION_NUMBER=$((MAJOR_VERSION * 10000 + MINOR_VERSION * 100 + PATCH_VERSION))
|
|
|
|
REQUIRED_VERSION=181200 # v18.12.00
|
|
|
|
if [ $VERSION_NUMBER -ge $REQUIRED_VERSION ]; then
|
|
echo "Node version is $NODE_VERSION, installing pnpm..."
|
|
npm install --global pnpm
|
|
pnpm --version
|
|
check_status "Failed to install pnpm" "pnpm installed successfully." $?
|
|
else
|
|
echo "Node version is $NODE_VERSION, skipping pnpm installation."
|
|
fi
|
|
|
|
}
|
|
|
|
# Install Node via nvm
|
|
# shellcheck disable=SC2120
|
|
install_node_via_nvm () {
|
|
echo -e "${YELLOW}Installing Node via NVM...${NO_COLOR}"
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_NODE_VERSION="$1"
|
|
else
|
|
DEFAULT_NODE_VERSION=""
|
|
fi
|
|
|
|
if [[ -f /etc/redhat-release ]]; then
|
|
if [[ "$1" != "16.20.2" ]]; then
|
|
centos_skip_check
|
|
fi
|
|
fi
|
|
|
|
# Install NVM
|
|
if ! command -v nvm &> /dev/null; then
|
|
NVM_VERSION=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/nvm-sh/nvm/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 -o- https://raw.githubusercontent.com/nvm-sh/nvm/"$NVM_VERSION"/install.sh | bash
|
|
export NVM_DIR="$HOME/.nvm"
|
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
|
echo -e "${GREEN}NVM installed successfully.${NO_COLOR}"
|
|
SOURCE_RESULTS+="source $NVM_DIR/nvm.sh && source $NVM_DIR/bash_completion # For nvm/node/npm/yarn/pnpm\n"
|
|
else
|
|
echo -e "${GREEN}NVM is already installed.${NO_COLOR}"
|
|
fi
|
|
|
|
# Check if version is specified
|
|
if [ -n "$1" ]; then
|
|
NODE_VERSION="$1" # use specified version
|
|
echo -e "${YELLOW}Installing Node version $NODE_VERSION...${NO_COLOR}"
|
|
nvm install "$NODE_VERSION"
|
|
else
|
|
echo -e "${YELLOW}Installing the latest version of Node...${NO_COLOR}"
|
|
nvm install node # use latest version
|
|
fi
|
|
nvm alias default node # set default version
|
|
|
|
echo -e "${GREEN}Node installed successfully.${NO_COLOR}"
|
|
|
|
npm config set fetch-retry-maxtimeout 120000
|
|
npm config set fetch-retry-factor 5
|
|
npm config set registry=https://registry.npmmirror.com
|
|
npm install --global yarn
|
|
npm install --global pnpm
|
|
# NPM_BIN_DIR=$(npm bin -g)
|
|
# if [ -d "$NPM_BIN_DIR" ]; then
|
|
# ln -sf "$NPM_BIN_DIR/yarn" /usr/bin/yarn
|
|
# ln -sf "$NPM_BIN_DIR/yarnpkg" /usr/bin/yarnpkg
|
|
# echo -e "${GREEN}Yarn installed successfully.${NO_COLOR}"
|
|
# else
|
|
# echo -e "${RED}Failed to find npm global bin directory. Yarn installation may not be complete.${NO_COLOR}"
|
|
# fi
|
|
node --version
|
|
check_status "Failed to install Node" "Node installed successfully." $?
|
|
npm --version
|
|
check_status "Failed to install npm" "npm installed successfully." $?
|
|
yarn --version
|
|
check_status "Failed to install Yarn" "Yarn installed successfully." $?
|
|
}
|
|
|
|
# Install Node npm Yarn
|
|
# shellcheck disable=SC2120
|
|
install_node() {
|
|
echo -e "${YELLOW}Installing Node...${NO_COLOR}"
|
|
if [ -n "$1" ]; then
|
|
DEFAULT_NODE_VERSION="$1"
|
|
if [[ -f /etc/redhat-release ]]; then
|
|
if [[ "$1" != "16.20.2" ]]; then
|
|
centos_skip_check
|
|
fi
|
|
fi
|
|
echo -e "${YELLOW}Installing Node version $DEFAULT_NODE_VERSION from source...${NO_COLOR}"
|
|
NODE_DISTRO="node-v$DEFAULT_NODE_VERSION-linux-x64"
|
|
wget "https://nodejs.org/dist/v$DEFAULT_NODE_VERSION/$NODE_DISTRO.tar.xz" -O "/tmp/$NODE_DISTRO.tar.xz"
|
|
tar -xf "/tmp/$NODE_DISTRO.tar.xz" -C /usr/local/lib/
|
|
ln -sf "/usr/local/lib/$NODE_DISTRO/bin/node" /usr/bin/node
|
|
ln -sf "/usr/local/lib/$NODE_DISTRO/bin/npm" /usr/bin/npm
|
|
ln -sf "/usr/local/lib/$NODE_DISTRO/bin/npx" /usr/bin/npx
|
|
rm -rf "/tmp/$NODE_DISTRO.tar.xz"
|
|
node --version
|
|
echo -e "${GREEN}Node version $DEFAULT_NODE_VERSION installed successfully.${NO_COLOR}"
|
|
else
|
|
install_package "nodejs"
|
|
install_package "npm"
|
|
fi
|
|
node --version
|
|
check_status "Failed to install Node" "Node installed successfully." $?
|
|
|
|
npm --version
|
|
check_status "Failed to install npm" "npm installed successfully." $?
|
|
npm config set fetch-retry-maxtimeout 120000
|
|
npm config set fetch-retry-attempts
|
|
npm config set fetch-retry-factor 5
|
|
npm config set registry=https://registry.npmmirror.com
|
|
npm install --global yarn
|
|
NPM_BIN_DIR=$(npm bin -g)
|
|
if [ -d "$NPM_BIN_DIR" ]; then
|
|
ln -sf "$NPM_BIN_DIR/yarn" /usr/bin/yarn
|
|
ln -sf "$NPM_BIN_DIR/yarnpkg" /usr/bin/yarnpkg
|
|
echo -e "${GREEN}Yarn installed successfully.${NO_COLOR}"
|
|
else
|
|
echo -e "${RED}Failed to find npm global bin directory. Yarn installation may not be complete.${NO_COLOR}"
|
|
fi
|
|
yarn --version
|
|
check_status "Failed to install Yarn" "Yarn installed successfully." $?
|
|
}
|
|
|
|
|
|
|
|
# Deploy Git
|
|
deploy_git() {
|
|
install_package "git"
|
|
git --version
|
|
check_status "Failed to install Git" "Git installed successfully." $?
|
|
git config --global user.name "taos-support"
|
|
git config --global user.email "it@taosdata.com"
|
|
git config --global credential.helper store
|
|
}
|
|
|
|
deploy_node_exporter() {
|
|
if [ ! -f "$NODE_EXPORTER_BINARY" ]; then
|
|
echo "Node Exporter is not installed. Installing now..."
|
|
|
|
echo "Fetching the latest version of Node Exporter..."
|
|
LATEST_URL=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | jq -r '.assets[] | select(.name | test("node_exporter-.*linux-amd64.tar.gz")) | .browser_download_url')
|
|
|
|
if [ -z "$LATEST_URL" ]; then
|
|
echo "Failed to fetch the latest Node Exporter release URL. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Downloading Node Exporter from $LATEST_URL..."
|
|
wget "$LATEST_URL" -O node_exporter.tar.gz
|
|
|
|
echo "Extracting Node Exporter..."
|
|
tar -xzf node_exporter.tar.gz
|
|
cd node_exporter-*.linux-amd64 || exit
|
|
|
|
echo "Copying binary..."
|
|
cp node_exporter /usr/local/bin/
|
|
|
|
echo "Creating systemd service..."
|
|
cat <<EOF > /etc/systemd/system/node_exporter.service
|
|
[Unit]
|
|
Description=Node Exporter
|
|
|
|
[Service]
|
|
ExecStart=/usr/local/bin/node_exporter
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
# Start Node Exporter and enable it to run on startup
|
|
systemctl daemon-reload
|
|
systemctl start node_exporter
|
|
systemctl enable node_exporter
|
|
|
|
# Clean up the downloaded tar to save space
|
|
cd ..
|
|
rm -rf node_exporter*.tar.gz node_exporter-*.linux-amd64
|
|
node_exporter --version
|
|
check_status "Failed to install Node Exporter" "Node Exporter installed successfully." $?
|
|
else
|
|
echo "Node Exporter is already installed."
|
|
fi
|
|
}
|
|
|
|
deploy_process_exporter() {
|
|
if [ ! -f "$PROCESS_EXPORTER_BINARY" ]; then
|
|
echo "Process Exporter is not installed. Installing now..."
|
|
|
|
echo "Fetching the latest version of Process Exporter..."
|
|
LATEST_URL=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/ncabatoff/process-exporter/releases/latest | jq -r '.assets[] | select(.name | test("process-exporter-.*linux-amd64.tar.gz")) | .browser_download_url')
|
|
|
|
if [ -z "$LATEST_URL" ]; then
|
|
echo "Failed to fetch the latest Process Exporter release URL. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Downloading Process Exporter from $LATEST_URL..."
|
|
wget "$LATEST_URL" -O process-exporter.tar.gz
|
|
|
|
echo "Extracting Process Exporter..."
|
|
tar -xzf process-exporter.tar.gz
|
|
cd process-exporter-*.linux-amd64 || exit
|
|
|
|
echo "Copying binary..."
|
|
cp process-exporter /usr/local/bin/process-exporter
|
|
|
|
echo "Creating configuration file..."
|
|
cat <<EOF > /etc/process_exporter.yml
|
|
process_names:
|
|
- name: "{{.Comm}}"
|
|
cmdline:
|
|
- taosd
|
|
EOF
|
|
|
|
echo "Creating systemd service..."
|
|
cat <<EOF > /etc/systemd/system/process_exporter.service
|
|
[Unit]
|
|
Description=Process Exporter
|
|
|
|
[Service]
|
|
ExecStart=/usr/local/bin/process-exporter --config.path /etc/process_exporter.yml
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
# Start Process Exporter and enable it to run on startup
|
|
systemctl daemon-reload
|
|
systemctl start process_exporter
|
|
systemctl enable process_exporter
|
|
|
|
# Clean up the downloaded tar to save space
|
|
cd ..
|
|
rm -rf process-exporter*.tar.gz process-exporter-*.linux-amd64
|
|
process-exporter --version
|
|
check_status "Failed to install Process Exporter" "Process Exporter installed successfully." $?
|
|
else
|
|
echo "Process Exporter is already installed."
|
|
fi
|
|
}
|
|
|
|
deploy_prometheus() {
|
|
# Check if Prometheus binary exists
|
|
if [ ! -f "$PROMETHEUS_BINARY" ]; then
|
|
echo "Prometheus is not installed. Installing now..."
|
|
|
|
echo "Fetching the latest version of Prometheus..."
|
|
LATEST_URL=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/prometheus/prometheus/releases/latest | jq -r '.assets[] | select(.name | test("prometheus-.*linux-amd64.tar.gz")) | .browser_download_url')
|
|
|
|
if [ -z "$LATEST_URL" ]; then
|
|
echo "Failed to fetch the latest Prometheus release URL. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Downloading Prometheus from $LATEST_URL..."
|
|
wget "$LATEST_URL" -O prometheus.tar.gz
|
|
|
|
echo "Extracting Prometheus..."
|
|
tar -xzf prometheus.tar.gz
|
|
cd prometheus-*.linux-amd64 || exit
|
|
|
|
echo "Creating directories..."
|
|
mkdir -p /etc/prometheus /var/lib/prometheus
|
|
|
|
echo "Copying binaries and configuration..."
|
|
cp prometheus promtool /usr/local/bin/
|
|
|
|
echo "Setting up Prometheus configuration..."
|
|
cat <<EOF > /etc/prometheus/prometheus.yml
|
|
global:
|
|
scrape_interval: 15s
|
|
scrape_configs:
|
|
- job_name: 'node_exporter'
|
|
static_configs:
|
|
- targets: ['localhost:9100']
|
|
EOF
|
|
|
|
echo "Creating systemd service..."
|
|
cat <<EOF > /etc/systemd/system/prometheus.service
|
|
[Unit]
|
|
Description=Prometheus Service
|
|
|
|
[Service]
|
|
ExecStart=/usr/local/bin/prometheus \\
|
|
--config.file /etc/prometheus/prometheus.yml \\
|
|
--storage.tsdb.path /var/lib/prometheus/ \\
|
|
--web.console.templates=/etc/prometheus/consoles \\
|
|
--web.console.libraries=/etc/prometheus/console_libraries
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
# Start Prometheus and enable it to run on startup
|
|
systemctl daemon-reload
|
|
systemctl start prometheus
|
|
systemctl enable prometheus
|
|
|
|
# Clean up the downloaded tar to save space
|
|
cd ..
|
|
rm -rf prometheus*.tar.gz prometheus-*.linux-amd64
|
|
prometheus --version
|
|
check_status "Failed to install Prometheus" "Prometheus installed successfully." $?
|
|
else
|
|
echo "Prometheus is already installed."
|
|
fi
|
|
}
|
|
|
|
# Install Grafana using a downloaded .deb package
|
|
deploy_grafana() {
|
|
LATEST_VERSION=$(curl --retry 10 --retry-delay 5 --retry-max-time 120 -s https://api.github.com/repos/grafana/grafana/releases/latest | grep '"tag_name"' | sed -E 's/.*"v([^"]+)".*/\1/')
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
deploy_debian_grafana "$LATEST_VERSION"
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
deploy_redhat_grafana "$LATEST_VERSION"
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Install Grafana for ubuntu/debian
|
|
deploy_debian_grafana() {
|
|
# Check if Grafana is already installed
|
|
if ! dpkg -s "grafana" &> /dev/null; then
|
|
echo "Downloading the latest Grafana .deb package..."
|
|
# Download the latest Grafana .deb package
|
|
grafana_latest_version=$1
|
|
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_${grafana_latest_version}_amd64.deb -O grafana.deb
|
|
# install the required fontconfig package
|
|
install_package adduser libfontconfig1 musl
|
|
echo "Installing Grafana..."
|
|
# Install the .deb package
|
|
dpkg -i grafana.deb
|
|
|
|
# Clean up the downloaded .deb package to save space
|
|
rm -rf grafana.deb
|
|
|
|
# Start the Grafana server and enable it to run on startup
|
|
systemctl start grafana-server
|
|
systemctl enable grafana-server
|
|
|
|
# Check if Grafana was installed successfully
|
|
if [ $? -eq 0 ]; then
|
|
echo "Grafana was installed successfully."
|
|
else
|
|
echo "Failed to install Grafana."
|
|
fi
|
|
else
|
|
echo "Grafana is already installed."
|
|
fi
|
|
}
|
|
|
|
# Install Grafana for centos/redhat
|
|
deploy_redhat_grafana() {
|
|
# Check if Grafana is already installed
|
|
if ! rpm -q grafana &> /dev/null; then
|
|
echo "Downloading the latest Grafana .rpm package..."
|
|
# Download the latest Grafana .rpm package
|
|
grafana_latest_version=$1
|
|
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-${grafana_latest_version}-1.x86_64.rpm -O grafana.rpm
|
|
|
|
# Install the required fontconfig package
|
|
yum install -y fontconfig
|
|
|
|
echo "Installing Grafana..."
|
|
# Install the .rpm package
|
|
rpm -ivh grafana.rpm
|
|
|
|
# Clean up the downloaded .rpm package to save space
|
|
rm -rf grafana.rpm
|
|
|
|
# Start the Grafana server and enable it to run on startup
|
|
systemctl start grafana-server
|
|
systemctl enable grafana-server
|
|
|
|
# Check if Grafana was installed successfully
|
|
if [ $? -eq 0 ]; then
|
|
echo "Grafana was installed successfully."
|
|
else
|
|
echo "Failed to install Grafana."
|
|
fi
|
|
else
|
|
echo "Grafana is already installed."
|
|
fi
|
|
}
|
|
|
|
# Install Nginx
|
|
install_nginx() {
|
|
install_package "nginx"
|
|
nginx -v
|
|
check_status "Failed to install Nginx" "Nginx installed successfully." $?
|
|
}
|
|
|
|
# Deploy JMeter
|
|
deploy_jmeter() {
|
|
if ! command -v jmeter &> /dev/null; then
|
|
echo "Installing JMeter..."
|
|
install_java
|
|
wget -P /opt https://mirrors.aliyun.com/apache/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
|
|
tar -xvzf /opt/apache-jmeter-$JMETER_VERSION.tgz -C /opt/
|
|
ln -sf /opt/apache-jmeter-$JMETER_VERSION/bin/jmeter /usr/local/bin/jmeter
|
|
rm -rf /opt/apache-jmeter-$JMETER_VERSION.tgz
|
|
jmeter --version
|
|
check_status "Failed to install JMeter" "JMeter installed successfully." $?
|
|
else
|
|
echo "JMeter is already installed."
|
|
fi
|
|
}
|
|
|
|
# Deploy Docker
|
|
deploy_docker() {
|
|
if [ -f /etc/debian_version ]; then
|
|
# Debian or Ubuntu
|
|
deploy_debian_docker
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
deploy_redhat_docker
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Deploy Docker for centos/redhat
|
|
deploy_redhat_docker() {
|
|
# Check if Docker is already installed
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Docker is not installed. Installing now..."
|
|
|
|
# Set up the repository for Docker
|
|
echo "Setting up the Docker repository..."
|
|
install_package yum-utils
|
|
|
|
echo "Adding Docker's official repository..."
|
|
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
|
|
|
# Install Docker CE
|
|
echo "Installing Docker CE..."
|
|
install_package docker-ce docker-ce-cli containerd.io
|
|
|
|
# Enable and start Docker
|
|
echo "Enabling and starting Docker..."
|
|
systemctl enable docker
|
|
systemctl start docker
|
|
|
|
# Adding current user to the Docker group
|
|
usermod -aG docker "$USER"
|
|
|
|
# Print Docker version
|
|
docker --version
|
|
|
|
# Check the installation status
|
|
if [ $? -eq 0 ]; then
|
|
echo "Docker installed successfully."
|
|
else
|
|
echo "Failed to install Docker."
|
|
fi
|
|
else
|
|
echo "Docker is already installed."
|
|
fi
|
|
}
|
|
|
|
# Deploy docker for ubuntu/debian
|
|
deploy_debian_docker() {
|
|
# Check if Docker is already installed
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Docker is not installed. Installing now..."
|
|
|
|
# Set up the repository for Docker
|
|
echo "Setting up the Docker repository..."
|
|
update
|
|
install_package apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
|
|
|
|
echo "Adding Docker's official GPG key from Aliyun..."
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | {
|
|
if [ -f /usr/share/keyrings/docker-archive-keyring.gpg ]; then
|
|
rm /usr/share/keyrings/docker-archive-keyring.gpg
|
|
fi
|
|
gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
|
}
|
|
echo "Setting up stable repository using Aliyun..."
|
|
echo \
|
|
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
|
|
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
|
|
# Install Docker CE
|
|
echo "Installing Docker CE..."
|
|
update
|
|
install_package docker-ce docker-ce-cli containerd.io
|
|
|
|
# Enable and start Docker
|
|
echo "Enabling and starting Docker..."
|
|
systemctl enable docker
|
|
systemctl start docker
|
|
|
|
# Adding current user to the Docker group
|
|
usermod -aG docker "$USER"
|
|
|
|
# Print Docker version
|
|
docker --version
|
|
check_status "Failed to install Docker" "Docker installed successfully." $?
|
|
else
|
|
echo "Docker is already installed."
|
|
fi
|
|
}
|
|
|
|
# Deploy Docker Compose
|
|
deploy_docker_compose() {
|
|
# Check if Docker Compose is installed
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
echo "Docker Compose is not installed. Installing now..."
|
|
|
|
# Install Docker Compose
|
|
curl --retry 10 --retry-delay 5 --retry-max-time 120 -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
chmod +x /usr/local/bin/docker-compose
|
|
|
|
# Print Docker Compose version
|
|
docker-compose --version
|
|
check_status "Failed to install Docker Compose" "Docker Compose installed successfully." $?
|
|
else
|
|
echo "Docker Compose is already installed."
|
|
fi
|
|
}
|
|
|
|
# Instal trivy
|
|
install_trivy() {
|
|
echo -e "${YELLOW}Installing Trivy...${NO_COLOR}"
|
|
# Check if Trivy is already installed
|
|
# if command -v trivy >/dev/null 2>&1; then
|
|
# echo "Trivy is already installed. Skipping installation."
|
|
# trivy --version
|
|
# return
|
|
# fi
|
|
if check_installed "trivy"; then
|
|
return
|
|
fi
|
|
# Install jq
|
|
install_package jq
|
|
# Get latest version
|
|
LATEST_VERSION=$(curl -s https://api.github.com/repos/aquasecurity/trivy/releases/latest | jq -r .tag_name)
|
|
# Download
|
|
if [ -f /etc/debian_version ]; then
|
|
wget https://github.com/aquasecurity/trivy/releases/download/"${LATEST_VERSION}"/trivy_"${LATEST_VERSION#v}"_Linux-64bit.deb
|
|
# Install
|
|
dpkg -i trivy_"${LATEST_VERSION#v}"_Linux-64bit.deb
|
|
|
|
elif [ -f /etc/redhat-release ]; then
|
|
wget https://github.com/aquasecurity/trivy/releases/download/"${LATEST_VERSION}"/trivy_"${LATEST_VERSION#v}"_Linux-64bit.rpm
|
|
# Install
|
|
rpm -ivh trivy_"${LATEST_VERSION#v}"_Linux-64bit.rpm
|
|
else
|
|
echo "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
# Check
|
|
trivy --version
|
|
check_status "Failed to install Trivy" "Trivy installed successfully." $?
|
|
rm -rf trivy_"${LATEST_VERSION#v}"_Linux-64bit.deb trivy_"${LATEST_VERSION#v}"_Linux-64bit.rpm
|
|
}
|
|
|
|
# Reconfigure cloud-init
|
|
reconfig_cloud_init() {
|
|
echo "Reconfiguring cloud-init..."
|
|
apt remove -y cloud-init && apt purge -y cloud-init
|
|
rm -rf /var/lib/cloud /etc/cloud
|
|
apt update -y
|
|
install_package cloud-init
|
|
sed -i '/package[-_]update[-_]upgrade[-_]install/s/^/#/' /etc/cloud/cloud.cfg
|
|
}
|
|
|
|
# Config cloud-init
|
|
config_cloud_init() {
|
|
if [ "$DIST_VERSION" = "7.9" ];then
|
|
install_package "cloud-init"
|
|
sed -i '/ssh_pwauth.*/s/^/#/' /etc/cloud/cloud.cfg
|
|
else
|
|
reconfig_cloud_init
|
|
fi
|
|
check_status "Failed to configure cloud-init" "Cloud-init configured successfully and you need reboot manually." $?
|
|
# if [ "$DIST_VERSION" = "18.04" ] || [ "$DIST_VERSION" = "20.04" ]; then
|
|
# reconfig_cloud_init
|
|
# elif [ "$DIST_VERSION" = "7.9" ];then
|
|
# install_package "cloud-init"
|
|
# sed -i '/ssh_pwauth.*/s/^/#/' /etc/cloud/cloud.cfg
|
|
# else
|
|
# echo "Configuring cloud-init..."
|
|
# add_config_if_not_exist "$CLOUD_INIT_CONFIG" "/etc/cloud/cloud.cfg"
|
|
|
|
# marker="NoCloud"
|
|
|
|
# if grep -qF "$marker" "/etc/cloud/cloud.cfg"; then
|
|
# echo "cloud-init settings already exists in /etc/cloud/cloud.cfg."
|
|
# else
|
|
# echo "Adding configuration to /etc/cloud/cloud.cfg."
|
|
# echo "$CLOUD_INIT_CONFIG" >> "/etc/cloud/cloud.cfg"
|
|
# echo "cloud-init settings have been updated in /etc/cloud/cloud.cfg."
|
|
# fi
|
|
|
|
# mkdir -p /var/lib/cloud/seed/nocloud/
|
|
# cd /var/lib/cloud/seed/nocloud/ || exit
|
|
# touch meta-data
|
|
# touch user-data
|
|
# add_config_if_not_exist "hostname: \${name}" user-data
|
|
# add_config_if_not_exist "manage_etc_hosts: true" user-data
|
|
# fi
|
|
# cloud-init clean --logs
|
|
}
|
|
|
|
cleanup() {
|
|
if [ -n "$SOURCE_RESULTS" ]; then
|
|
echo -e "${YELLOW}===========================================\n${NO_COLOR}"
|
|
echo -e "${YELLOW}Installation complete! \n${NO_COLOR}"
|
|
echo -e "${YELLOW}Some tools require you to manually source${NO_COLOR}"
|
|
echo -e "${YELLOW}or restart your terminal to take effect.\n${NO_COLOR}"
|
|
echo -e "${YELLOW}===========================================\n${NO_COLOR}"
|
|
echo -e "${YELLOW}$SOURCE_RESULTS${NO_COLOR}"
|
|
else
|
|
echo -e "${YELLOW}Installation complete \n${NO_COLOR}"
|
|
fi
|
|
}
|
|
|
|
# Clone a repository with a specified target directory
|
|
clone_repo_with_rename() {
|
|
local repo_url="$1"
|
|
local target_dir="$2"
|
|
local branch_name="$3"
|
|
|
|
if [ -z "$target_dir" ]; then
|
|
target_dir=$(basename -s .git "$repo_url")
|
|
fi
|
|
|
|
cd "$REPOPATH" || exit
|
|
|
|
if [ -d "$target_dir" ]; then
|
|
echo "Directory $target_dir already exists. Skipping clone."
|
|
else
|
|
echo "Cloning into $target_dir..."
|
|
if [ -n "$branch_name" ]; then
|
|
git clone -b "$branch_name" "$repo_url" "$target_dir"
|
|
else
|
|
git clone "$repo_url" "$target_dir"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Clone enterprise repository
|
|
clone_enterprise() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/TDinternal
|
|
clone_repo_with_rename git@github.com:taosdata/TDengine.git TDinternal/community
|
|
}
|
|
|
|
# Clone community repository
|
|
clone_community() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com:taosdata/TDengine.git
|
|
}
|
|
|
|
# Clone TaosX repository
|
|
clone_taosx() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/taosx
|
|
}
|
|
|
|
# Clone TaosKeeper repository
|
|
clone_taoskeeper() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/taoskeeper
|
|
}
|
|
|
|
# Clone TaosTest repository
|
|
clone_taostest() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/taos-test-framework "" "master"
|
|
}
|
|
|
|
# Clone TestNG repository
|
|
clone_testng() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/TestNG "" "master"
|
|
}
|
|
|
|
# Clone operation tools repository
|
|
clone_operation() {
|
|
cd "$REPOPATH" || exit
|
|
clone_repo_with_rename https://github.com/taosdata/operation.git
|
|
}
|
|
|
|
# init system
|
|
system_config() {
|
|
disable_service
|
|
config_dns
|
|
replace_sources
|
|
config_cloud_init
|
|
config_ssh
|
|
config_custom_settings
|
|
config_timezone
|
|
config_share_server
|
|
disable_firewalld
|
|
config_frontend
|
|
config_system_limits
|
|
config_coredump
|
|
check_status "Failed to config system" "Config system successfully" $?
|
|
}
|
|
|
|
# Clone all the repositories
|
|
clone_repos() {
|
|
clone_enterprise
|
|
clone_community
|
|
clone_taosx
|
|
clone_taoskeeper
|
|
clone_taostest
|
|
clone_operation
|
|
}
|
|
|
|
new_funcs() {
|
|
echo "Adding test..."
|
|
install_python_via_pyenv 3.10.12
|
|
install_java_via_sdkman 21.0.2
|
|
install_node 16.20.2
|
|
install_maven_via_sdkman 3.2.5
|
|
deploy_rust
|
|
}
|
|
|
|
# deploy TDasset
|
|
TDasset() {
|
|
install_java_via_sdkman 21.0.2
|
|
install_maven_via_sdkman 3.9.9
|
|
# not supported in centos7/ubuntu18 because of the old version of glibc
|
|
install_node_via_nvm 22.0.0
|
|
install_pnpm
|
|
}
|
|
|
|
# deploy TDinternal/TDengine/taosx
|
|
TDinternal() {
|
|
install_go_via_gvm 1.23.3
|
|
deploy_rust
|
|
install_java_via_sdkman 17
|
|
install_maven_via_sdkman 3.9.9
|
|
install_node_via_nvm 16.20.2
|
|
install_python_via_pyenv 3.10.12
|
|
install_via_pip pandas psutil fabric2 requests faker simplejson toml pexpect tzlocal distro decorator loguru hyperloglog toml taospy taos-ws-py
|
|
}
|
|
|
|
# deploy TDgpt
|
|
TDgpt() {
|
|
install_python_via_pyenv 3.10.12
|
|
}
|
|
|
|
# deploy taos-test-framework
|
|
taostest() {
|
|
if [ ! -d "$REPOPATH/taos-test-framework" ]; then
|
|
echo "Cloning TaosTest repository..."
|
|
clone_taostest
|
|
else
|
|
echo "TaosTest repository already exists. Skipping clone."
|
|
fi
|
|
check_status "Failed to clone TaosTest repository" "TaosTest repository cloned successfully." $?
|
|
|
|
if [ ! -d "$REPOPATH/TestNG" ]; then
|
|
echo "Cloning TestNG repository..."
|
|
clone_testng
|
|
else
|
|
echo "TestNG repository already exists. Skipping clone."
|
|
fi
|
|
check_status "Failed to clone TestNG repository" "TestNG repository cloned successfully." $?
|
|
|
|
# Configure environment variables
|
|
echo "Configuring TaosTest environment variables..."
|
|
mkdir -p "$HOME"/.taostest
|
|
add_config_if_not_exist "TEST_ROOT=$REPOPATH/TestNG" "$HOME"/.taostest/.env
|
|
|
|
# Install TaosTest
|
|
echo "Installing TaosTest..."
|
|
cd "$REPOPATH"/taos-test-framework || exit
|
|
install_package "python3-pip"
|
|
install_via_pip "poetry"
|
|
yes | ./reinstall.sh
|
|
check_status "Failed to install TaosTest" "TaosTest installed successfully." $?
|
|
|
|
# Configure passwdless login
|
|
echo "Configuring passwdless login..."
|
|
yes | ssh-keygen -t rsa -b 2048 -N "" -f "$HOME/.ssh/testng"
|
|
cat "$HOME"/.ssh/testng.pub >> "$HOME"/.ssh/authorized_keys
|
|
}
|
|
|
|
|
|
# Deploy pure environment
|
|
deploy_pure() {
|
|
disable_service
|
|
config_dns
|
|
if [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
echo "Replacing sources for YUM package manager."
|
|
replace_yum_sources
|
|
fi
|
|
config_cloud_init
|
|
config_ssh
|
|
config_custom_settings
|
|
config_timezone
|
|
config_share_server
|
|
disable_firewalld
|
|
install_package "jq"
|
|
install_package "wget"
|
|
deploy_node_exporter
|
|
check_status "Failed to config pure system" "Config pure system successfully" $?
|
|
}
|
|
|
|
# Deploy development environment
|
|
deploy_dev() {
|
|
install_packages
|
|
deploy_cmake
|
|
if [ -f /etc/redhat-release ]; then
|
|
# Red Hat or CentOS
|
|
update_redhat_gcc
|
|
fi
|
|
deploy_tmux
|
|
deploy_git
|
|
install_python
|
|
install_pip_pkg
|
|
install_java
|
|
install_maven_via_sdkman
|
|
deploy_go
|
|
deploy_rust
|
|
install_node
|
|
deploy_node_exporter
|
|
deploy_process_exporter
|
|
deploy_prometheus
|
|
deploy_grafana
|
|
deploy_jmeter
|
|
install_nginx
|
|
deploy_docker
|
|
deploy_docker_compose
|
|
install_trivy
|
|
check_status "Failed to deploy some tools" "Deploy all tools successfully" $?
|
|
}
|
|
|
|
# Setup all configurations
|
|
setup_all() {
|
|
system_config
|
|
deploy_dev
|
|
}
|
|
|
|
# More installation functions can be added here following the above examples
|
|
|
|
# Main execution function
|
|
main() {
|
|
# Check if at least one argument is provided
|
|
if [ $# -eq 0 ]; then
|
|
echo "Error: No arguments provided."
|
|
echo "Please try $0 --help"
|
|
exit 1
|
|
fi
|
|
init_env
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--help)
|
|
help
|
|
exit 0
|
|
;;
|
|
setup_all)
|
|
setup_all
|
|
;;
|
|
config_ssh)
|
|
config_ssh
|
|
;;
|
|
disable_firewalld)
|
|
disable_firewalld
|
|
;;
|
|
config_cloud_init)
|
|
config_cloud_init
|
|
;;
|
|
deploy_git)
|
|
deploy_git
|
|
;;
|
|
replace_sources)
|
|
replace_sources
|
|
;;
|
|
update)
|
|
update
|
|
;;
|
|
upgrade)
|
|
upgrade
|
|
;;
|
|
config_timezone)
|
|
config_timezone
|
|
;;
|
|
config_dns)
|
|
config_dns
|
|
;;
|
|
config_custom_settings)
|
|
config_custom_settings
|
|
;;
|
|
install_packages)
|
|
install_packages
|
|
;;
|
|
config_system_limits)
|
|
config_system_limits
|
|
;;
|
|
config_coredump)
|
|
config_coredump
|
|
;;
|
|
disable_service)
|
|
disable_service
|
|
;;
|
|
install_python)
|
|
install_python
|
|
;;
|
|
install_pyenv)
|
|
install_pyenv
|
|
;;
|
|
install_python_via_pyenv)
|
|
install_python_via_pyenv
|
|
;;
|
|
install_pip_pkg)
|
|
install_pip_pkg
|
|
;;
|
|
install_java)
|
|
install_java
|
|
;;
|
|
install_java_via_sdkman)
|
|
install_java_via_sdkman
|
|
;;
|
|
install_maven_via_sdkman)
|
|
install_maven_via_sdkman
|
|
;;
|
|
deploy_cmake)
|
|
deploy_cmake
|
|
;;
|
|
update_redhat_gcc)
|
|
update_redhat_gcc
|
|
;;
|
|
update_redhat_tmux)
|
|
update_redhat_tmux
|
|
;;
|
|
deploy_tmux)
|
|
deploy_tmux
|
|
;;
|
|
deploy_go)
|
|
deploy_go
|
|
;;
|
|
install_gvm)
|
|
install_gvm
|
|
;;
|
|
install_go_via_gvm)
|
|
install_go_via_gvm
|
|
;;
|
|
deploy_rust)
|
|
deploy_rust
|
|
;;
|
|
install_node)
|
|
install_node
|
|
;;
|
|
install_node_via_nvm)
|
|
install_node_via_nvm
|
|
;;
|
|
install_pnpm)
|
|
install_pnpm
|
|
;;
|
|
deploy_node_exporter)
|
|
deploy_node_exporter
|
|
;;
|
|
deploy_process_exporter)
|
|
deploy_process_exporter
|
|
;;
|
|
deploy_prometheus)
|
|
deploy_prometheus
|
|
;;
|
|
deploy_grafana)
|
|
deploy_grafana
|
|
;;
|
|
deploy_jmeter)
|
|
deploy_jmeter
|
|
;;
|
|
install_nginx)
|
|
install_nginx
|
|
;;
|
|
config_qemu_guest_agent)
|
|
config_qemu_guest_agent
|
|
;;
|
|
config_share_server)
|
|
config_share_server
|
|
;;
|
|
deploy_docker)
|
|
deploy_docker
|
|
;;
|
|
deploy_docker_compose)
|
|
deploy_docker_compose
|
|
;;
|
|
install_trivy)
|
|
install_trivy
|
|
;;
|
|
clone_enterprise)
|
|
clone_enterprise
|
|
;;
|
|
clone_community)
|
|
clone_community
|
|
;;
|
|
clone_taosx)
|
|
clone_taosx
|
|
;;
|
|
clone_taoskeeper)
|
|
clone_taoskeeper
|
|
;;
|
|
clone_taostest)
|
|
clone_taostest
|
|
;;
|
|
clone_operation)
|
|
clone_operation
|
|
;;
|
|
system_config)
|
|
system_config
|
|
;;
|
|
deploy_pure)
|
|
deploy_pure
|
|
;;
|
|
deploy_dev)
|
|
deploy_dev
|
|
;;
|
|
TDasset)
|
|
TDasset
|
|
;;
|
|
TDinternal)
|
|
TDinternal
|
|
;;
|
|
TDgpt)
|
|
TDgpt
|
|
;;
|
|
taostest)
|
|
taostest
|
|
;;
|
|
new_funcs)
|
|
new_funcs
|
|
;;
|
|
*)
|
|
echo "Unknown function: $arg"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Execute the script with specified function arguments
|
|
main "$@"
|