mirror of
https://github.com/oneclickvirt/ecs.git
synced 2025-10-01 05:32:18 +08:00
496 lines
23 KiB
Bash
496 lines
23 KiB
Bash
#!/bin/bash
|
||
#From https://github.com/oneclickvirt/ecs
|
||
#2024.07.21
|
||
|
||
# curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh
|
||
|
||
cat <<"EOF"
|
||
GGGGGGGG OOOOOOO EEEEEEEE CCCCCCCCC SSSSSSSSSS
|
||
GG GG OO OO EE CC SS
|
||
GG OO OO EE CC SS
|
||
GG OO OO EE CC SS
|
||
GG OO OO EEEEEEEE CC SSSSSSSSSS
|
||
GG GGGGGG OO OO EE CC SS
|
||
GG GG OO OO EE CC SS
|
||
GG GG OO OO EE CC SS
|
||
GGGGGGGG OOOOOOO EEEEEEEE CCCCCCCCC SSSSSSSSSS
|
||
EOF
|
||
|
||
cd /root >/dev/null 2>&1
|
||
if [ ! -d "/usr/bin/" ]; then
|
||
mkdir -p "/usr/bin/"
|
||
fi
|
||
_red() { echo -e "\033[31m\033[01m$@\033[0m"; }
|
||
_green() { echo -e "\033[32m\033[01m$@\033[0m"; }
|
||
_yellow() { echo -e "\033[33m\033[01m$@\033[0m"; }
|
||
_blue() { echo -e "\033[36m\033[01m$@\033[0m"; }
|
||
|
||
check_cdn() {
|
||
local o_url=$1
|
||
for cdn_url in "${cdn_urls[@]}"; do
|
||
if curl -sL -k "$cdn_url$o_url" --max-time 6 | grep -q "success" >/dev/null 2>&1; then
|
||
export cdn_success_url="$cdn_url"
|
||
return
|
||
fi
|
||
sleep 0.5
|
||
done
|
||
export cdn_success_url=""
|
||
}
|
||
|
||
check_cdn_file() {
|
||
check_cdn "https://raw.githubusercontent.com/spiritLHLS/ecs/main/back/test"
|
||
if [ -n "$cdn_success_url" ]; then
|
||
_green "CDN available, using CDN"
|
||
else
|
||
_yellow "No CDN available, no use CDN"
|
||
fi
|
||
}
|
||
|
||
download_file() {
|
||
local url="$1"
|
||
local output="$2"
|
||
if ! wget -O "$output" "$url"; then
|
||
_yellow "wget failed, trying curl..."
|
||
if ! curl -L -o "$output" "$url"; then
|
||
_red "Both wget and curl failed. Unable to download the file."
|
||
return 1
|
||
fi
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
goecs_check() {
|
||
os=$(uname -s)
|
||
arch=$(uname -m)
|
||
ECS_VERSION=$(curl -m 6 -sSL "https://api.github.com/repos/oneclickvirt/ecs/releases/latest" | awk -F \" '/tag_name/{gsub(/^v/,"",$4); print $4}')
|
||
# 如果 https://api.github.com/ 请求失败,则使用 https://githubapi.spiritlhl.workers.dev/ ,此时可能宿主机无IPV4网络
|
||
if [ -z "$ECS_VERSION" ]; then
|
||
ECS_VERSION=$(curl -m 6 -sSL "https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" | awk -F \" '/tag_name/{gsub(/^v/,"",$4); print $4}')
|
||
fi
|
||
# 如果 https://githubapi.spiritlhl.workers.dev/ 请求失败,则使用 https://githubapi.spiritlhl.top/ ,此时可能宿主机在国内
|
||
if [ -z "$ECS_VERSION" ]; then
|
||
ECS_VERSION=$(curl -m 6 -sSL "https://githubapi.spiritlhl.top/repos/oneclickvirt/ecs/releases/latest" | awk -F \" '/tag_name/{gsub(/^v/,"",$4); print $4}')
|
||
fi
|
||
# 检测原始goecs命令是否存在,若存在则升级,不存在则安装
|
||
version_output=$(goecs -v command 2>/dev/null || ./goecs -v command 2>/dev/null)
|
||
if [ $? -eq 0 ]; then
|
||
extracted_version=${version_output//v/}
|
||
if [ -n "$extracted_version" ]; then
|
||
ecs_version=$ECS_VERSION
|
||
if [[ "$(echo -e "$extracted_version\n$ecs_version" | sort -V | tail -n 1)" == "$extracted_version" ]]; then
|
||
_green "goecs version ($extracted_version) is latest, no need to upgrade."
|
||
return
|
||
else
|
||
_yellow "goecs version ($extracted_version) < $ecs_version, need to upgrade, 5 seconds later will start to upgrade"
|
||
rm -rf /usr/bin/goecs
|
||
rm -rf goecs
|
||
fi
|
||
fi
|
||
else
|
||
_green "Can not find goecs, need to download and install, 5 seconds later will start to install"
|
||
fi
|
||
sleep 5
|
||
cdn_urls=("https://cdn0.spiritlhl.top/" "http://cdn3.spiritlhl.net/" "http://cdn1.spiritlhl.net/" "http://cdn2.spiritlhl.net/")
|
||
check_cdn_file
|
||
case $os in
|
||
Linux)
|
||
case $arch in
|
||
"x86_64" | "x86" | "amd64" | "x64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_amd64.zip" "goecs.zip"
|
||
;;
|
||
"i386" | "i686")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_386.zip" "goecs.zip"
|
||
;;
|
||
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_arm64.zip" "goecs.zip"
|
||
;;
|
||
"mips")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_mips.zip" "goecs.zip"
|
||
;;
|
||
"mipsle")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_mipsle.zip" "goecs.zip"
|
||
;;
|
||
"s390x")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_s390x.zip" "goecs.zip"
|
||
;;
|
||
"riscv64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_linux_riscv64.zip" "goecs.zip"
|
||
;;
|
||
*)
|
||
_red "Unsupported architecture: $arch , please check https://github.com/oneclickvirt/ecs/releases to download the zip for yourself and unzip it to use the binary for testing."
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
FreeBSD)
|
||
case $arch in
|
||
"x86_64" | "x86" | "amd64" | "x64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_freebsd_amd64.zip" "goecs.zip"
|
||
;;
|
||
"i386" | "i686")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_freebsd_386.zip" "goecs.zip"
|
||
;;
|
||
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_freebsd_arm64.zip" "goecs.zip"
|
||
;;
|
||
*)
|
||
_red "Unsupported architecture: $arch , please check https://github.com/oneclickvirt/ecs/releases to download the zip for yourself and unzip it to use the binary for testing."
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
Darwin)
|
||
case $arch in
|
||
"x86_64" | "x86" | "amd64" | "x64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_amd64.zip" "goecs.zip"
|
||
;;
|
||
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
|
||
download_file "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/v${ECS_VERSION}/goecs_arm64.zip" "goecs.zip"
|
||
;;
|
||
*)
|
||
_red "Unsupported architecture: $arch , please check https://github.com/oneclickvirt/ecs/releases to download the zip for yourself and unzip it to use the binary for testing."
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
*)
|
||
_red "Unsupported operating system: $os , please check https://github.com/oneclickvirt/ecs/releases to download the zip for yourself and unzip it to use the binary for testing."
|
||
exit 1
|
||
;;
|
||
esac
|
||
unzip goecs.zip
|
||
rm -rf goecs.zip
|
||
rm -rf README.md
|
||
rm -rf LICENSE
|
||
sleep 1
|
||
chmod 777 goecs
|
||
rm -rf /usr/bin/goecs
|
||
sleep 1
|
||
cp goecs /usr/bin/goecs
|
||
rm -rf README_EN.md
|
||
rm -rf README.md
|
||
PARAM="net.ipv4.ping_group_range"
|
||
NEW_VALUE="0 2147483647"
|
||
CURRENT_VALUE=$(sysctl -n "$PARAM" 2>/dev/null)
|
||
if [ -f /etc/sysctl.conf ] && [ "$CURRENT_VALUE" != "$NEW_VALUE" ]; then
|
||
if grep -q "^$PARAM" /etc/sysctl.conf; then
|
||
sudo sed -i "s/^$PARAM.*/$PARAM = $NEW_VALUE/" /etc/sysctl.conf
|
||
else
|
||
echo "$PARAM = $NEW_VALUE" | sudo tee -a /etc/sysctl.conf
|
||
fi
|
||
sudo sysctl -p
|
||
fi
|
||
setcap cap_net_raw=+ep goecs
|
||
setcap cap_net_raw=+ep /usr/bin/goecs
|
||
echo "goecs version:"
|
||
goecs -v || ./goecs -v
|
||
}
|
||
|
||
InstallSysbench() {
|
||
if [ -f "/etc/centos-release" ]; then # CentOS
|
||
Var_OSRelease="centos"
|
||
elif [ -f "/etc/fedora-release" ]; then # Fedora
|
||
Var_OSRelease="fedora"
|
||
elif [ -f "/etc/redhat-release" ]; then # RedHat
|
||
Var_OSRelease="rhel"
|
||
elif [ -f "/etc/astra_version" ]; then # Astra
|
||
Var_OSRelease="astra"
|
||
elif [ -f "/etc/lsb-release" ]; then # Ubuntu
|
||
Var_OSRelease="ubuntu"
|
||
elif [ -f "/etc/debian_version" ]; then # Debian
|
||
Var_OSRelease="debian"
|
||
elif [ -f "/etc/alpine-release" ]; then # Alpine Linux
|
||
Var_OSRelease="alpinelinux"
|
||
elif [ -f "/etc/almalinux-release" ]; then # almalinux
|
||
Var_OSRelease="almalinux"
|
||
# rockylinux
|
||
elif [ -f "/etc/arch-release" ]; then # archlinux
|
||
Var_OSRelease="arch"
|
||
elif [ -f "/etc/freebsd-update.conf" ]; then # freebsd
|
||
Var_OSRelease="freebsd"
|
||
else
|
||
Var_OSRelease="unknown" # 未知系统分支
|
||
fi
|
||
case "$Var_OSRelease" in
|
||
ubuntu | debian | astra) ! apt-get install -y sysbench && apt-get --fix-broken install -y && apt-get install --no-install-recommends -y sysbench ;;
|
||
centos | rhel | almalinux | redhat) (yum -y install epel-release && yum -y install sysbench) || (dnf install epel-release -y && dnf install sysbench -y) ;;
|
||
fedora) dnf -y install sysbench ;;
|
||
arch) pacman -S --needed --noconfirm sysbench && pacman -S --needed --noconfirm libaio && ldconfig ;;
|
||
freebsd) pkg install -y sysbench ;;
|
||
alpinelinux) echo -e "${Msg_Warning}Sysbench Module not found, installing ..." && echo -e "${Msg_Warning}SysBench Current not support Alpine Linux, Skipping..." && Var_Skip_SysBench="1" ;;
|
||
*) _red "Sysbench Install Error: Unknown OS release: $os_release" ;;
|
||
esac
|
||
}
|
||
|
||
Check_SysBench() {
|
||
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
||
InstallSysbench
|
||
fi
|
||
# 尝试编译安装
|
||
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
||
echo -e "${Msg_Warning}Sysbench Module install Failure, trying compile modules ..."
|
||
Check_Sysbench_InstantBuild
|
||
fi
|
||
source ~/.bashrc
|
||
# 最终检测
|
||
if [ "$(command -v sysbench)" ] || [ -f "/usr/bin/sysbench" ] || [ -f "/usr/local/bin/sysbench" ]; then
|
||
_yellow "Install sysbench successfully!"
|
||
else
|
||
_red "SysBench Moudle install Failure! Try Restart Bench or Manually install it! (/usr/bin/sysbench)"
|
||
_blue "Will try to test with geekbench5 instead later."
|
||
fi
|
||
sleep 3
|
||
}
|
||
|
||
Check_Sysbench_InstantBuild() {
|
||
if [ "${Var_OSRelease}" = "centos" ] || [ "${Var_OSRelease}" = "rhel" ] || [ "${Var_OSRelease}" = "almalinux" ] || [ "${Var_OSRelease}" = "ubuntu" ] || [ "${Var_OSRelease}" = "debian" ] || [ "${Var_OSRelease}" = "fedora" ] || [ "${Var_OSRelease}" = "arch" ] || [ "${Var_OSRelease}" = "astra" ]; then
|
||
local os_sysbench=${Var_OSRelease}
|
||
if [ "$os_sysbench" = "astra" ]; then
|
||
os_sysbench="debian"
|
||
fi
|
||
echo -e "${Msg_Info}Release Detected: ${os_sysbench}"
|
||
echo -e "${Msg_Info}Preparing compile enviorment ..."
|
||
prepare_compile_env "${os_sysbench}"
|
||
echo -e "${Msg_Info}Downloading Source code (Version 1.0.20)..."
|
||
mkdir -p /tmp/sysbench_install/src/
|
||
mv /tmp/sysbench-1.0.20 /tmp/sysbench_install/src/
|
||
echo -e "${Msg_Info}Compiling Sysbench Module ..."
|
||
cd /tmp/sysbench_install/src/sysbench-1.0.20
|
||
./autogen.sh && ./configure --without-mysql && make -j8 && make install
|
||
echo -e "${Msg_Info}Cleaning up ..."
|
||
cd /tmp && rm -rf /tmp/sysbench_install/src/sysbench*
|
||
else
|
||
echo -e "${Msg_Warning}Unsupported operating system: ${Var_OSRelease}"
|
||
fi
|
||
}
|
||
|
||
prepare_compile_env() {
|
||
local system="$1"
|
||
if [ "${system}" = "centos" ] || [ "${system}" = "rhel" ] || [ "${system}" = "almalinux" ]; then
|
||
yum install -y epel-release
|
||
yum install -y wget curl make gcc gcc-c++ make automake libtool pkgconfig libaio-devel
|
||
elif [ "${system}" = "ubuntu" ] || [ "${system}" = "debian" ]; then
|
||
! apt-get update && apt-get --fix-broken install -y && apt-get update
|
||
! apt-get -y install --no-install-recommends curl wget make automake libtool pkg-config libaio-dev unzip && apt-get --fix-broken install -y && apt-get -y install --no-install-recommends curl wget make automake libtool pkg-config libaio-dev unzip
|
||
elif [ "${system}" = "fedora" ]; then
|
||
dnf install -y wget curl gcc gcc-c++ make automake libtool pkgconfig libaio-devel
|
||
elif [ "${system}" = "arch" ]; then
|
||
pacman -S --needed --noconfirm wget curl gcc gcc make automake libtool pkgconfig libaio lib32-libaio
|
||
else
|
||
echo -e "${Msg_Warning}Unsupported operating system: ${system}"
|
||
fi
|
||
}
|
||
|
||
env_check() {
|
||
REGEX=("debian|astra" "ubuntu" "centos|red hat|kernel|oracle linux|alma|rocky" "'amazon linux'" "fedora" "arch" "freebsd" "alpine" "openbsd")
|
||
RELEASE=("Debian" "Ubuntu" "CentOS" "CentOS" "Fedora" "Arch" "FreeBSD" "Alpine" "OpenBSD")
|
||
PACKAGE_UPDATE=("apt-get update" "apt-get update" "yum -y update" "yum -y update" "yum -y update" "pacman -Sy" "pkg update" "apk update" "pkg_add -u")
|
||
PACKAGE_INSTALL=("apt-get -y install" "apt-get -y install" "yum -y install" "yum -y install" "yum -y install" "pacman -Sy --noconfirm --needed" "pkg install -y" "apk add")
|
||
PACKAGE_REMOVE=("apt-get -y remove" "apt-get -y remove" "yum -y remove" "yum -y remove" "yum -y remove" "pacman -Rsc --noconfirm" "pkg delete" "apk del")
|
||
PACKAGE_UNINSTALL=("apt-get -y autoremove" "apt-get -y autoremove" "yum -y autoremove" "yum -y autoremove" "yum -y autoremove" "" "pkg autoremove" "apk autoremove")
|
||
# 检查系统信息
|
||
if [ -f /etc/alpine-release ]; then
|
||
SYS="alpine"
|
||
elif [ -s /etc/os-release ]; then
|
||
SYS="$(grep -i pretty_name /etc/os-release | cut -d \" -f2)"
|
||
elif [ -x "$(type -p hostnamectl)" ]; then
|
||
SYS="$(hostnamectl | grep -i system | cut -d : -f2 | xargs)"
|
||
elif [ -x "$(type -p lsb_release)" ]; then
|
||
SYS="$(lsb_release -sd)"
|
||
elif [ -s /etc/lsb-release ]; then
|
||
SYS="$(grep -i description /etc/lsb-release | cut -d \" -f2)"
|
||
elif [ -s /etc/redhat-release ]; then
|
||
SYS="$(grep . /etc/redhat-release)"
|
||
elif [ -s /etc/issue ]; then
|
||
SYS="$(grep . /etc/issue | cut -d '\' -f1 | sed '/^[ ]*$/d')"
|
||
else
|
||
SYS="$(uname -s)"
|
||
fi
|
||
[[ -n $SYS ]] || exit 1
|
||
# 匹配操作系统
|
||
for ((int = 0; int < ${#REGEX[@]}; int++)); do
|
||
if [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[int]} ]]; then
|
||
SYSTEM="${RELEASE[int]}"
|
||
[[ -n $SYSTEM ]] && break
|
||
fi
|
||
done
|
||
# 检查是否成功匹配
|
||
[[ -n $SYSTEM ]] || exit 1
|
||
# 根据 SYSTEM 设置相应的包管理命令
|
||
UPDATE_CMD=${PACKAGE_UPDATE[int]}
|
||
INSTALL_CMD=${PACKAGE_INSTALL[int]}
|
||
REMOVE_CMD=${PACKAGE_REMOVE[int]}
|
||
UNINSTALL_CMD=${PACKAGE_UNINSTALL[int]}
|
||
echo "System: $SYSTEM"
|
||
echo "Update command: $UPDATE_CMD"
|
||
echo "Install command: $INSTALL_CMD"
|
||
echo "Remove command: $REMOVE_CMD"
|
||
echo "Uninstall command: $UNINSTALL_CMD"
|
||
cdn_urls=("https://cdn0.spiritlhl.top/" "http://cdn3.spiritlhl.net/" "http://cdn1.spiritlhl.net/" "http://cdn2.spiritlhl.net/")
|
||
check_cdn_file
|
||
_green "Update system manager."
|
||
${PACKAGE_UPDATE[int]} 2>/dev/null
|
||
if ! command -v sudo >/dev/null 2>&1; then
|
||
_green "Installing sudo"
|
||
${PACKAGE_INSTALL[int]} sudo
|
||
fi
|
||
if ! command -v wget >/dev/null 2>&1; then
|
||
_green "Installing wget"
|
||
${PACKAGE_INSTALL[int]} wget
|
||
fi
|
||
if ! command -v tar >/dev/null 2>&1; then
|
||
_green "Installing tar"
|
||
${PACKAGE_INSTALL[int]} tar
|
||
fi
|
||
if ! command -v unzip >/dev/null 2>&1; then
|
||
_green "Installing unzip"
|
||
${PACKAGE_INSTALL[int]} unzip
|
||
fi
|
||
if ! command -v systemd-detect-virt >/dev/null 2>&1; then
|
||
_green "Installing systemd-detect-virt"
|
||
${PACKAGE_INSTALL[int]} systemd-detect-virt
|
||
if [ $? -ne 0 ]; then
|
||
if ! command -v dmidecode >/dev/null 2>&1; then
|
||
_green "Installing dmidecode"
|
||
${PACKAGE_INSTALL[int]} dmidecode
|
||
fi
|
||
fi
|
||
fi
|
||
if ! command -v dd >/dev/null 2>&1; then
|
||
_green "Installing dd"
|
||
${PACKAGE_INSTALL[int]} coreutils
|
||
if [ $? -ne 0 ]; then
|
||
${PACKAGE_INSTALL[int]} man
|
||
fi
|
||
fi
|
||
if ! command -v fio >/dev/null 2>&1; then
|
||
_green "Installing fio"
|
||
${PACKAGE_INSTALL[int]} fio
|
||
fi
|
||
if ! command -v sysbench >/dev/null 2>&1 && [ "${REGEX[int]}" != "freebsd" ]; then
|
||
_green "Installing sysbench"
|
||
${PACKAGE_INSTALL[int]} sysbench
|
||
if [ $? -ne 0 ]; then
|
||
echo "Unable to download sysbench through the system's package manager, speak to try compiling and installing it..."
|
||
if ! wget -O /tmp/sysbench.zip "${cdn_success_url}https://github.com/akopytov/sysbench/archive/1.0.20.zip"; then
|
||
echo "wget failed, trying with curl"
|
||
curl -Lk -o /tmp/sysbench.zip "${cdn_success_url}https://github.com/akopytov/sysbench/archive/1.0.20.zip"
|
||
fi
|
||
if [ ! -f /tmp/sysbench.zip ]; then
|
||
wget -q -O /tmp/sysbench.zip "https://hub.fgit.cf/akopytov/sysbench/archive/1.0.20.zip"
|
||
fi
|
||
chmod +x /tmp/sysbench.zip
|
||
unzip /tmp/sysbench.zip -d /tmp
|
||
Check_SysBench
|
||
fi
|
||
fi
|
||
if ! command -v geekbench >/dev/null 2>&1; then
|
||
_green "Installing geekbench"
|
||
curl -L "${cdn_success_url}https://raw.githubusercontent.com/oneclickvirt/cputest/main/dgb.sh" -o dgb.sh && chmod +x dgb.sh
|
||
bash dgb.sh -v gb5
|
||
_blue "If you not want to use geekbench5, you can use"
|
||
echo "bash dgb.sh -v gb6"
|
||
echo "bash dgb.sh -v gb4"
|
||
_blue "to change version, or use"
|
||
echo "rm -rf /usr/bin/geekbench*"
|
||
_blue "to uninstall geekbench"
|
||
rm -rf dgb.sh
|
||
fi
|
||
if ! command -v speedtest >/dev/null 2>&1; then
|
||
_green "Installing geekbench"
|
||
curl -L "${cdn_success_url}https://raw.githubusercontent.com/oneclickvirt/speedtest/main/dspt.sh" -o dspt.sh && chmod +x dspt.sh
|
||
bash dspt.sh
|
||
rm -rf dspt.sh
|
||
rm -rf speedtest.tar.gz
|
||
_blue "if you want to use golang origin speedtest, you can use"
|
||
echo "rm -rf /usr/bin/speedtest"
|
||
echo "rm -rf /usr/bin/speedtest-go"
|
||
_blue "to uninstall speedtest and speedtest-go"
|
||
fi
|
||
if ! command -v ping >/dev/null 2>&1; then
|
||
_green "Installing ping"
|
||
${PACKAGE_INSTALL[int]} iputils-ping >/dev/null 2>&1
|
||
${PACKAGE_INSTALL[int]} ping >/dev/null 2>&1
|
||
fi
|
||
if [ "$(uname -s)" = "Darwin" ]; then
|
||
echo "Detected MacOS. Installing sysbench and fio..."
|
||
brew install --force sysbench fio dd
|
||
# 有问题,需要修复,root环境不能brew,brew安装完毕后可能路径不在环境变量中
|
||
else
|
||
if ! grep -q "^net.ipv4.ping_group_range = 0 2147483647$" /etc/sysctl.conf; then
|
||
echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.conf
|
||
sysctl -p
|
||
fi
|
||
fi
|
||
_green "The environment is ready."
|
||
_green "The next command is: ./goecs.sh install"
|
||
}
|
||
|
||
uninstall_goecs() {
|
||
rm -rf /root/goecs
|
||
rm -rf /usr/bin/goecs
|
||
_green "The command (goecs) has been uninstalled."
|
||
}
|
||
|
||
show_help() {
|
||
cat <<"EOF"
|
||
可用命令:
|
||
|
||
./goecs.sh env 检查并安装的包:
|
||
sudo (几乎所有类 Unix 系统都有。)
|
||
tar (几乎所有类 Unix 系统都有。)
|
||
unzip (几乎所有类 Unix 系统都有。)
|
||
dd (几乎所有类 Unix 系统都有。)
|
||
fio (几乎所有类 Unix 系统可以通过系统的包管理器安装。)
|
||
sysbench (几乎所有类 Unix 系统可以通过系统的包管理器安装。)
|
||
geekbench (geekbench5) (仅支持 IPV4 环境,且内存大于 1GB 并需要持续联网,仅支持 amd64 和 arm64 架构。)
|
||
speedtest (使用官方提供的二进制文件以获得更准确的测试结果。)
|
||
ping (使用官方提供的二进制文件以获得更准确的测试结果。)
|
||
systemd-detect-virt 或 dmidecode (几乎所有类 Unix 系统都有,安装以获得更准确的测试结果。)
|
||
事实上,sysbench/geekbench 是上述依赖项中唯一必须安装的,没有它们无法测试 CPU 分数。
|
||
./goecs.sh install 安装 goecs 命令
|
||
./goecs.sh upgrade 升级 goecs 命令
|
||
./goecs.sh uninstall 卸载 goecs 命令
|
||
./goecs.sh help 显示此消息
|
||
|
||
Available commands:
|
||
|
||
./goecs.sh env Check and Install package:
|
||
sudo (Almost all unix-like systems have it.)
|
||
tar (Almost all unix-like systems have it.)
|
||
unzip (Almost all unix-like systems have it.)
|
||
dd (Almost all unix-like systems have it.)
|
||
fio (Almost all unix-like systems can be installed through the system's package manager.)
|
||
sysbench (Almost all unix-like systems can be installed through the system's package manager.)
|
||
geekbench (geekbench5)(Only support IPV4 environment, and memory greater than 1GB network detection, only support amd64 and arm64 architecture.)
|
||
speedtest (Use the officially provided binaries for more accurate test results.)
|
||
ping (Use the officially provided binaries for more accurate test results.)
|
||
systemd-detect-virt OR dmidecode (Almost all unix-like systems have it, for more accurate test results.)
|
||
In fact, sysbench/geekbench is the only one of the above dependencies that must be installed, without which the CPU score cannot be tested.
|
||
./goecs.sh install Install goecs command
|
||
./goecs.sh upgrade Upgrade goecs command
|
||
./goecs.sh uninstall Uninstall goecs command
|
||
./goecs.sh help Show this message
|
||
EOF
|
||
}
|
||
|
||
case "$1" in
|
||
"help")
|
||
show_help
|
||
;;
|
||
"env")
|
||
env_check
|
||
;;
|
||
"install" | "upgrade")
|
||
goecs_check
|
||
;;
|
||
"uninstall")
|
||
uninstall_goecs
|
||
;;
|
||
*)
|
||
echo "No command found."
|
||
echo
|
||
show_help
|
||
;;
|
||
esac
|