Files
download/public.sh
耗子 758e1c8799
All checks were successful
Generate Checksums / checksums (push) Successful in 46s
feat: 清理提交
2026-01-31 07:03:45 +08:00

193 lines
5.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH
export LC_ALL=C
export HR="+----------------------------------------------------"
export ARCH=$(uname -m)
# alinux Alibaba Cloud Linux
# hce Huawei Cloud EulerOS
# openEuler openEuler
export OS=$(source /etc/os-release && {
if [[ "$ID" == "ubuntu" ]]; then
echo "ubuntu"
elif [[ "$ID" == "debian" ]]; then
echo "debian"
elif [[ "$ID" == "rhel" ]] || [[ "$ID" == "almalinux" ]] || [[ "$ID" == "rocky" ]] || [[ "$ID" == "alinux" ]] || [[ "$ID" == "tencentos" ]] || [[ "$ID" == "opencloudos" ]]; then
echo "rhel"
elif [[ "$ID_LIKE" =~ "ubuntu" ]]; then
echo "ubuntu"
elif [[ "$ID_LIKE" =~ "debian" ]]; then
echo "debian"
elif [[ "$ID_LIKE" =~ "rhel" ]]; then
echo "rhel"
else
echo "unknown"
fi
})
export VERSION=$(source /etc/os-release && {
if [[ -n "$VERSION_ID" ]]; then
echo "$VERSION_ID" | cut -d'.' -f1
elif [[ -n "$VERSION" ]]; then
echo "$VERSION" | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 | cut -d'.' -f1
else
echo "0"
fi
})
export CORES=$(nproc)
export MEM=$(LC_ALL=C free -m | grep Mem | awk '{print $2}')
export SWAP=$(LC_ALL=C free -m | grep Swap | awk '{print $2}')
export download_endpoint="https://dl.acepanel.net"
export setup_path="/opt/ace"
# 从配置文件中读取 setup_path
if [ -f /opt/ace/panel/storage/config.yml ]; then
download_endpoint="https://$(grep download_endpoint /opt/ace/panel/storage/config.yml | awk '{gsub(/["'\'']/, "", $2); print $2}')"
setup_path=$(grep root /opt/ace/panel/storage/config.yml | awk '{gsub(/["'\'']/, "", $2); print $2}')
fi
# 计算 j 值(通用)
calculate_j() {
total=$((MEM + SWAP))
j_value=$((total / 1024))
[ "$j_value" -eq 0 ] && j_value=1
[ "$j_value" -gt "$CORES" ] && j_value=$CORES
[ "$j_value" -gt 1 ] && j_value=$((j_value - 1)) # 大于1则减1
echo "$j_value"
}
# 计算 j 值2倍内存
calculate_j2() {
total=$((MEM + SWAP))
j_value=$((total / 2024))
[ "$j_value" -eq 0 ] && j_value=1
[ "$j_value" -gt "$CORES" ] && j_value=$CORES
[ "$j_value" -gt 1 ] && j_value=$((j_value - 1)) # 大于1则减1
echo "$j_value"
}
# 系统信息
sys_info() {
dir=$(pwd)
cd /tmp || cd /
if [ -f /etc/os-release ]; then
system_version=$(grep PRETTY_NAME /etc/os-release | awk -F '"' '{print $2}')
else
system_version="unknown"
fi
kernel_version=$(uname -a)
bitness=$(getconf LONG_BIT)-bit
cpu_name=$(lscpu | grep "^Model name:" | awk -F: '{print $2}' | sed 's/^[ \t]*//')
cpu_flags=$(lscpu | grep "^Flags:" | awk -F: '{print $2}' | sed 's/^[ \t]*//' | sed 's/ /,/g')
if command -v gcc >/dev/null 2>&1; then
gcc_version=$(gcc -v 2>&1 | tail -n1 | awk '{print $3}')
else
gcc_version="no gcc"
fi
if command -v cmake >/dev/null 2>&1; then
cmake_version=$(cmake --version | head -n1 | awk '{print $3}')
else
cmake_version="no cmake"
fi
echo -e $HR
echo -e "| Kernel: $kernel_version"
echo -e "| CPU: $cpu_name | Arch: $ARCH | Core: $CORES"
echo -e "| OS: $system_version | Bit: $bitness | Mem: $MEM | Swap: $SWAP | gcc: $gcc_version | cmake: $cmake_version"
echo -e $HR
[ -d "$dir" ] && cd "$dir"
}
# 下载及校验
# 参数1本地保存目录
# 参数2服务器文件路径
# 参数3本地保存文件名可选默认从 URL 中获取)
dl() {
local current="$(pwd)"
local save_dir="$1"
local url="${download_endpoint}$2"
local url_no_q="${url%%\?*}"
local filename="${3:-$(basename "$url_no_q")}"
[[ -z "$save_dir" || -z "$url" ]] && { error "dl function parameter error"; }
mkdir -p "$save_dir"
# 检测可用的下载工具
local downloader=""
if command -v aria2c >/dev/null 2>&1; then
downloader="aria2"
elif command -v wget >/dev/null 2>&1; then
downloader="wget"
elif command -v curl >/dev/null 2>&1; then
downloader="curl"
else
error "No download tool found. Please install aria2, wget or curl."
fi
case "$downloader" in
aria2)
local aria2_opts=(
-c
--file-allocation=falloc
--allow-overwrite=true
--auto-file-renaming=false
--console-log-level=notice
--summary-interval=2
--retry-wait=5
--max-tries=5
-x 16
-s 16
-k 1M
)
aria2c "${aria2_opts[@]}" \
-d "$save_dir" \
-o "$filename" \
"$url" || { error "Failed to download ${url}"; }
aria2c "${aria2_opts[@]}" \
-d "$save_dir" \
-o "${filename}.sha256" \
"${url}.sha256" || { error "Failed to download ${url}.sha256"; }
;;
wget)
wget -c -t 5 -T 30 -O "${save_dir}/${filename}" "$url" || { error "Failed to download ${url}"; }
wget -c -t 5 -T 30 -O "${save_dir}/${filename}.sha256" "${url}.sha256" || { error "Failed to download ${url}.sha256"; }
;;
curl)
curl -L -C - --retry 5 --retry-delay 5 -o "${save_dir}/${filename}" "$url" || { error "Failed to download ${url}"; }
curl -L -C - --retry 5 --retry-delay 5 -o "${save_dir}/${filename}.sha256" "${url}.sha256" || { error "Failed to download ${url}.sha256"; }
;;
esac
cd "$save_dir"
sha256sum --status -c "${filename}.sha256" || {
rm -f "${filename}" "${filename}.sha256"
cd "$current"
error "Failed to verify ${save_dir}/${filename}"
}
rm -f "${filename}.sha256"
cd "$current"
}
# 错误输出
error() {
echo -e $HR
echo -e "| Error: $1"
echo -e "| 可截图错误信息寻求帮助,或者联系面板官方支持。"
echo -e "| Take a screenshot of the error message for help, or contact the panel official support."
sys_info
exit 1
}