更新 install.sh
This commit is contained in:
254
install.sh
254
install.sh
@@ -1,7 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# HubProxy 一键安装脚本
|
# HubProxy 一键安装脚本 (Gitea 私人仓库版)
|
||||||
# 支持自动下载最新版本或使用本地文件安装
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 颜色定义
|
# 颜色定义
|
||||||
@@ -9,205 +8,104 @@ RED='\033[0;31m'
|
|||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m'
|
||||||
|
|
||||||
# 配置
|
# 配置信息
|
||||||
REPO="sky22333/hubproxy"
|
VERSION="v1.2.1"
|
||||||
GITHUB_API="https://api.github.com/repos/${REPO}"
|
|
||||||
GITHUB_RELEASES="${GITHUB_API}/releases"
|
|
||||||
SERVICE_NAME="hubproxy"
|
SERVICE_NAME="hubproxy"
|
||||||
INSTALL_DIR="/opt/hubproxy"
|
# 按照你的习惯,安装在 /opt,如果你想完全放在 /vol1 下也可以修改此处
|
||||||
CONFIG_FILE="config.toml"
|
INSTALL_DIR="/opt/hubproxy"
|
||||||
BINARY_NAME="hubproxy"
|
BINARY_NAME="hubproxy"
|
||||||
LOG_DIR="/var/log/hubproxy"
|
|
||||||
TEMP_DIR="/tmp/hubproxy-install"
|
TEMP_DIR="/tmp/hubproxy-install"
|
||||||
|
|
||||||
echo -e "${BLUE}HubProxy 一键安装脚本${NC}"
|
echo -e "${BLUE}HubProxy 一键安装脚本 - 来自 Gitea 私人仓库${NC}"
|
||||||
echo "================================================="
|
echo "================================================="
|
||||||
|
|
||||||
# 检查是否以root权限运行
|
# 1. 权限检查
|
||||||
if [[ $EUID -ne 0 ]]; then
|
if [[ $EUID -ne 0 ]]; then
|
||||||
echo -e "${RED}此脚本需要root权限运行${NC}"
|
echo -e "${RED}此脚本需要 root 权限运行${NC}"
|
||||||
echo "请使用: sudo $0"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 检测系统架构
|
# 2. 检测系统架构并匹配你的 Gitea 链接
|
||||||
detect_arch() {
|
arch=$(uname -m)
|
||||||
local arch=$(uname -m)
|
case $arch in
|
||||||
case $arch in
|
x86_64)
|
||||||
x86_64)
|
ARCH="amd64"
|
||||||
echo "amd64"
|
DOWNLOAD_URL="https://git.vps3344521.xyz/3344/hubproxy/releases/download/v1.2.1/hubproxy-v1.2.1-linux-amd64.tar.gz"
|
||||||
;;
|
;;
|
||||||
aarch64|arm64)
|
aarch64|arm64)
|
||||||
echo "arm64"
|
ARCH="arm64"
|
||||||
;;
|
DOWNLOAD_URL="https://git.vps3344521.xyz/3344/hubproxy/releases/download/v1.2.1/hubproxy-v1.2.1-linux-arm64.tar.gz"
|
||||||
*)
|
;;
|
||||||
echo -e "${RED}不支持的架构: $arch${NC}"
|
*)
|
||||||
exit 1
|
echo -e "${RED}不支持的架构: $arch${NC}"
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
ARCH=$(detect_arch)
|
|
||||||
echo -e "${BLUE}检测到架构: linux-${ARCH}${NC}"
|
|
||||||
|
|
||||||
# 检查是否为本地安装模式
|
|
||||||
if [ -f "${BINARY_NAME}" ]; then
|
|
||||||
echo -e "${BLUE}发现本地文件,使用本地安装模式${NC}"
|
|
||||||
LOCAL_INSTALL=true
|
|
||||||
else
|
|
||||||
echo -e "${BLUE}本地无文件,使用自动下载模式${NC}"
|
|
||||||
LOCAL_INSTALL=false
|
|
||||||
|
|
||||||
# 检查依赖
|
|
||||||
missing_deps=()
|
|
||||||
for cmd in curl jq tar; do
|
|
||||||
if ! command -v $cmd &> /dev/null; then
|
|
||||||
missing_deps+=($cmd)
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ ${#missing_deps[@]} -gt 0 ]; then
|
|
||||||
echo -e "${YELLOW}检测到缺少依赖: ${missing_deps[*]}${NC}"
|
|
||||||
echo -e "${BLUE}正在自动安装依赖...${NC}"
|
|
||||||
|
|
||||||
apt update && apt install -y curl jq
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "${RED}依赖安装失败${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 重新检查依赖
|
|
||||||
for cmd in curl jq tar; do
|
|
||||||
if ! command -v $cmd &> /dev/null; then
|
|
||||||
echo -e "${RED}依赖安装后仍缺少: $cmd${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -e "${GREEN}依赖安装成功${NC}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 自动下载功能
|
|
||||||
if [ "$LOCAL_INSTALL" = false ]; then
|
|
||||||
echo -e "${BLUE}获取最新版本信息...${NC}"
|
|
||||||
LATEST_RELEASE=$(curl -s "${GITHUB_RELEASES}/latest")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "${RED}无法获取版本信息${NC}"
|
|
||||||
exit 1
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo -e "${BLUE}检测到架构: ${ARCH}${NC}"
|
||||||
|
echo -e "${BLUE}准备从 Gitea 下载...${NC}"
|
||||||
|
|
||||||
|
# 3. 安装必要工具
|
||||||
|
for cmd in curl tar; do
|
||||||
|
if ! command -v $cmd &> /dev/null; then
|
||||||
|
echo -e "${YELLOW}正在安装依赖 $cmd...${NC}"
|
||||||
|
apt update && apt install -y $cmd
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
VERSION=$(echo "$LATEST_RELEASE" | jq -r '.tag_name')
|
# 4. 执行下载
|
||||||
if [ "$VERSION" = "null" ]; then
|
rm -rf "${TEMP_DIR}" && mkdir -p "${TEMP_DIR}"
|
||||||
echo -e "${RED}无法解析版本信息${NC}"
|
cd "${TEMP_DIR}"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}最新版本: ${VERSION}${NC}"
|
echo -e "${YELLOW}正在下载: ${DOWNLOAD_URL}${NC}"
|
||||||
|
curl -L -o "hubproxy.tar.gz" "${DOWNLOAD_URL}"
|
||||||
|
|
||||||
# 构造下载URL
|
# 5. 解压 (根据你提供的包结构,通常解压后是一个目录或直接是二进制文件)
|
||||||
ASSET_NAME="hubproxy-${VERSION}-linux-${ARCH}.tar.gz"
|
tar -xzf "hubproxy.tar.gz"
|
||||||
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${ASSET_NAME}"
|
# 进入解压出的目录(如果压缩包里有 hubproxy 文件夹的话)
|
||||||
|
[ -d "hubproxy" ] && cd hubproxy
|
||||||
|
|
||||||
echo -e "${BLUE}下载: ${ASSET_NAME}${NC}"
|
# 6. 配置服务环境
|
||||||
|
echo -e "${BLUE}配置安装目录: ${INSTALL_DIR}${NC}"
|
||||||
# 创建临时目录并下载
|
mkdir -p "${INSTALL_DIR}"
|
||||||
rm -rf "${TEMP_DIR}"
|
|
||||||
mkdir -p "${TEMP_DIR}"
|
|
||||||
cd "${TEMP_DIR}"
|
|
||||||
|
|
||||||
curl -L -o "${ASSET_NAME}" "${DOWNLOAD_URL}"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "${RED}下载失败${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 解压
|
|
||||||
tar -xzf "${ASSET_NAME}"
|
|
||||||
if [ $? -ne 0 ] || [ ! -d "hubproxy" ]; then
|
|
||||||
echo -e "${RED}解压失败${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd hubproxy
|
|
||||||
echo -e "${GREEN}下载完成${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${YELLOW}开始安装 HubProxy...${NC}"
|
|
||||||
|
|
||||||
# 停止现有服务(如果存在)
|
|
||||||
if systemctl is-active --quiet ${SERVICE_NAME} 2>/dev/null; then
|
|
||||||
echo -e "${YELLOW}停止现有服务...${NC}"
|
|
||||||
systemctl stop ${SERVICE_NAME}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 备份现有配置(如果存在)
|
|
||||||
CONFIG_BACKUP_EXISTS=false
|
|
||||||
if [ -f "${INSTALL_DIR}/${CONFIG_FILE}" ]; then
|
|
||||||
echo -e "${BLUE}备份现有配置...${NC}"
|
|
||||||
cp "${INSTALL_DIR}/${CONFIG_FILE}" "${TEMP_DIR}/config.toml.backup"
|
|
||||||
CONFIG_BACKUP_EXISTS=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. 创建目录结构
|
|
||||||
echo -e "${BLUE}创建目录结构${NC}"
|
|
||||||
mkdir -p ${INSTALL_DIR}
|
|
||||||
mkdir -p ${LOG_DIR}
|
|
||||||
chmod 755 ${INSTALL_DIR}
|
|
||||||
chmod 755 ${LOG_DIR}
|
|
||||||
|
|
||||||
# 2. 复制二进制文件
|
|
||||||
echo -e "${BLUE}复制二进制文件${NC}"
|
|
||||||
cp "${BINARY_NAME}" "${INSTALL_DIR}/"
|
cp "${BINARY_NAME}" "${INSTALL_DIR}/"
|
||||||
chmod +x "${INSTALL_DIR}/${BINARY_NAME}"
|
chmod +x "${INSTALL_DIR}/${BINARY_NAME}"
|
||||||
|
|
||||||
# 3. 复制配置文件
|
# 如果有默认配置文件也一并复制
|
||||||
echo -e "${BLUE}复制配置文件${NC}"
|
if [ -f "config.toml" ]; then
|
||||||
if [ -f "${CONFIG_FILE}" ]; then
|
if [ ! -f "${INSTALL_DIR}/config.toml" ]; then
|
||||||
if [ "$CONFIG_BACKUP_EXISTS" = false ]; then
|
cp "config.toml" "${INSTALL_DIR}/"
|
||||||
cp "${CONFIG_FILE}" "${INSTALL_DIR}/"
|
|
||||||
echo -e "${GREEN}配置文件复制成功${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}保留现有配置文件${NC}"
|
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
echo -e "${YELLOW}配置文件不存在,将使用默认配置${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 5. 安装systemd服务文件
|
# 7. 写入 Systemd 服务
|
||||||
echo -e "${BLUE}安装systemd服务文件${NC}"
|
echo -e "${BLUE}正在创建 Systemd 服务...${NC}"
|
||||||
cp "${SERVICE_NAME}.service" "/etc/systemd/system/"
|
cat <<EOF > /etc/systemd/system/${SERVICE_NAME}.service
|
||||||
|
[Unit]
|
||||||
|
Description=HubProxy Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=${INSTALL_DIR}
|
||||||
|
ExecStart=${INSTALL_DIR}/${BINARY_NAME}
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 8. 启动服务
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
# 6. 恢复配置文件(如果有备份)
|
|
||||||
if [ "$CONFIG_BACKUP_EXISTS" = true ]; then
|
|
||||||
echo -e "${BLUE}恢复配置文件...${NC}"
|
|
||||||
cp "${TEMP_DIR}/config.toml.backup" "${INSTALL_DIR}/${CONFIG_FILE}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 7. 启用并启动服务
|
|
||||||
echo -e "${BLUE}启用并启动服务${NC}"
|
|
||||||
systemctl enable ${SERVICE_NAME}
|
systemctl enable ${SERVICE_NAME}
|
||||||
systemctl start ${SERVICE_NAME}
|
systemctl restart ${SERVICE_NAME}
|
||||||
|
|
||||||
# 8. 清理临时文件
|
# 9. 清理并完成
|
||||||
if [ "$LOCAL_INSTALL" = false ]; then
|
rm -rf "${TEMP_DIR}"
|
||||||
echo -e "${BLUE}清理临时文件...${NC}"
|
echo "-------------------------------------------------"
|
||||||
cd /
|
echo -e "${GREEN}HubProxy 安装成功!${NC}"
|
||||||
rm -rf "${TEMP_DIR}"
|
echo -e "安装路径: ${INSTALL_DIR}"
|
||||||
fi
|
echo -e "服务状态: ${BLUE}systemctl status ${SERVICE_NAME}${NC}"
|
||||||
|
|
||||||
# 9. 检查服务状态
|
|
||||||
sleep 2
|
|
||||||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}HubProxy 安装成功!${NC}"
|
|
||||||
echo -e "${GREEN}默认运行端口: 5000${NC}"
|
|
||||||
echo -e "${GREEN}配置文件路径: ${INSTALL_DIR}/${CONFIG_FILE}${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}服务启动失败${NC}"
|
|
||||||
echo "查看错误日志: sudo journalctl -u ${SERVICE_NAME} -f"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
Reference in New Issue
Block a user