diff --git a/install.sh b/install.sh index dc947a8..1c4f7cc 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,42 @@ #!/bin/bash +# GOST 多实例管理脚本 +# 支持在同一台机器上运行多个 GOST 实例 +# +# 使用方法: +# 交互式安装: ./install.sh +# 命令行安装: ./install.sh -a "服务器地址" -s "密钥" +# +# 参数说明: +# -a: 服务器地址 +# -s: 密钥 +# # 下载地址 DOWNLOAD_URL="https://raw.githubusercontent.com/bqlpfy/forward-panel/refs/heads/main/go-gost/gost" -INSTALL_DIR="/etc/gost" + +# 获取实例名称 +get_instance_name() { + if [[ -z "$INSTANCE_NAME" ]]; then + echo "" + echo "🏷️ 实例名称配置..." + read -p "请输入实例名称 (留空使用默认名称 'gost'): " INSTANCE_NAME + if [[ -z "$INSTANCE_NAME" ]]; then + INSTANCE_NAME="gost" + fi + fi + + # 设置动态变量 + if [[ "$INSTANCE_NAME" == "gost" ]]; then + INSTALL_DIR="/etc/gost" + SERVICE_NAME="gost" + else + INSTALL_DIR="/etc/gost-${INSTANCE_NAME}" + SERVICE_NAME="gost-${INSTANCE_NAME}" + fi + + echo "✅ 实例名称: $INSTANCE_NAME" + echo "📁 安装目录: $INSTALL_DIR" + echo "🔧 服务名称: $SERVICE_NAME" +} # 显示菜单 show_menu() { @@ -12,7 +47,72 @@ show_menu() { echo "1. 安装" echo "2. 更新" echo "3. 卸载" - echo "4. 退出" + echo "4. 查看已有服务" + echo "5. 退出" + echo "===============================================" +} + +# 查看已有服务 +list_services() { + echo "🔍 查看已有的 GOST 服务..." + echo "" + + # 检查是否支持systemctl + if ! command -v systemctl &> /dev/null; then + echo "❌ 此功能需要 systemd 支持(Linux 系统)" + echo "💡 当前系统不支持 systemctl 命令" + return 0 + fi + + # 查找所有gost相关的服务 + GOST_SERVICES=$(systemctl list-units --all --no-pager | grep -E "gost.*\.service" | awk '{print $1}' || true) + + if [[ -z "$GOST_SERVICES" ]]; then + echo "❌ 未找到任何 GOST 服务" + return 0 + fi + + echo "📋 已安装的 GOST 服务:" + echo "===============================================" + + for service in $GOST_SERVICES; do + # 提取实例名称 + if [[ "$service" == "gost.service" ]]; then + instance_name="gost (默认)" + config_dir="/etc/gost" + else + instance_name=$(echo "$service" | sed 's/gost-//' | sed 's/\.service//') + config_dir="/etc/gost-${instance_name}" + fi + + # 获取服务状态 + status=$(systemctl is-active "$service" 2>/dev/null || echo "unknown") + enabled=$(systemctl is-enabled "$service" 2>/dev/null || echo "unknown") + + # 显示服务信息 + echo "🔧 服务名称: $service" + echo "🏷️ 实例名称: $instance_name" + echo "📁 配置目录: $config_dir" + echo "🟢 运行状态: $status" + echo "⚡ 开机启动: $enabled" + + # 显示配置信息(如果配置文件存在) + if [[ -f "$config_dir/config.json" ]]; then + server_addr=$(grep -o '"addr":[[:space:]]*"[^"]*"' "$config_dir/config.json" 2>/dev/null | cut -d'"' -f4 || echo "未知") + echo "🌐 服务器地址: $server_addr" + else + echo "🌐 服务器地址: 配置文件不存在" + fi + + echo "-----------------------------------------------" + done + + echo "" + echo "💡 服务管理命令:" + echo " 查看状态: systemctl status <服务名>" + echo " 启动服务: systemctl start <服务名>" + echo " 停止服务: systemctl stop <服务名>" + echo " 查看日志: journalctl -u <服务名> -f" echo "===============================================" } @@ -116,6 +216,7 @@ done # 安装功能 install_gost() { echo "🚀 开始安装 GOST..." + get_instance_name get_config_params # 询问是否有加速下载地址 @@ -134,10 +235,10 @@ install_gost() { mkdir -p "$INSTALL_DIR" # 停止并禁用已有服务 - if systemctl list-units --full -all | grep -Fq "gost.service"; then - echo "🔍 检测到已存在的gost服务" - systemctl stop gost 2>/dev/null && echo "🛑 停止服务" - systemctl disable gost 2>/dev/null && echo "🚫 禁用自启" + if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then + echo "🔍 检测到已存在的${SERVICE_NAME}服务" + systemctl stop ${SERVICE_NAME} 2>/dev/null && echo "🛑 停止服务" + systemctl disable ${SERVICE_NAME} 2>/dev/null && echo "🚫 禁用自启" fi # 删除旧文件 @@ -181,10 +282,10 @@ EOF chmod 600 "$INSTALL_DIR"/*.json # 创建 systemd 服务 - SERVICE_FILE="/etc/systemd/system/gost.service" + SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" cat > "$SERVICE_FILE" </dev/null - systemctl disable gost 2>/dev/null + systemctl stop ${SERVICE_NAME} 2>/dev/null + systemctl disable ${SERVICE_NAME} 2>/dev/null fi # 删除服务文件 - if [[ -f "/etc/systemd/system/gost.service" ]]; then - rm -f "/etc/systemd/system/gost.service" + if [[ -f "/etc/systemd/system/${SERVICE_NAME}.service" ]]; then + rm -f "/etc/systemd/system/${SERVICE_NAME}.service" echo "🧹 删除服务文件" fi @@ -309,7 +412,7 @@ main() { # 显示交互式菜单 while true; do show_menu - read -p "请输入选项 (1-4): " choice + read -p "请输入选项 (1-5): " choice case $choice in 1) @@ -325,11 +428,15 @@ main() { break ;; 4) + list_services + break + ;; + 5) echo "👋 退出脚本" exit 0 ;; *) - echo "❌ 无效选项,请输入 1-4" + echo "❌ 无效选项,请输入 1-5" echo "" ;; esac