优化agent安装脚本

This commit is contained in:
qaq
2025-07-18 12:06:36 +08:00
parent 6d7393337b
commit 1448f96fa5
+29 -136
View File
@@ -1,42 +1,7 @@
#!/bin/bash #!/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" 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() { show_menu() {
@@ -47,72 +12,7 @@ show_menu() {
echo "1. 安装" echo "1. 安装"
echo "2. 更新" echo "2. 更新"
echo "3. 卸载" 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 "===============================================" echo "==============================================="
} }
@@ -216,7 +116,6 @@ done
# 安装功能 # 安装功能
install_gost() { install_gost() {
echo "🚀 开始安装 GOST..." echo "🚀 开始安装 GOST..."
get_instance_name
get_config_params get_config_params
# 询问是否有加速下载地址 # 询问是否有加速下载地址
@@ -230,15 +129,15 @@ install_gost() {
echo "✅ 使用默认下载地址: $DOWNLOAD_URL" echo "✅ 使用默认下载地址: $DOWNLOAD_URL"
fi fi
# 检查并安装 tcpkill # 检查并安装 tcpkill
check_and_install_tcpkill check_and_install_tcpkill
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
# 停止并禁用已有服务 # 停止并禁用已有服务
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then if systemctl list-units --full -all | grep -Fq "gost.service"; then
echo "🔍 检测到已存在的${SERVICE_NAME}服务" echo "🔍 检测到已存在的gost服务"
systemctl stop ${SERVICE_NAME} 2>/dev/null && echo "🛑 停止服务" systemctl stop gost 2>/dev/null && echo "🛑 停止服务"
systemctl disable ${SERVICE_NAME} 2>/dev/null && echo "🚫 禁用自启" systemctl disable gost 2>/dev/null && echo "🚫 禁用自启"
fi fi
# 删除旧文件 # 删除旧文件
@@ -282,10 +181,10 @@ EOF
chmod 600 "$INSTALL_DIR"/*.json chmod 600 "$INSTALL_DIR"/*.json
# 创建 systemd 服务 # 创建 systemd 服务
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" SERVICE_FILE="/etc/systemd/system/gost.service"
cat > "$SERVICE_FILE" <<EOF cat > "$SERVICE_FILE" <<EOF
[Unit] [Unit]
Description=Gost Proxy Service ($INSTANCE_NAME) Description=Gost Proxy Service
After=network.target After=network.target
[Service] [Service]
@@ -299,28 +198,27 @@ EOF
# 启动服务 # 启动服务
systemctl daemon-reload systemctl daemon-reload
systemctl enable ${SERVICE_NAME} systemctl enable gost
systemctl start ${SERVICE_NAME} systemctl start gost
# 检查状态 # 检查状态
echo "🔄 检查服务状态..." echo "🔄 检查服务状态..."
if systemctl is-active --quiet ${SERVICE_NAME}; then if systemctl is-active --quiet gost; then
echo "✅ 安装完成,${SERVICE_NAME}服务已启动并设置为开机启动。" echo "✅ 安装完成,gost服务已启动并设置为开机启动。"
echo "📁 配置目录: $INSTALL_DIR" echo "📁 配置目录: $INSTALL_DIR"
echo "🔧 服务状态: $(systemctl is-active ${SERVICE_NAME})" echo "🔧 服务状态: $(systemctl is-active gost)"
else else
echo "❌ ${SERVICE_NAME}服务启动失败,请执行以下命令查看日志:" echo "❌ gost服务启动失败,请执行以下命令查看日志:"
echo "journalctl -u ${SERVICE_NAME} -f" echo "journalctl -u gost -f"
fi fi
} }
# 更新功能 # 更新功能
update_gost() { update_gost() {
echo "🔄 开始更新 GOST..." echo "🔄 开始更新 GOST..."
get_instance_name
if [[ ! -d "$INSTALL_DIR" ]]; then if [[ ! -d "$INSTALL_DIR" ]]; then
echo "❌ GOST 实例 '$INSTANCE_NAME' 未安装,请先选择安装。" echo "❌ GOST 未安装,请先选择安装。"
return 1 return 1
fi fi
@@ -346,9 +244,9 @@ update_gost() {
fi fi
# 停止服务 # 停止服务
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then if systemctl list-units --full -all | grep -Fq "gost.service"; then
echo "🛑 停止 ${SERVICE_NAME} 服务..." echo "🛑 停止 gost 服务..."
systemctl stop ${SERVICE_NAME} systemctl stop gost
fi fi
# 替换文件 # 替换文件
@@ -360,7 +258,7 @@ update_gost() {
# 重启服务 # 重启服务
echo "🔄 重启服务..." echo "🔄 重启服务..."
systemctl start ${SERVICE_NAME} systemctl start gost
echo "✅ 更新完成,服务已重新启动。" echo "✅ 更新完成,服务已重新启动。"
} }
@@ -368,24 +266,23 @@ update_gost() {
# 卸载功能 # 卸载功能
uninstall_gost() { uninstall_gost() {
echo "🗑️ 开始卸载 GOST..." echo "🗑️ 开始卸载 GOST..."
get_instance_name
read -p "确认卸载 GOST 实例 '$INSTANCE_NAME' 吗?此操作将删除所有相关文件 (y/N): " confirm read -p "确认卸载 GOST 吗?此操作将删除所有相关文件 (y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "❌ 取消卸载" echo "❌ 取消卸载"
return 0 return 0
fi fi
# 停止并禁用服务 # 停止并禁用服务
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then if systemctl list-units --full -all | grep -Fq "gost.service"; then
echo "🛑 停止并禁用服务..." echo "🛑 停止并禁用服务..."
systemctl stop ${SERVICE_NAME} 2>/dev/null systemctl stop gost 2>/dev/null
systemctl disable ${SERVICE_NAME} 2>/dev/null systemctl disable gost 2>/dev/null
fi fi
# 删除服务文件 # 删除服务文件
if [[ -f "/etc/systemd/system/${SERVICE_NAME}.service" ]]; then if [[ -f "/etc/systemd/system/gost.service" ]]; then
rm -f "/etc/systemd/system/${SERVICE_NAME}.service" rm -f "/etc/systemd/system/gost.service"
echo "🧹 删除服务文件" echo "🧹 删除服务文件"
fi fi
@@ -412,7 +309,7 @@ main() {
# 显示交互式菜单 # 显示交互式菜单
while true; do while true; do
show_menu show_menu
read -p "请输入选项 (1-5): " choice read -p "请输入选项 (1-4): " choice
case $choice in case $choice in
1) 1)
@@ -428,15 +325,11 @@ main() {
break break
;; ;;
4) 4)
list_services
break
;;
5)
echo "👋 退出脚本" echo "👋 退出脚本"
exit 0 exit 0
;; ;;
*) *)
echo "❌ 无效选项,请输入 1-5" echo "❌ 无效选项,请输入 1-4"
echo "" echo ""
;; ;;
esac esac