From 1b931ab72cbde8314ca6f618da38953e33d24426 Mon Sep 17 00:00:00 2001 From: 3344 Date: Sat, 24 Jan 2026 23:33:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20install.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 254 ++++++++++++++++------------------------------------- 1 file changed, 76 insertions(+), 178 deletions(-) diff --git a/install.sh b/install.sh index 37a9112..440f290 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,6 @@ #!/bin/bash -# HubProxy 一键安装脚本 -# 支持自动下载最新版本或使用本地文件安装 +# HubProxy 一键安装脚本 (Gitea 私人仓库版) set -e # 颜色定义 @@ -9,205 +8,104 @@ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' -NC='\033[0m' # No Color +NC='\033[0m' -# 配置 -REPO="sky22333/hubproxy" -GITHUB_API="https://api.github.com/repos/${REPO}" -GITHUB_RELEASES="${GITHUB_API}/releases" +# 配置信息 +VERSION="v1.2.1" SERVICE_NAME="hubproxy" -INSTALL_DIR="/opt/hubproxy" -CONFIG_FILE="config.toml" +# 按照你的习惯,安装在 /opt,如果你想完全放在 /vol1 下也可以修改此处 +INSTALL_DIR="/opt/hubproxy" BINARY_NAME="hubproxy" -LOG_DIR="/var/log/hubproxy" TEMP_DIR="/tmp/hubproxy-install" -echo -e "${BLUE}HubProxy 一键安装脚本${NC}" +echo -e "${BLUE}HubProxy 一键安装脚本 - 来自 Gitea 私人仓库${NC}" echo "=================================================" -# 检查是否以root权限运行 +# 1. 权限检查 if [[ $EUID -ne 0 ]]; then - echo -e "${RED}此脚本需要root权限运行${NC}" - echo "请使用: sudo $0" + echo -e "${RED}此脚本需要 root 权限运行${NC}" exit 1 fi -# 检测系统架构 -detect_arch() { - local arch=$(uname -m) - case $arch in - x86_64) - echo "amd64" - ;; - aarch64|arm64) - echo "arm64" - ;; - *) - echo -e "${RED}不支持的架构: $arch${NC}" - exit 1 - ;; - 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}" +# 2. 检测系统架构并匹配你的 Gitea 链接 +arch=$(uname -m) +case $arch in + x86_64) + ARCH="amd64" + DOWNLOAD_URL="https://git.vps3344521.xyz/3344/hubproxy/releases/download/v1.2.1/hubproxy-v1.2.1-linux-amd64.tar.gz" + ;; + aarch64|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 + ;; +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 +done - VERSION=$(echo "$LATEST_RELEASE" | jq -r '.tag_name') - if [ "$VERSION" = "null" ]; then - echo -e "${RED}无法解析版本信息${NC}" - exit 1 - fi +# 4. 执行下载 +rm -rf "${TEMP_DIR}" && mkdir -p "${TEMP_DIR}" +cd "${TEMP_DIR}" - echo -e "${GREEN}最新版本: ${VERSION}${NC}" +echo -e "${YELLOW}正在下载: ${DOWNLOAD_URL}${NC}" +curl -L -o "hubproxy.tar.gz" "${DOWNLOAD_URL}" - # 构造下载URL - ASSET_NAME="hubproxy-${VERSION}-linux-${ARCH}.tar.gz" - DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${ASSET_NAME}" +# 5. 解压 (根据你提供的包结构,通常解压后是一个目录或直接是二进制文件) +tar -xzf "hubproxy.tar.gz" +# 进入解压出的目录(如果压缩包里有 hubproxy 文件夹的话) +[ -d "hubproxy" ] && cd hubproxy - echo -e "${BLUE}下载: ${ASSET_NAME}${NC}" - - # 创建临时目录并下载 - 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}" +# 6. 配置服务环境 +echo -e "${BLUE}配置安装目录: ${INSTALL_DIR}${NC}" +mkdir -p "${INSTALL_DIR}" cp "${BINARY_NAME}" "${INSTALL_DIR}/" chmod +x "${INSTALL_DIR}/${BINARY_NAME}" -# 3. 复制配置文件 -echo -e "${BLUE}复制配置文件${NC}" -if [ -f "${CONFIG_FILE}" ]; then - if [ "$CONFIG_BACKUP_EXISTS" = false ]; then - cp "${CONFIG_FILE}" "${INSTALL_DIR}/" - echo -e "${GREEN}配置文件复制成功${NC}" - else - echo -e "${YELLOW}保留现有配置文件${NC}" +# 如果有默认配置文件也一并复制 +if [ -f "config.toml" ]; then + if [ ! -f "${INSTALL_DIR}/config.toml" ]; then + cp "config.toml" "${INSTALL_DIR}/" fi -else - echo -e "${YELLOW}配置文件不存在,将使用默认配置${NC}" fi -# 5. 安装systemd服务文件 -echo -e "${BLUE}安装systemd服务文件${NC}" -cp "${SERVICE_NAME}.service" "/etc/systemd/system/" +# 7. 写入 Systemd 服务 +echo -e "${BLUE}正在创建 Systemd 服务...${NC}" +cat < /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 - -# 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 start ${SERVICE_NAME} +systemctl restart ${SERVICE_NAME} -# 8. 清理临时文件 -if [ "$LOCAL_INSTALL" = false ]; then - echo -e "${BLUE}清理临时文件...${NC}" - cd / - rm -rf "${TEMP_DIR}" -fi - -# 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 +# 9. 清理并完成 +rm -rf "${TEMP_DIR}" +echo "-------------------------------------------------" +echo -e "${GREEN}HubProxy 安装成功!${NC}" +echo -e "安装路径: ${INSTALL_DIR}" +echo -e "服务状态: ${BLUE}systemctl status ${SERVICE_NAME}${NC}" \ No newline at end of file